例如下面的配置方式是允许的。当访问时将被转发到:8080/bbs/上。
server_name ; location /forum/ { proxy_pass :8080/bbs/; }而如果使用了正则匹配,将是不允许的。如下。
server_name ; location ~ ^/forum/ { proxy_pass :8080/bbs/; }只能修改转发路径使其不包含URI。如下。此时请求将转发到:8080/forum/。
server_name ; location ~ ^/forum/ { proxy_pass :8080/; } 1.4.3 proxy_set_header可以在nginx配置文件中的http段、server段或location段设置proxy_set_header指令。设置该指令后,传输给上游服务器的报文首部将包含相关的信息,如设置客户端的真实IP地址。设置如下:
server { listen 80; server_name ; location ~ \.(png|jpg|jpeg|bmp|gif)$ { proxy_pass :80; proxy_set_header X-Forwarded-For $remote_addr; } location / { proxy_pass :80/; proxy_set_header X-Forwarded-For $remote_addr; } location ~ \.(php|php5)$ { proxy_pass :80; proxy_set_header X-Forwarded-For $remote_addr; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }仅在代理服务器上设置了该头部字段后还不够,因为后端服务器仅仅只是获取到它,默认并没有将其记录下来。所以需要在后端的服务的日志格式设置上记录此项或者在其他有需求的地方设置它。nginx的日志格式和apache的日志设置格式不同,以下分别是两种web程序的设置方法:
# nginx上的日志设置格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" '; access_log logs/access.log main; # apache上的日志设置格式 LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined以下是nginx日志上记录的信息。
[root@xuexi nginx]# tail -1 logs/access.log 192.168.100.29 - - [26/Apr/2017:14:35:30 +0800] "GET /index.php HTTP/1.0" 200 76990 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36" "192.168.100.1"以下是apache日志中记录的信息。
[root@xuexi ~]# tail -1 /etc/httpd/logs/access_log 192.168.100.1 192.168.100.29 - - [26/Apr/2017:14:32:52 +0800] "GET /a.png HTTP/1.0" 200 2653 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36" 1.5 ngx_http_upstream_module模块upstream模块定义上游服务器组。主要的指令有"upstream"、"server"、"ip_hash"。upstream指令必须定义在server段外面。
以下是一个综合示例定义方法,并非正确,只是放在一起方便比较用法。
upstream backend { server 192.168.100.25; server 192.168.100.26:80; server ; server :8080; server 192.168.100.27 weight=2 max_fails=2 fail_timeout=2s; server 192.168.100.28 down; server 192.168.100.29 backup; ip_hash; # 定义此项后,前面的server附加项weight和backup功能失效。 }默认使用加权均衡算法,使用ip_hash指令可设置为ip_hash算法,但使用ip_hash指令后,如果server指令中使用了weight和backup选项,这两个功能将会失效。
其中server指令后可以跟的附加选项有:
weight:定义该后端服务器在组中的权重,默认为1,权重越大,代理转发到此服务器次数越多。
max_fails和fail_timeout:定义代理服务器联系后端服务器的失败重联系次数和失败后重试等待时间。默认为1和10,如果设置为2和3,则表示只尝试联系2次,每次失败等待3秒后进行下一次重试,也就是说6秒后就能判定此后端服务器无法联系上,将负载均衡到下一台服务器上。常会配合proxy_next_upstream或者fastcgi_next_upstream或者memcached_next_upstream来指定失败时如何处理。