热爱技术
专注分享

玩转nginx之:端口转发+反向代理完美绕过网站备案

写这篇文章之前先吐槽下国内的备案系统。

前段时间腾讯云有个活动,于是高兴地买了3年的云主机。目前手头几个域名,在阿里云备案的,想把域名解析到腾讯云主机上。结果解析过去之后,打开页面一看,腾讯云提示备案。我想怎么这么奇怪,明明已经备案好了,难道系统出bug了? 后来发工单问了才知道,在阿里云备案的域名,如果要使用腾讯云的主机,那么需要把备案重新转到腾讯云上去,要把所有的备案流程都走一遍。并且转移到腾讯云之后,这个域名就不能解析到阿里云的主机了。  WTF??????? 这个备案系统就是这么坑,难道是我打开的姿势有误?

想了下还是不甘心,凭什么这都能垄断。要知道走一遍备案流程有多麻烦,收快递拍照、审核、复核不说,在备案期间这个域名还不能访问,走完流程大概得一个月。且我的服务器基本都在阿里云,这一转备案那不得出问题。

本着折腾的原则,想到了nginx的反向代理。尝试了几次,完美绕过备案。现在把方法分享一下给大家。

环境:备案的阿里云服务器一台(简称备案的A服务器),未备案腾讯云服务器一台(简称未备案B服务器),两台都是centos7系统,一键安装LNMP环境。本次操作需要通过端口转发的原理,实现nginx.xiaoweigod.com这个域名可以被访问。

一、利用的原理

云服务器提供商如果检测到你这个域名解析到了他的服务器,且没在他那里备案,就会劫持掉服务器的80和443端口,跳转到备案提示的页面,导致一打开网址就会出现页面未备案的提示。后来经过反复测试发现,如果把web端口改成其他端口,如1234,那么就不会被劫持。例如在腾讯云中,我们可以把未备案的B服务器的web端口改成 1234,然后通过  http://服务器ip:1234  的方式来访问。既然这样,那我们可以利用nginx的端口转发和反向代理功能,把上面未备案B服务器的1234端口转发到备案的的A服务器的80端口,然后把域名解析A服务器,就可以通过A服务器转发请求到B服务器,实现绕过网站备案功能了。

简单画张图理解下:

image.png

二、实现前需要明确的内容

有几点先要明确下:

①域名直接解析到A服务器,A服务器需要正常添加一个网站,监听80端口,并绑定域名,把该域名的80端口访问请求转发到B服务器的1234端口;

②对于B服务器来说,用户访问的操作相当于A服务器访问B服务器,是通过IP访问的,因此不需要添加域名,直接监听1234端口即可。

③如果需要添加多个网站,可以通过端口来区分,如1234端口指定网站www.a.com,2345端口指定www.b.com。

④无论何种情况,B服务器是最终的web服务器,A服务器只是做了下转发,因此网站如果需要添加https、301跳转之类的,直接在B服务器上配置即可。

三、端口转发实现(实际操作实录)

现在我们开始实际操作下,通过端口转发,实现live2d.xiaoweigod.com这个域名可以被访问。

1.添加解析

首先我们在域名服务商那里,添加一条A解析,把live2d.xiaoweigod.com解析到备案的A服务器的地址。提交完成后,等几分钟,ping一下这个域名,如果成功ping出了地址,那么解析成功。

image.png

2.未备案的B服务器上操作

切换到B服务器,首先添加一个网站,填写网站信息(如图)

lnmp vhost add

image.png

接下来我们更改下live2d.xiaoweigod.com这个域名的配置文件:

vim /usr/local/nginx/conf/vhost/live2d.xiaoweigod.com.conf

如图把默认的80端口改成1234端口,编辑按insert,保存按esc然后输入 :wq

image.png

这时候我们访问 http://ip:1234 是无法访问的。因为lnmp环境下,nginx有一个主配置文件,规定了默认的配置

修改主配置文件:

vim /usr/local/nginx/conf/nginx.conf

如图,把最下面那一整段 server{ } 用#给注释掉,到include vhost/*.conf上面位置

image.png

接着重启下nginx:

service nginx restart

最后我们在live2d.xiaoweigod.com的网站目录下放一个页面,来测试是否成功:

vim /www/live2d.xiaoweigod.com/index.html

image.png

如上图,我随便打了几个字,只是为了验证有没有成功。保存一下,然后浏览器访问 http://ip:1234

image.png

可以看到,已经可以通过IP+端口的形式正常访问了。(提示:如果这一步没法访问,请在安全组中放行1234端口,关闭防火墙)

3.备案的A服务器上的操作

我们切换到A服务器,新建一个nginx的配置文件:

vim /usr/local/nginx/conf/vhost/live2d.xiaoweigod.com

配置文件内容如下:

server {

listen 80; server_name live2d.xiaoweigod.com; location / {     proxy_pass http://B服务器ip地址:1234; }     access_log off; }

然后保存,重启下nginx:

service nginx restart

完了后在浏览器中直接访问 http://live2d.xiaoweigod.com

image.png

可以看到,已经成功完成了端口转发和反向代理,完美绕过备案。

四、常见问题

1.配置完成后,访问域名提示502 Bad Gateway。

答:这是由于A服务器访问B服务器,连接超时或者连接被拒绝导致。请关闭防火墙,并将安全组配置中相应的端口开放。如果问题依然存在,请查看两台服务器配置的端口是否一致。

2.配置完成后,访问提示找不到服务器IP地址。

答:这是由于你的域名解析错了,请确认域名成功解析到了A服务器地址,没有手滑填错A服务器的IP。

3.配置完成后,访问依然提示备案。

答:还是域名解析的问题,请把域名解析到备案的A服务器,而不是B服务器。

4.配置的时候,重启nginx这一步报错。

答:请检查配置文件有没有改错了,对照本文认真仔细检查一遍。

5.需要添加SSL(https)。

答:在B服务器上配置证书,并把SSL默认的监听端口443改成相应的转发端口即可(如本文是1234),另外如果配置了https,请做一下强制https跳转,避免出错。方法请看如下博文:

https://www.xiaoweigod.com/webserver/948.html

另外,https的教程也可以看本博客:

https://www.xiaoweigod.com/webserver/904.html

6.需要开启访问日志。

答:访问日志请在A服务器上开启,nginx配置文件中,请把access_log off 改成 access_log /xxx/xxx.log 然后用touch创建一下这个log文件,并用 chown -R www:www /xxx/xxx.log给这个log文件权限。

还有问题?欢迎加入小伟博客技术交流群 607614097,一般能帮忙解答的问题我会解答,群里也有不少热心网友。谢谢大家支持!

赞(17) 打赏
未经允许不得转载:小伟博客 » 玩转nginx之:端口转发+反向代理完美绕过网站备案

评论 20

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    大哥。这个办法似乎没有用了

    NataliaTsunako5年前 (2019-02-07)回复
    • 一直都有用的

      misery5年前 (2019-02-15)回复
      • 有用又怎么样 谁弄两台服务器来绕备案玩

        2135年前 (2019-03-11)
      • 是啊。 不过这只是一种思路,其实本文的重点是nginx的反代理

        misery5年前 (2019-04-11)
  2. #2

    为什么是两台服务器 , 而不是一台服务器呢 , 我不确定域名备案监控的是不是只有80和443端口 , 假设说通过修改80端口可以跳过备案的话 , 那我是不是只需要修改web服务器默认不访问80端口(在不考虑ssl证书的情况下)就可以了呢

    smile5年前 (2019-03-18)回复
    • 当然可以。但是访问的话要加端口了

      misery5年前 (2019-04-11)回复
  3. #3

    大哥,我不是很懂技术,就是说不用这个办法,我换一种直接的在国内服务器上开网站,端口不用80和443,用别的端口号,我看也是绕过备案的,但问题是怎么把端口给隐藏起来,还有我这个方法有问题吗?

    a 雪恋5年前 (2019-07-22)回复
  4. #4

    我在度娘上看到一种不确定的能不能隐藏端口号的,看标题介绍的,说的是端口映射什么转发。。。不太懂。

    a 雪恋5年前 (2019-07-22)回复
    • 有的云解析商支持隐藏端口号的,比如阿里云

      misery5年前 (2019-09-29)回复
  5. #5

    这样操作转发的不是整个网站的内容呀,有没有转发整个网站的内容的方法?还有,这样的话,网站的访问速度就是A服务器决定的了吧?

    阿泽5年前 (2019-08-08)回复
    • 是的 其实就是个反代理 用网络稳定的主机+性能好的服务器来配合

      misery5年前 (2019-09-29)回复
  6. #6

    阿里云香港主机每月24块了解一下??

    txgdf5年前 (2019-08-09)回复
  7. #7

    怎么会没用了,你没用就说没用吗?有些备案就是这么恶心,你体会到了就好。

    逆风而行4年前 (2019-12-26)回复
  8. #8

    我建议你去看看iptables,直接端口转发,省事儿

    skullcat4年前 (2020-05-16)回复
  9. #9

    解决了我的大问题,在虚拟机 nainx转发!!感谢您!!

    你好的4年前 (2020-07-13)回复
    • 视乎没有用因为nginx不支持安装在云主机。域名绑定有备案的主机也无到达本机,除非用其他端口,那也用不着转发了。

      df4年前 (2020-07-13)回复
      • 是的

        misery4年前 (2020-08-04)
  10. #10

    Emmmm 可行 可惜对我意义不大

    janmas3年前 (2021-10-09)回复

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏