nginx六:反向代理

正向代理:私网到公网
反向代理:公网到私网
一、proxy代理配置
1.nginx反向代理语法:proxy_pass URL
位置:location
示例:
proxy_pass http://localhost:8000/uri/; proxy_pass http://10.0.0.5:8000/uri/; proxy_pass http://unix:/tmp/backend.socket:/uri/;
2.URL跳转修改返回Location,比较少使用
语法:proxy_redirect default;
位置:http,server,location
3.添加发往后端服务器的请求头信息,使用得最多
语法:proxy_set_header field value;
位置:http,server,location
示例:
#用户请求的时侯HOST的值是www.xxx.com,那么代理服务器会向后端传递请求的还是www.xxx.com proxy_set_header Host $http_host; #$remote_addr的值为客户端的IP,将$remote_addr的值放进变量X-Real-IP中 proxy_set_header X-Real-IP $remote_addr; #客户端通过代理服务器访问后端服务,后端服务通过该 变量会记录真实客户端地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
http header包括:
- 概述
- 请求头
- 响应头

上图中,未设置header。
未设置HOST带来的问题:此时,代理服务器proxy,是通过IP(172.16.1.7)来向web服务器获取页面解析;但后面服务器,是使用同一个IP(172.16.1.7)不同域名来设置了3个web服务器;此时会导致不能跳转到正确的web服务器。
解决办法:在代理服务器proxy中,添加header中的Host:
proxy_set_header Host $http_host;
未设置HOST带来的问题:此时,web服务器的access_log日志,记录的是代理服务器proxy的IP地址:172.16.1.5,不是真实的客户端IP地址。
解决办法:在代理服务器proxy中,添加header中的remote_addr和x-forwarded-for:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
当然,代理服务器proxy的access_log日志,不受影响,记录的仍是客户端的IP地址。

4.代理到后的TCP连接、响应、返回等超时时间
#nginx代理与后端服务器连接超时时间(代理连接超时) 语法:proxy_connect_timeoute time; 默认值:time为60s 位置:http,server,location #nginx代理等待后端服务器的响应时间 语法:proxy_read_timeout time; 默认值:time为60s 位置:http,server,location #后端服务器数据回传给nginx代理超时时间 语法:proxy_send_timeout time; 默认值:60s 位置:http,server,location

5.proxy_buffer代理缓冲区
#nginx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传,不是全部接收完再传递给客户端 语法:proxy_buffering on | off 默认值:on 位置:http,server,location #设置nginx代理,保存用户头信息的缓冲区大小 语法:proxy_buffer_size size; 默认值:4k | 8k #proxy_buffers缓冲区 语法:proxy_buffers number size; 默认值:8 4k |8k
6.proxy代理,常用的优化配置如下,将配置写入新文件,调用时使用include引用即可
vim /etc/nginx/proxy_params
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k;
代理配置location时调用,方便后续多个location重复使用
location / { proxy_pass http://127.0.0.1:8080; include proxy_params; }
二、示例
1.环境:
角色 外网IP 内网IP 主机名
proxy 100.100.100.100 192.168.1.11 proxy_hostname
web:www 192.168.1.10 www_hostname
web:blog 192.168.1.10 blog_hostname
web:bbs 192.168.1.10 bbs_hostname
2.配置虚拟主机
使用“nginx三:”博客中的三台虚拟主机,具体配置如下:
vim /etc/nginx/conf.d/www.conf
server { listen 80; server_name www.myweb123.com; access_log /var/log/nginx/www.myweb123.com_access.log main; location / { root /var/www/www; index index.html; } location ~ \.avi$ { deny all; } }
vim /etc/nginx/conf.d/blog.conf
server { listen 80; server_name blog.myweb123.com; access_log /var/log/nginx/blog.myweb123.com_access.log main; location / { root /var/www/blog; index index.html; } error_page 500 502 503 503 /50x.html; location = /50x.html { root /var/www/blog; } }
vim /etc/nginx/conf.d/bbs.conf
server { listen 80; server_name bbs.myweb123.com; access_log /var/log/nginx/bbs.myweb123.com_access.log main; location / { root /var/www/bbs; index index.html; } }
在192.168.1.10服务器上,再增加一台server,使用不同的端口:sell站点
vim /etc/nginx/conf.d/sell.conf
server { listen 8080; server_name sell.myweb123.com; location / { root /var/www/sell; index index.html; } }
3.配置反向代理服务器
安装nginx:
vim /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
在/etc/nginx/conf.d/创建配置文件:
vim sell_proxy.conf
server { listen 80; server_name bbs.myweb123.com; location / { proxy_pass http://192.168.1.10:80; include proxy_params; } }
vim www_proxy.conf
server { listen 80; server_name sell.myweb123.com; location / { proxy_pass http://192.168.1.10:8080; include proxy_params; } }
vim blog_proxy.conf
server { listen 80; server_name www.myweb123.com; location / { proxy_pass http://192.168.1.10:80; include proxy_params; } }
vim bbs_proxy.conf
server { listen 80; server_name blog.myweb123.com; location / { proxy_pass http://192.168.1.10:80; include proxy_params; } }
创建proxy_params文件,用来统一配置代理:
vim /etc/nginx/proxy_params
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k;
4.重载配置
nginx -t
systemctl reload nginx
posted on 2014-08-29 21:08 myworldworld 阅读(216) 评论(0) 收藏 举报
浙公网安备 33010602011771号