然而…
反向代理方案在我的环境中还是不可靠,最后只能直接用kcptun把树莓派的80和443端口转发到VPS上作为临时解决方案
前言
树莓派放在家里,中国电信家用光纤接入,所以没法用80和443端口
但我这个站点又是放在树莓派上,毕竟站点标题是这么写的
之前的解决方案是用autossh把80和443端口转发到VPS上,但很不稳定,也非常浪费资源
好吧,其实是纯属暑假闲得蛋疼,就顺带研究一下nginx的反向代理
在公网提供服务的设备放在家里请注意局域网安全
目标
- 我的网站能正常地被访问,而不是需要手动加端口号
- 反向代理机写成泛域名解析,后端能吃到正常的server_name,这样的话反向代理机在部署完成后就不需要动了
缺点
为了一时的方便,抛弃了SSL
环境
- 我的公网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错误,估计是被代理的域名用DDNS导致,反代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,搞定