Total Pageviews

Thursday, 7 September 2017

利用Nginx的反向代理功能,解决服务器的80端口被封问题

本文是建立在你网站本身“合法”但却因连坐导致网站无法访问的基础上,利用Nginx实现访问你机器的其他端口。
准备条件:国内外正常提供服务并装好Nginx的VPS一个。推荐Xen VPS、OpenVZ。既然是VPS建议装CentOS,CentOS就是免费的。Nginx本身也是在Linux/BSD平台下的效率最高。
一直以来我们都把Nginx当成高性能的Web服务器来用,却忽略了其反向代理服务器的重要作用,注意看:“Nginx [engine x] is a HTTP and reverse proxy server”的后半部分,reverse proxy server即反向代理服务器。
关于nginx的web服务器相关介绍及安装,可以参考张宴的 《Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]》 一文。
今天我们重点介绍如何通过Nginx反向代理功能,实现访问网站域名的的时候自动访问你服务器的其他某个端口,比如81,当然你的81端口要能使用,不能用81的话你就在你被Blocked 80的服务器上指定65535内找个能用的端口,然后指定IIS或者Apache的Web服务端口为该端口。
1.一台服务器一个网站
我们假定主域名为 www.opensoce.com,那么www.opensoce.com的A记录应指向到你VPS的 IP上,然后可以建立个block.opensoce.com指向你被封的服务器IP,修改VPS的Nginx.conf配置文件。在末尾处(“}”号之前)添加如下内容:
01server {
02 listen   80;
03 server_name  www.opensoce.com;
04        proxy_set_header X-Real-IP $remote_addr;
05        proxy_set_header REMOTE-HOST $remote_addr;
06        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
07 access_log  /home/www/logs/opensoce.com_access.log;
08 location /robots.txt {
09  root   /home/www/www.opensoce.com;
10 }
11 location / {
12    proxy_pass http://block.opensoce.com:81;
13# 此处填写你的IP或者域名外加你服务器开放的端口。
14 }
15}
执行
1kill -HUP `ps aux|grep "nginx: master "|awk \'{print $2}\'`
平滑重启nginx即可。
这个是一个网站的反向代理,如果你有多个网站,那么在服务器的Apache的httpd.conf中分配不同的端口给不同的站点,然后在VPS的Nginx.conf按照上面的代码复制一份修改端口和域名即可,有多少个网站服务器就要开多少个端口,相应的 vps上的nginx.conf也要有相关配置才能正常访问。
2.一台服务器多个站
在nginx.conf同目录建立 proxy.conf
内容如下:
01proxy_redirect     off;
02proxy_set_header Host $host;
03proxy_set_header X-Real-IP $remote_addr;
04proxy_set_header REMOTE-HOST $remote_addr;
05proxy_set_header X-Forwarded-For $remote_addr;
06proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
07 
08client_max_body_size    10m;
09client_body_buffer_size    128k;
10proxy_connect_timeout   90;
11proxy_send_timeout      90;
12proxy_read_timeout      90;
13proxy_buffer_size         32k;
14proxy_buffers             4 32k;
15proxy_busy_buffers_size 64k;
16proxy_temp_file_write_size 64k;
17proxy_ignore_client_abort on;
18proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
19proxy_max_temp_file_size 128m;
在nginx.conf 末尾的”}”前加上一行:
1include proxy.conf;
然后你要支持几个网站就在 nginx.conf添加几行:
1server {
2  listen 80;
3  server_name www.opensoce.com;
4  location / { 
5    proxy_pass http://block.opensoce.com:81; 
6  }
7}
示例:
1server { listen 80; server_name  www.opensoce.com; location / { proxy_passhttp://block.opensoce.com:81; }}
2server { listen 80; server_name  www1.opensoce.com; location / { proxy_passhttp://block.opensoce.com:82; }}
3server { listen 80; server_name  www2.opensoce.com; location / { proxy_passhttp://block.opensoce.com:83; }}

No comments:

Post a Comment