通过之前的文章《Nginx模块upstream_module详细介绍以及调度算法》简单阐述了一个nginx如果通过upstream实现负载均衡。操作比较简单, 但其中个别重要参数介绍不完整。这里补充一下proxy_pass。
该代理方式的运行原理是前端访问的时候,请求到哪个主机,执行到后边定义的proxy_pass,就会按照我们定义的upstream 名称执行对应的标签,比如《Linux环境下Nginx 通过upstream如何配置负载均衡以及实现》定义的web_pools这个web池,当然也可以是一个url地址,然后按照upstream定义的服务器以及设置好的算法进行分发执行。
本文简单补充下proxy_pass参数(proxy_pass指令属于ngx_http_proxy_module模块,关于更多ngx_http_proxy_module后边将做详细笔记):
proxy_pass http://web_pools; 用于指定反向代理服务器的服务器池。
proxy_set_header Host $host; 作用web服务器上有多个站点时,用该参数header来区分反向代理哪个域名。比如下边的代码举例。
proxy_set_header X-Forwarded-For $remote_addr; 作用是后端服务器上的程序获取访客真实IP,从该header头获取。部分程序需要该功能。
一般我们会在location标签中调用include proxy.conf,内容基本如下,参数可以根据实际环境进行修改:
proxy_redirect off ; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 2m; proxy_connect_timeout 6000; proxy_send_timeout 6000; proxy_read_timeout 6000; proxy_buffer_size 256k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; #proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; #proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host
针对proxy_set_header Host $host;作用代码举例如下:
nginx配置文件:
http { include mime.types; default_type application/octet-stream; sendfile on; upstream web_pools { server 192.168.1.102:80 weight=5 max_fails=3 fail_timeout=3; server 192.168.1.103:80 weight=1 max_fails=3 fail_timeout=3; server 192.168.1.104:80 backup; } server { listen 80; server_name nginx.21yunwei.com; location / { root html; index index.html index.htm; proxy_pass http://web_pools; proxy_set_header Host $host; } } }
其中一个web节点httpd.conf站点配置如下:
ServerAdmin admin@21yunwei.com DocumentRoot /var/www/bbs ServerName nginx.21yunwei.com ErrorLog logs/bbs-error_log CustomLog logs/bbs-access_log common ServerAdmin admin@21yunwei.com DocumentRoot /var/www/blog ServerName blog.21yunwei.com ErrorLog logs/blog-error_log CustomLog logs/blog-access_log common
我们访问nginx.21yunwei.com 可以得到测试站点内容,访问blog.21yunwei.com也可以得到blog对应内容。这样就避免了只访问第一个站点的情况。