Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。
优点
- 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。
- 内存消耗少:在主流的服务器中Nginx目前是内存消耗最小的了,比如我们用Nginx+PHP,在3万并发链接下,开启10个Nginx进程消耗150M内存。
- 免费使用可以商业化:Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费使用,并且可以用于商业。
- 配置文件简单:网络和程序配置通俗易懂,即使非专业运维也能看懂。
安装
yum list | grep nginx sudo vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 sudo yum install nginx # 查看nginx安装版本 nginx -v # 查看所有nginx安装文件 rpm -ql nginx
主配置文件
/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf
启动、停止服务
启动:
- 直接使用nginx命令启动(centos7.4版本以上)
停止:
- nginx -s quit
- nginx -s stop
- killall nginx
重载配置文件:
nginx -s reload
linux通用的服务管理:
systemctl [start|restart|stop] nginx.service
service nginx [start|restart|stop]
权限控制
#根目录 location / { #分号不可少!!! root /usr/share/nginx/html; index index.html indx.htm; #顺序不能改变,同一个块下的两个权限指令,先出现的会覆盖后出现的 allow 192.168.158.132; deny all; } #指定目录 location = /img { allow all; } #正则表达式:~,指定.php结尾的文件 location ~ \.php$ { deny all; }
虚拟主机配置
- 在conf.d下新增**.conf配置文件,配置端口,ip或域名,根目录文件等
反向代理
正向代理:
- 客户端请求代理服务器,再由代理服务器请求真正的服务器(客户端的代理)
反向代理:
- 客户端请求代理服务器,由代理服务器决定最终访问哪个服务器(服务端的代理)
- 安全、功能(负载均衡)
location / { proxy_pass 192.168.158.132; #proxy_set_header: 在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。 #proxy_connect_timeout: 配置Nginx与后端代理服务器尝试建立连接的超时时间。 #proxy_read_timeout: 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。 #proxy_send_timeout: 配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。 #proxy_redirect: 用于修改后端服务器返回的响应头中的Location和Refresh }
适配不同屏幕
location / { root /usr/share/nginx/html; #链接到不同的程序入 if($http_user_agent ~* 'Android|iPhone') { root /usr/share/nginx/mobile; } index index.html; }
Gzip压缩配置
vi /etc/nginx/nginx.conf
http { #该指令用于开启或 关闭gzip模块。 gzip on; #指定压缩文件类型 gzip_types text/plain application/javascript text/css; #gzip_buffers : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 #gzip_comp_level : gzip压缩比,压缩级别是1-9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。 #gzip_disable : 可以通过该指令对一些特定的User-Agent不使用压缩功能。 #gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的Content-length中进行获取。 #gzip_http_version:识别HTTP协议版本,其值可以是1.1.或1.0. #gzip_proxied : 用于设置启用或禁用从代理服务器上收到相应内容gzip压缩。 #gzip_vary : 用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩。 }
集群Tomcat
配置多个tomcat,修改为不同端口
配置nginx,vi /etc/nginx/nginx.conf
#代理服务器礼列表 upsteam server_list { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { location / { #配置反向代理 proxy_pass http://server_list; } }
重启nginx,就会自动寻找服务器
session不共享问题
集群session默认不会共享,服务器之间的session是相互隔离的。
使用web容器本身的session共享策略解决,weblogic靠谱,tomcat存在缺陷,可以使用tomcat+redis的session共享策略实现。
配置tomcat自身的session共享策略:
- 启用所有tomcat配置中的集群配置,修改server.xml,取消下面代码的注释
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
- 修改项目的web.xml配置文件:添加
<distributable/>
标签即可