nginx有个非常好用的反向代理功能,可以作为中间第三人,连接两个世界。当然,正常情况下来说,大多数情况下,nginx的反代功能,就是个普通的运维命令,反向代理个node或者php之类的程序,是最常见的运维使用方式。但是,事实上,nginx的反代功能,也可以用于反代任何一个网站...

宝塔面板的 nginx 如何设置反代功能?sub_filter 指令使用方法 - nginx
宝塔面板的 nginx 如何设置反代功能?sub_filter 指令使用方法(图2-1)

本文演示的两个站,都是苏南大叔的站。本次域名备案的事情,就是这两个域名交替操作备案的,完美合作。已经备案的域名newsn.com.cn,待备案的域名newsn.net

宝塔面板设置

因为数据代码都在newsn.net上面,所以,苏南大叔用的是newsn.com.cn去代理newsn.net。设置如图所示:

宝塔面板的 nginx 如何设置反代功能?sub_filter 指令使用方法 - proxy
宝塔面板的 nginx 如何设置反代功能?sub_filter 指令使用方法(图2-2)

这里重点说明,以下几点:

目标URL发送域名

目标URL发送域名,这两个的组合设置,会有些匪夷所思。不能用常理去推断这两个组合。苏南大叔是这么解读的:把发送域名替换到目标URL中的域名部分,才是真正常理意义上,大家所熟悉的网址。所以,如果你看到目标URL中的域名,没有证书的话,还写成https://的话,也不用奇怪。因为目标URL中的域名就仅仅是个解析IP的作用。

如果对方站点上也绑定了当前域名,那么请发送域名$host,否则请指定真实的域名。注意:在目标URL中写对应域名,是不会生效的!解释不清楚,大家仔细看。

  • 目标URL中的网址domain,仅仅起到的作用是代替IP的意思。所以,直接写IP也是可以的。而发送域名这个才是真正的域名,不能填写错误。当然默认值$host,就指的是面板中当前站点的域名了。

内容替换

注意:有且只有一对内容替换配置,这对儿词,在页面内可以匹配全部并匹配。这个是nginx本身的问题,新手小白会非常迷糊。因为大家的实际需求,肯定是要替换多组词汇的,而且肯定是要每组匹配值都替换掉的。但是,这个问题上,nginx的默认模块,就显得很无力了,只能配置一组词汇。

缓存

苏南大叔认为,还是默认启用缓存吧。不过,这个缓存与否。具体的效果,苏南大叔还没有试验出来,差别有多大。

nginx配置

配置好之后,反应到nginx的配置文件中,就是下面这个样子的:

location / {
    proxy_pass https://127.0.0.1;
    proxy_set_header Host newsn.net;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;

    add_header X-Cache $upstream_cache_status;
    proxy_set_header Accept-Encoding "";
    sub_filter "https://newsn.net" "http://newsn.com.cn";
    sub_filter_once off;
    expires 12h;
}
location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?${
    //同上配置
}
location ~ .*\.(html|htm|png|gif|jpeg|jpg|bmp|js|css)?${
    //同上配置
    #缓存相关配置
    proxy_cache cache_one;
    proxy_cache_key $host$request_uri$is_args$args;
    proxy_cache_valid 200 304 301 302 1h;
}
location ~ /purge(/.*) {
   #缓存相关配置 
   proxy_cache_purge cache_one newsn.net$request_uri$is_args$args;
   #access_log  /www/wwwlogs/newsn.com.cn_purge_cache.log;
}

proxy_set_headersub_filter 以及 sub_filter_once

这里就是和普通的运维配置,不一样的地方了。一般的运维人员,是不会配置这2个值的。这2个值是默认的写法,但,并不是完美的写法。这里有几个说明问题:

  • xml文件是默认不参与文本替换的,这个将在下面说明解决。
  • 文本替换,只能替换一组,这个将在下一篇文章中解决。
  • sub_filter_once这个值,应该恒定设置为off,千万不能设置为on。因为最普遍的需求就是要替换所有文字。

proxy_cache

在宝塔面板的默认设置中,只对html|htm|png|gif|jpeg|jpg|bmp|js|css文件设置是否缓存,并且存在一个特殊的方法,来清除掉缓存,具体见上述配置中的proxy_cache开头的相关设置。

/purge/开头的链接地址,都是特殊处理,用于清楚缓存的。

总结

本文说的nginx反代,属于最基础最简单的部分,日常运维中,总常见的情况是:nginxsub_filter不生效。也就是说想替换的词没有被替换掉。这样的情况要怎么处理呢?请继续查看,苏南大叔的后续nginx经验文章。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   nginx    proxy

本站的忠实读者小伙伴,正在阅读下面这些文章: