提一个及其特殊的情况下,amh面板的lngx+FRP反代80、443端口的问题
注:amh面板的lngx就是Linux+Nginx+X,其中X为未限定
前提描述:
- A机器部署frps, http和https监听80 443端口,nginx配置不可修改,且仅能新建两条隧道(80 443)
- 通配符域名*.a.cn指向A机器的CNAME
- B机器无法直接访问80 443端口,部署了AMH面板的lngx,然后lngx部署通配符域名站点*.a.cn和业务站点b.cn(本地ip 127.0.0.1:1000),然后通过FRPC监听本地的127.0.0.1:80 和127.0.0.1:443
- 域名b.cn指向B机器的IP
- frp隧道已通,其他任意的xxx.a.cn可以访问到frp的页面
问题需求:
如何通过直接访问域名:b.a.cn,实现直接访问B机器上b.cn的效果?
同理,实现直接访问c.a.cn的效果
尝试
目前可行的方法一:
直接新建一个frp隧道b.a.cn,直接代理B机器的1000端口,但是这个方法肯定要多一条隧道,不满足第一点仅能80 443两条隧道的方法
方法二:修改B机器的nginx
首先B机器lngx站点*.a.cn直接监听80端口
其次直接修改站点*.a.cn的nginx配置文件:
server {
listen 80;
server_name *.a.cn;
# 处理 b.a.cn 请求
if ($host = "b.a.cn") {
proxy_pass http://127.0.0.1:1000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
# 处理 c.a.cn 请求
if ($host = "c.a.cn") {
proxy_pass http://127.0.0.1:1001;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
# 处理其他请求
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
access_log /home/wwwroot/Lngx01/logs/*.z.taor.site-access.log;
error_log /home/wwwroot/Lngx01/logs/*.z.taor.site-error.log crit;
}
但没有成功,虽然frp页面可以
请教各位大佬,此时我应该如何调整实现需求?
proxy_pass是需要写在 location / { ... } 之内,
不能直接写在 if ($host = "c.a.cn") { ... }中,nginx会出错。
或是location / { if ($host = "c.a.cn") { proxy_pass ... } } 这样。
通常请求不同的源站,还是建议直接添加多个lngx主机,
绑定明确的域名与请求不同的源站地址。