2 人参与回答
程东
程东 · 免费注册公司就找云算账

太厉害了,学习了

<p>一、利用的原理</p><p>云服务器提供商如果检测到你这个域名解析到了他的服务器,且没在他那里备案,就会劫持掉服务器的80和443端口,跳转到备案提示的页面,导致一打开网址就会出现页面未备案的提示。后来经过反复测试发现,如果把web端口改成其他端口,如1234,那么就不会被劫持。例如在腾讯云中,我们可以把未备案的B服务器的web端口改成 1234,然后通过  http://服务器ip:1234  的方式来访问。既然这样,那我们可以利用nginx的端口转发和反向代理功能,把上面未备案B服务器的1234端口转发到备案的的A服务器的80端口,然后把域名解析A服务器,就可以通过A服务器转发请求到B服务器,实现绕过网站备案功能了。</p><p>简单画张图理解下:</p><p><br></p><p></p><p>二、实现前需要明确的内容</p><p>有几点先要明确下:</p><p>①域名直接解析到A服务器,A服务器需要正常添加一个网站,监听80端口,并绑定域名,把该域名的80端口访问请求转发到B服务器的1234端口;</p><p>②对于B服务器来说,用户访问的操作相当于A服务器访问B服务器,是通过IP访问的,因此不需要添加域名,直接监听1234端口即可。</p><p>③如果需要添加多个网站,可以通过端口来区分,如1234端口指定网站,2345端口指定。</p><p>④无论何种情况,B服务器是最终的web服务器,A服务器只是做了下转发,因此网站如果需要添加https、301跳转之类的,直接在B服务器上配置即可。</p><p>三、端口转发实现(实际操作实录)</p><p>现在我们开始实际操作下,通过端口转发,实现这个域名可以被访问。</p><p>1.添加解析</p><p>首先我们在域名服务商那里,添加一条A解析,把解析到备案的A服务器的地址。提交完成后,等几分钟,ping一下这个域名,如果成功ping出了地址,那么解析成功。</p><p><br></p><p></p><p>2.未备案的B服务器上操作</p><p>切换到B服务器,首先添加一个网站,填写网站信息(如图)</p><pre>lnmp vhost add</pre><p></p><p><br></p><p>接下来我们更改下这个域名的配置文件:</p><pre>vim /usr/local/nginx/conf/vhost/><p>如图把默认的80端口改成1234端口,编辑按insert,保存按esc然后输入 :wq</p><p><br></p><p></p><p>这时候我们访问 http://ip:1234 是无法访问的。因为lnmp环境下,nginx有一个主配置文件,规定了默认的配置。</p><p>修改主配置文件:</p><pre>vim /usr/local/nginx/conf/><p>如图,把最下面那一整段 server{ } 用#给注释掉,到include vhost/*.conf上面位置</p><p><br></p><p></p><p>接着重启下nginx:</p><pre>service nginx restart</pre><p>最后我们在的网站目录下放一个页面,来测试是否成功:</p><pre>vim /www/><p></p><p><br></p><p>如上图,我随便打了几个字,只是为了验证有没有成功。保存一下,然后浏览器访问 http://ip:1234</p><p><br></p><p></p><p>可以看到,已经可以通过IP+端口的形式正常访问了。(提示:如果这一步没法访问,请在安全组中放行1234端口,关闭防火墙)</p><p>3.备案的A服务器上的操作</p><p>我们切换到A服务器,新建一个nginx的配置文件:</p><pre>vim /usr/local/nginx/conf/vhost/><p>配置文件内容如下:</p><pre>server {

listen 80;
server_name location / {
    proxy_pass http://B服务器ip地址:1234;
}
    access_log off;
}</pre><p>然后保存,重启下nginx:</p><pre>service nginx restart</pre><p>完了后在浏览器中直接访问 <a href=" target="_blank" class="show-5118-data" data-url=" rel="Nofollow">></p><p><br></p><p></p><p></p><p>可以看到,已经成功完成了端口转发和反向代理,完美绕过备案。</p>