一.简介
Nginx已经成为主流的静态web容器、转发器、cache。
在web容器上完全超越apache、在转发上代替传统硬件设备、在cache已经可以媲美squid。加之大量的开源社区不断地贡献,使nginx功能不断完善和强大,已经有逐步成为统一平台的趋势。
二.nginx的配置文件
nginx配置的核心:server模块
解释各个参数:
1.server {} 虚机模块,一个server代表一个站点,或者说一个虚机。
server_name a.test.com; 机器名称,或者说是站点名称,该名称建议为实际的域名。配置后该域名可以用来直接访问站点。此处也可以配置多个域名用以访问,以空格分隔。
2/listen 80; 监听端口,默认使用80。
3.access_log 访问日志
4.error_log 错误日志
三.nginx反向代理
反向代理服务,可将客户端的请求转发给后端特定服务器,拿到请求结果后,再返回给客户端。
使用一个域名代理后端多个站点内容;
隐藏后端服务器;
增加缓存;
为后端服务器做七层负载均衡。
例如:nginx的配置文件如下
www.test.com站点,该站点模拟对外公布的唯一地址。
向外提供服务,向内做负载均衡。该站点不需要使用root参数,但是需要增加location参数。
location在nginx中匹配uri中的某个部分,匹配后做出{}中规定的动作。这些动作有可能包括proxy_pass转发,有可能包括rewrite,也会包括一切功能参数。
这里的含义是,匹配uri中含有“/a”的访问,反向代理给a.test.com;匹配uri中含有“/b”的访问,反向代理给b.test.com。
四.相对转发和绝对转发
绝对路径: http://other.test.com/
有这个符号的情况下,匹配的内容 不带到后端服务器。www.test.com会到other.test.com目录下查找/other后面的内容。也就是不会将/other代理走。
进行相对转发
相对路径:http://other.test.com
这种情况下,匹配的内容 一起带到后端服务器 ,www.test.com直接到other.test.com目录下查找uri中的内容。
这种情况下,代理域名和实际域名后面的uri是一致的,对于排查问题和故障都有一定帮助,更加明晰。
进行绝对转发
五.负载均衡
负载均衡配置:
Upstream中配置后端参与轮询的服务。
下面的location中直接使用全转发,通常会是这样的配置,并且使用upstream名称代替实际的域名。
在做负载均衡时,通常要加入以下参数:
client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
client_body_buffer_size 256k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 300s;
proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
proxy_ignore_client_abort on; #不允许代理端主动关闭连接
proxy_redirect off; #重要,可以使host中请求的域名保持传递给后端
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;