然而…
这里没有讲如何配置 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,搞定