产生原因描述

现在我有一台服务器,这里叫服务器①,服务器①的80端口因为某些原因被封了,而原来指向这台服务器的域名全都失效了,只能通过服务器①的ip:端口号的方式进行访问,这样用户体验极差,所以找办法解决了一下,于是有了下面的方案。

处理方式

前提

需要两台服务器(服务器①和服务器②,服务器①是源码所在服务器),以及域名解析权限。

步骤

  • 首先解析一个ip:端口号的访问地址,并确保能正常访问。

  • 然后把想要恢复正常的网站解析到服务器②上,然后此服务器打开Nginx的配置,在配置的最后一行会有这么一句:

include /www/server/panel/vhost/nginx/*.conf;
  • 我们去打开这个目录,因为他是用*进行加载的配置,所以这里建议每个网站建立一个conf文件,文件名随意,但建议和域名同步,防止混乱后期也便于维护,要配置的内容是:

upstream shx {
server 服务器①的ip:端口号 weight=1;
}

server {
        listen 80;
        server_name 解析的域名地址;
        index index.html;

        location / {
            proxy_pass          http://shx/;
            proxy_set_header    X-Forwarded-For         $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto       $scheme;
            proxy_set_header    X-Forwarded-Port        $server_port;
            proxy_set_header    Host                    $host;
            proxy_set_header    X-Real-IP               $remote_addr;
        }
        location ~ ^/(WEB-INF)/ {
            deny all;
        }
}
  • 配置好后就可以通过域名正常访问,看上去是域名进行访问,但实际上访问的是ip:端口号。

注意

因为此目录下所有配置是一起加载的,所以每个upstream后面的名字都要不一样,下面proxy_pass中的也要相应替换。

补充

这个方法还有其它作用,例如某阿域名要求必须绑定自己公司的服务器,如果你绑定其他公司的服务器,会导致网站无法正常访问,也可以用这种方法,先解析到某阿自己的服务器,再指向到自己的服务器。