使用 nginx 反向代理作为电信公网 IP 80端口封锁的应对手段

然而…

这里没有讲如何配置 SSL,只有最基本的 HTTP 访问

反向代理方案在我的环境中还是不可靠,最后只能用kcptun,把树莓派的80和443端口直接转发到VPS上并暴露到公网,作为临时解决方案

现在还有很多其他更好的方案可以解决这个问题

前言

家里是中国电信家用光纤接入,所以没法直接用 80 和 443 端口

但我这个站点又是放在家里的树莓派上,毕竟站点标题是这么写的

那么就得找个办法实现公网对家里的树莓派的 80 和 443 端口访问了

之前的初步解决方案是用 autossh 把 80 和 443 端口转发到VPS上,但很不稳定

好吧,其实是纯属暑假闲得蛋疼,就顺带研究一下nginx的反向代理

把在公网提供服务的设备放在家里的话,请注意内网安全,在家庭网络出口的防火墙上面设置好相应的规则

目标

  • 我的站点能正常地被输入 URL 访问,而不是需要手动加端口号
  • 反向代理机写成泛域名解析,后端能吃到正常的server_name,这样的话反向代理机在部署完成后,就不需要因为被代理的机子是单机多站点,而去改动配置文件了

准备环境

  • 我的公网IP会变,所以已经部署好某个域名的 DDNS 服务
  • 跑着 WEB 服务,但没有 80 端口暴露到公网的资格的机器(例如我放在家里的树莓派)
  • 家庭网关设定好端口转发,把内网的 WEB 服务器的端口暴露在公网环境
  • 在公网环境下测试能不能以 http://DDNS域名:端口号 成功访问
  • 一台有公网 IP 的 Debian VPS
  • 你打算被外网访问的域名的A记录设定为VPS的IP(这里以 www.server.com 为例)

动工

给 Debian VPS 装上nginx

apt update
apt install nginx

在 /etc/nginx/nginx.conf 里加上这几行,解决一些奇怪的50X错误

好吧,还是偶尔出现一些奇怪的50X错误

估计是公网 IP 变了,DDNS 改好 A 记录以后,nginx 不会重新获取 DNS 解析导致的,反代VPS的crontab里写跟DDNS触发间隔一样的时间重启nginx就好了

proxy_buffer_size 64k;
proxy_buffers 32 128k;
proxy_busy_buffers_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;


编辑 /etc/nginx/site-enabled/ 里的站点文件

server
{
    listen 80;
    server_name *.server.com;

    location / {
        proxy_pass http://你的DDNS域名:81;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    }
}

nginx重新加载配置文件

nginx -s reload

访问www.server.com,搞定

chevron_left
chevron_right

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Comment
Name
Email
Website