文章

nginx 反代(含反代https)

  编辑于:2018-06-07
文章目录

最近学习了一下 如何使用nginx进行反代。
我用的环境是lnmp.org的一键lnmp.

基础

首先是修改 /usr/local/nginx/conf/nginx.conf 这里的配置文件。
添加如下内容

	
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout  5;
proxy_buffer_size 16k;
proxy_buffers  4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/cache/temp;
#临时文件目录
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:32m inactive=7d max_size=1g;
#5m为内存占用,1g为最大硬盘占用,cache_one为缓存区名称,如果需要修改对应修改。

设置目录权限

mkdir /home/cache/path -p
mkdir /home/cache/temp
chmod 777 -R /home/cache

添加虚拟主机

lnmp vhost add

修改虚拟主机配置

vi /usr/local/nginx/conf/vhost/example.com.conf
listen 80;
server_name example.com www.example.com;
#绑定的域名
index index.php;
#默认首页
access_log off;
#off 关闭日志
location / {
proxy_cache_key "$scheme://$host$request_uri";
#缓存key规则,用于自动清除缓存。
proxy_cache cache_one;
#缓存区名称,与前面定义的相同
proxy_cache_valid 200 304 3h;
proxy_cache_valid 301 3d;
proxy_cache_valid any 10s;
#200 304状态缓存3小时
301状态缓存3天
其他状态缓存(如502 404)10秒
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#向后端传递访客ip
proxy_set_header Referer http://example.com;
#强制定义Referer,程序验证判断会用到
#proxy_set_header Host $host;
#定义主机头
proxy_pass http://1.2.3.4;
#指定后端ip,可以加端口
#proxy_cache_use_stale invalid_header error timeout http_502;
#当后端出现错误、超时、502状态时启用过期缓存,慎用。
}
}

重启nginx

lnmp nginx restart

进阶

有的时候我们反代了还希望修改显示的一些内容
则可以使用nginx的sub_filter模块
修改站点的配置文件(/usr/local/nginx/conf/vhost/example.com.conf)并添加以下内容。

 
sub_filter      a   'b';
sub_filter_once on;
sub_filter_types text/html;

#sub_filter 一行代码前面是需要替换的内容,后面单引号内是替换成的内容。
#sub_filter_once 意思是只查找并替换一次。on是开启此功能,off是关闭——默认值是on。
#sub_filter_types 一行意思是选定查找替换文件类型为文本型。也可以不加此行,因为默认只查找文本型文件。

由于nginx自带的sub_filter模块功能有限,我们可以添加subs_filter模块。
下载subs_filter模块。

https://github.com/yaoweibin/ngx_http_substitutions_filter_module

修改 lnmp1.4/lnmp.conf

Nginx_Modules_Options='--add-module=/模块下载的目录/ngx_http_substitutions_filter_module'

升级或者重装nginx
运行lnmp1.4目录下的upgrade.sh

 ./upgrade.sh nginx

修改站点的配置文件(/usr/local/nginx/conf/vhost/example.com.conf)并添加以下内容。

subs_filter "a" "b" gi;
#a为需要替换的内容,b为目标内容。gi为参数g 替换所有匹配内容,i为不区分大小写。
#subs_filter模块还支持正则等功能,具体详见https://github.com/yaoweibin/ngx_http_substitutions_filter_module

重启Nginx

lnmp nginx restart

反代https网站

反代全站https的网站需要一些特别的设置。
修改server[]的设置。

location / {
proxy_pass https://欲反代的域名;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host 欲反代的域名;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}

参考链接:
http://www.laozuo.org/5004.html
http://www.cnblogs.com/kevingrace/p/5865501.html

发表回复