利用Nginx反向代理镜像HTTP网站解决网站被墙被和谐被DNS污染

如果遇到网站被墙、被和谐、被DNS投毒污染,导致域名无法在国内访问,可以通过Nginx反向代理镜像被 XX 的网站;当然,通过反向代理也可以做到多个域名访问同一个网站。

什么是反向代理镜像网站

小黑去饭店吃饭,小白是饭店的服务员,小红是饭店的厨师。小黑点了一道酸辣土豆丝,想问什么时候能上菜。

直接访问:

小黑直接去厨房问小红什么时候能做好,小红说十分钟后。

反向代理:

因某种原因,小黑去不了厨房了,但是小白可以去厨房。

小黑问小白什么时候能做好,小白走进厨房询问小红什么时候能做好。

小红告诉小白大约十分钟,小白走回小黑面前,告诉小黑需要十分钟。

第一步

假设需要用域名 bbbbb.com 去反向代理镜像网站 aaaaa.com

购买域名bbbbb.com:https://wangejiba.com/184.html

购买VPS (海外主机):https://wangejiba.com/145.html

bbbbb.comDNS解析:https://wangejiba.com/128.html

Lnmp搭建wbe 环境:https://wangejiba.com/104.html

创建虚拟主机(不用上传网站程序):https://wangejiba.com/79.html

第二步

看到第一步你会发现,上面的步骤和新建一个 WordPress 网站操作步骤一样,只是在最后一步创建虚拟主机后没有上传网站程序。

HTTP镜像

HTTP 镜像适用于:添加虚拟主机时选择不启用 SSL 证书,并且被镜像的域名也没有启用 SSL 证书

打开/usr/local/nginx/conf/vhost

找到 bbbbb.com.conf 下载到本地

打开 bbbbb.com.conf 删除所有内容,然后把以下内容复制到 bbbbb.com.conf

server

{

listen80;

server_name bbbbb.com;

if($http_user_agent~*(baiduspider360spiderhaosouspidergooglebotsosobingsogouyahoosohu-searchyodaoYoudaoBotrobozillamsnbotMJ12botNHNTwiceler)){

return403;

}

location/{

sub_filter aaaaa.com bbbbb.com;

sub_filter_once off;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

proxy_set_headerRefererhttp://aaaaa.com;

proxy_set_headerHostaaaaa.com;

proxy_pass http://aaaaa.com;

proxy_set_headerAccept-Encoding"";

}

}

然后把上述代码中的 aaaaa.com 改为被镜像的网站,

bbbbb.com 改为镜像网站所用的域名

因为我的网站都不带 WWW,所以示例也没有 WWW,如果你的有 WWW,请自行就改吧

修改完毕保存,把需改好的 bbbbb.com.conf 上传到服务器进行覆盖替换

最后执行:/etc/init.d/nginx restart 重启nginx,使其生效。

HTTPS镜像

HTTPS 镜像适用于:添加虚拟主机时选择启用 SSL 证书,并且被镜像的域名也启用了 SSL 证书

打开/usr/local/nginx/conf/vhost

找到 bbbbb.com.conf 下载到本地

打开 bbbbb.com.conf ,复制文中的如下证书内容(因域名不同,部分内容会有差别),保存到另一个文档中:

ssl on;

ssl_certificate/etc/letsencrypt/live/bbbbb.com/fullchain.pem;

ssl_certificate_key/etc/letsencrypt/live/bbbbb.com/privkey.pem;

ssl_session_timeout5m;

ssl_protocolsTLSv1TLSv1.1TLSv1.2;

ssl_prefer_server_ciphers on;

ssl_ciphers"EECDH+CHACHA20:EECDH+CHACH:RSA+3DES:!MD5";

ssl_session_cache builtin:1000shared:SSL:10m;

# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048

ssl_dhparam/usr/local/nginx/conf/ssl/dhparam.pem;

add_headerStrict-Transport-Security"max-age=31536000";

server

{

listen80;

listen443ssl;

server_name bbbbb.com;

index index.html index.htm index.phpdefault.htmldefault.htmdefault.php;

root bbbbb.com;

ssl on;

ssl_certificate/etc/letsencrypt/live/bbbbb.com/fullchain.pem;

ssl_certificate_key/etc/letsencrypt/live/bbbbb.com/privkey.pem;

ssl_session_timeout5m;

ssl_protocolsTLSv1TLSv1.1TLSv1.2;

ssl_prefer_server_ciphers on;

ssl_ciphers"EECDH+CHACHA20:EECDH+CHACH:RSA+3DES:!MD5";

ssl_session_cache builtin:1000shared:SSL:10m;

# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048

ssl_dhparam/usr/local/nginx/conf/ssl/dhparam.pem;

add_headerStrict-Transport-Security"max-age=31536000";

if($scheme=http){

return301https://$server_name$request_uri;

}

if($http_user_agent~*(baiduspider360spiderhaosouspidergooglebotsosobingsogouyahoosohu-searchyodaoYoudaoBotrobozillamsnbotMJ12botNHNTwiceler)){

return403;

}

location/{

sub_filter aaaaa.com bbbbb.com;

sub_filter_once off;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

proxy_set_headerRefererhttps://aaaaa.com;

proxy_set_headerHostaaaaa.com;

proxy_pass https://aaaaa.com;

proxy_set_headerAccept-Encoding"";

}

}

修改 ABC 三处的内容

A 处,把 bbbbb.com 替换为你用来镜像的域名

B 处,删 B处内容,把刚才单独保存的证书内容复制到 B处

C 处,把 bbbbb.com 替换为你用来镜像的域名,把 aaaaa.com 替换为被镜像的域名。

因为我的网站都不带 WWW,所以示例也没有 WWW,如果你的有 WWW,请自行就改吧,修改完毕保存,把需改好的 bbbbb.com.conf 上传到服务器进行覆盖替换。

最后执行:/etc/init.d/nginx restart 重启nginx,使其生效。

小的补充

反向代理的前提,是用来镜像的服务器能访问被镜像的服务器。如果被镜像的域名在国内被墙了,那么你购买国内的服务器去镜像,肯定是失败的,因为国内的服务器无法访问被国内墙掉的网站。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171221G0111W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券