nginx反向代理无法使用hosts
nginx反向代理无法使用hosts
逐暗者背景
- 多个域名通过nginx反向代理给frps,然后转发给frpc做内网穿透。
- 由于frps的https内网穿透模式不会取host(http head),只会取URI上的地址,所以无法使用proxy_pass到127.0.0.1
- 使用proxy_pass到sub1.xxx.com ,然后修改/etc/hosts ,让其指向127.0.0.1 ,但是nginx的proxy_pass不使用/etc/hosts解析。
解决方案
需要搭建一个自己的dns解析服务器,用来解析这个域名
安装dnsmasq
apt-get install dnsmasq
安装过程中提示失败,原因是53端口被systemd-resolved占用了,但systemd-resolved不会解析/etc/hosts并让他在nginx的proxy_pass中生效 ,不知道为什么。
所以就需要停止systemd-resolved对53端口的占用了
先查看53端口占用情况,确认是否是systemd-resolved占用的。
lsof -i :53
1 | ubuntu53 :~$ sudo lsof -i : |
确认后编辑文件vim /etc/systemd/resolved.conf
1 | [Resolve] |
只需要把DNS和DNSStubListener放开,并设置DNSStubListener为NO
接着将/run/systemd/resolve/resolv.conf
作为/etc/resolv.conf
目标地址链接起来。
1 | sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf |
最后 sudo reboot
重启服务器即可。
现在可以继续安装了,继续启动dnsmasq。
systemctl start dnsmasq.service
设置为开机启动
systemctl enable dnsmasq.service
配置dnsmasq
创建配置文件,这个文件配置上游dns
vi /etc/resolv.dnsmasq
1 | nameserver 114.114.114.114 |
接着配置服务的配置文件,需要放开addn-hosts、和resolv-file
vi /etc/dnsmasq.conf
1 | # If you don't want dnsmasq to read /etc/hosts, uncomment the |
在配置自定义的内网域名解析
vi /etc/dnsmasqhosts
1 | 127.0.0.1 xxx.shellingford.cn |
最后重启服务即可
systemctl restart dnsmasq.service
配置nginx反向代理
一定要使用resolver指向127.0.0.1 ,如此才能使用本机的域名解析功能
1 | location ^~ / { |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果