此替换功能使用了 Nginx 的 sub_filter_module 模块,用来替换返回的 html 中的相关 信息。 需要 Nginx 启用 http_sub_module、http_ssl_module、和 http_lua_module 模块,启用方式见 init_nginx.sh 脚本。该脚本除 启用模块外,还修改 nginx.conf 主文件,增加对 enabled/*.conf 的引用。 生成代理配置的脚本为 new_proxy_http.sh(http 代理 https)、new_proxy_https.sh (https 代理 https),接收 4 个参数: 1. 要代理的源域名 2. 代理启用的镜像域名 3. 需要替换的文本内容的列表,用 : 组成对,用 ; 表示多组,用于替换 CDN 域名。 4. 需要删除的文本内容的列表,用 ; 表示多做,用来删除 google, facebook 等域名。 生成的配置文件直接在本地,以源域名+.conf 为名称。 将该文件拷贝到 nginx 的 enabled/ 目录下,重新加载 nginx,即可生效。 cemarose.com 这个网站启用了 https,所以代理也需要有 https(如果没有 https 需要修改 php 代码,去除 cookie 的 secure 限制)。 将新域名的 ssl 文件放在 ssl/ 目录下, 用目标域名命名 ssl 文件。 拿 cemarose.com 做例子: shawn@EryueStudio:~/work/nginx_proxy$ ./new_proxy.sh "www.cemarose.com" "cs.erpboost.com" "" "google.com;facebook.com" shawn@EryueStudio:~/work/nginx_proxy$ cat www.cemarose.com.conf server { listen 80; server_name cs.erpboost.com; location / { proxy_pass http://www.cemarose.com; proxy_set_header Host "www.cemarose.com"; proxy_set_header X-Real-IP $remote_addr; # 为替换,需禁用后端的压缩 proxy_set_header Accept-Encoding ""; # 替换跳转 proxy_redirect default; proxy_redirect https://www.cemarose.com https://cs.erpboost.com; sub_filter_once off; # 替换逻辑 # 禁用逻辑,只是把相关字串去掉,不能删除整行 sub_filter '//google.com' '//'; sub_filter '//facebook.com' '//'; } } server { listen 443; server_name cs.erpboost.com; ssl on; ssl_certificate ssl/cs.erpboost.com.crt; ssl_certificate_key ssl/cs.erpboost.com.key; location / { proxy_pass https://www.cemarose.com; proxy_set_header Host "www.cemarose.com"; proxy_set_header X-Real-IP $remote_addr; # 为替换,需禁用后端的压缩 proxy_set_header Accept-Encoding ""; # 替换跳转 proxy_redirect default; proxy_redirect https://www.cemarose.com https://cs.erpboost.com; sub_filter_once off; # 替换逻辑 sub_filter 'www.cemarose.com' 'cs.erpboost.com'; # 禁用逻辑,只是把相关字串去掉,不能删除整行 sub_filter '//google.com' '//'; sub_filter '//facebook.com' '//'; } }