1.图片/文件上传分析
传统方式的文件上传:将文件通过流传入到tomcat服务器下面的images文件夹中,这样的上传方式效率十分低下、高并发情况下极易出现线程异常
集群下的文件上传:搭建负载均衡服务器nginx,由专门负责上传/下载的图片服务器FastDFS统一管理
FastDFS:分布式文件系统
2.nginx简介
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。(tomcat只有五百左右的并发)
2>nginx应用场景
http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
官方网站:http://nginx.org/
3.nginx的安装(linux系统下)
安装环境:
1>需要安装gcc的环境:nginx是基于c语言开发的,所以在安装前必须安装c语言的编译环境
yum install gcc-c++
2>第三方开发包(三条yum命令)
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
yum install -y pcre pcre-devel
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
安装步骤:
第一步:把nginx的源码包上传到linux系统:nginx-1.8.0.tar.gz
第二步:解压缩
[root@localhost ~]# tar zxvf nginx-1.8.0.tar.gz
第三步:进入nginx-1.8.0然后使用configure命令创建一makeFile文件。
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
[root@localhost sbin]# mkdir /var/temp/nginx/client -p
第四步:make
第五步:make install
启动nginx:
进入/usr/local/nginx/sbin目录
[root@localhost ~]# cd /usr/local/nginx/sbin
启动:[root@localhost sbin]# ./nginx
关闭nginx:[root@localhost sbin]# ./nginx -s stop 推荐使用:[root@localhost sbin]# ./nginx -s quit
刷新配置文件:[root@localhost sbin]# ./nginx -s reload
访问ngin(linux的ip地址):192.168.247.128,默认是80端口
4.配置虚拟主机
在一台服务器启动多个网站,如何区分不同的网站:通过端口区分虚拟主机,通过域名区分不同虚拟主机
端口:例如(80,81,82....)
域名:就是网站(www.baidu.com、www.jd.com....)
listen(端口)、server——name(域名:访问的网站)、root(访问后显示的页面首页)
1>通过端口区分虚拟主机
nginx的配置文件:/usr/local/nginx/conf/nginx.conf
可以配置多个server,这样配置了多个虚拟主机。
添加一个虚拟主机:端口为81,当我们访问nginx:192.168.247.128:81此时出现的页面是html-81
注意:修改配置文件后要刷新nginx服务器[root@localhost sbin]# ./nginx -s reload
#监听80端口,并把接收到的非https请求 转换成https的
server {
listen 80;
server_name lab.52csjy.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl default_server;
server_name lab.52csjy.com;
# root /usr/share/nginx/html;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/ *.conf;
ssl_certificate /etc/ssl/1992045_lab.52csjy.com/1992045_lab.52csjy.com.pem;
ssl_certificate_key /etc/ssl/1992045_lab.52csjy.com/1992045_lab.52csjy.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8989;
}
location /upload{
alias /www/my_project/upload;
}
access_log /www/wwwlogs/access.log;
}
2>通过域名区分虚拟主机
Dns服务器:把域名解析为ip地址,保存的就是域名和ip的映射关系。
nginx的/usr/local/nginx/conf/nginx.conf配置文件中:一个域名对应一个ip地址,一个ip地址可以被多个域名绑定。
测试方法:
本地测试可以修改hosts文件。
修改window的hosts文件:(C:\Windows\System32\drivers\etc)
可以配置域名和ip的映射关系,如果hosts文件中配置了域名和ip的对应关系,不需要走dns服务器。
192.168.247.128 www.taobao.com
192.168.247.128 www.baidu.com
nginx的/usr/local/nginx/conf/nginx.conf配置文件添加server节点:listen(端口)、server——name(域名:访问的网站)、root(访问后显示的页面首页)
server {
listen 80;
server_name www.taobao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-taobao;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.baidu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-baidu;
index index.html index.htm;
}
}
5.反向代理
正向代理:服务器接收到用户请求后,根据用户请求的信息决定去那台服务器(用户决定)
反向代理:反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。(服务器决定)
反向代理的作用:负载均衡,通过反向代理服务器来优化网站的负载
2>nginx实现反向代理:两个域名指向同一台nginx服务器,用户访问不同的域名显示不同的网页内容。
第一步:安装两个tomcat,分别运行在8080和8081端口。
第二步:启动两个tomcat。
第三步:反向代理服务器的配置(nginx的/usr/local/nginx/conf/nginx.conf配置文件)
listen(端口)、server——name(域名:访问的网站)、root(访问后显示的页面首页)、tomcat1 /2(tomcat的首页,此时有两个tomcat在启动中)
upstream tomcat1 {
server 192.168.247.128:8080;
}
server {
listen 80;
server_name www.sina.com.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat1;
index index.html index.htm;
}
}
upstream tomcat2 {
server 192.168.247.128:8081;
}
server {
listen 80;
server_name www.sohu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat2;
index index.html index.htm;
}
}
第四步:nginx重新加载配置文件
第五步:配置域名
在hosts文件中添加域名和ip的映射关系(C:\Windows\System32\drivers\etc)
192.168.247.128 www.sina.com.cn
192.168.247.128 www.sohu.com
第六步:测试 >>> 在window浏览器中访问www.sina.com.cn和www.sohu.com
6.负载均衡
如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。
upstream tomcat2 {
server 192.168.247.128:8081;
server 192.168.247.128:8082;
}
可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1
upstream tomcat2 {
server 192.168.247.128:8081;
server 192.168.247.128:8082 weight=2;
}