前言

80443HTTPHTTPS协议的默认端口号,因为国家监管政策的关系,个人办理的拨号上网是封锁了80和443入站端口的。
我们要做的是,像访问一个普通网站一样访问我们NAS上的应用

原理

绕过封锁的办法就是,通过一台国外不被封锁(不受监管)的VPS,反向代理到NAS主机。
有些人因为自建梯子正好满足这个条件,廉价低性能VPS又无法部署大型应用,做做转发还是没问题的,所谓物尽其用。

实现

假设现在直接访问NAS应用的DDNS链接为http://ddns.3322.net:8080
现有example.com域名作为日常使用的域名
以下演示使用HTTP,HTTPS同理

  1. 在域名提供商处,将example.com域名DNS解析到VPS的IP

  2. VPS上部署Nginx
    这里直接使用Docker进行部署
    docker run -d -p 80:80 --name nginx -v ~/conf.d:/etc/nginx/conf.d docker.io/nginx:1.19-alpine

  3. 配置Nginx
    进入~/conf.d目录,新建配置文件example.com.conf,内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
server {
    listen 80;
    server_name example.com;

    resolver 114.114.114.114 223.5.5.5 8.8.8.8 valid=600s;
    resolver_timeout 3s;

    location / {
        proxy_hide_header X-Powered-By;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';

        proxy_pass http://ddns.3322.net:8080;
    }
}

做一下说明:
因为DDNS解析到的IP会被缓存下来,导致IP更换后失效,该配置手动设置DNS缓存为10分钟,防止失效

1
2
resolver 114.114.114.114 223.5.5.5 8.8.8.8 valid=600s;
resolver_timeout 3s;

该配置使Websocket一样可以进行转发,不需要的话可以删除

1
2
3
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
  1. 重启Nginx使配置生效,docker restart nginx

  2. 完成,现在可以直接使用http://example.com访问NAS上的应用,内部其实就是访问的http://ddns.3322.net:8080