我有一个在本地 IP 192.168.0.30:80 上的 nginx 服务器上运行的 Web 应用程序
我的 etc/hosts 中有这个
127.0.0.1 w.myapp.in
如果有人使用“w”子域访问我的应用程序,它会显示一个 webdav 界面,否则它会正常运行
(例如,有人打电话http://myapp.in,它会进入应用程序,然后http://w.myapp.in进入 webdav 界面 - 这是在应用程序内完成的,nginx 与此无关)
因为我没有 DNS 或类似的东西,所以用户必须通过 IP 访问应用程序。如果有人想访问 webdav 界面,就会出现问题,因为您无法通过子域访问应用程序 - 除非您在本地 hosts 文件中写入一行,但这不是解决方案)
可能的解决方案
如果可以设置 nginx 服务器,以便当有人调用http://192.168.0.30(在端口 80 上),它会正常进入应用程序,但如果用户尝试访问http://192.168.0.30:81(另一个定义的端口)它内部重定向到 w.myapp.in,并且应用程序看到子域名
给定一个应用程序,可以这样做吗?如果可以,我应该在 nginx 配置文件中输入什么?如果你们想到了更好的解决方案,我愿意接受任何建议。
答案1
是的,你可以让 nginx 监听两个端口,并适当地将请求代理到不同的端口号上。如下所示:
server {
listen 80;
proxy_pass http://localhost:8080/myapp/;
}
server {
listen 81;
proxy_pass http://localhost:8080/webdav/;
}
答案2
我会尝试重写指令。让一台服务器监听端口 80,并可选择重写为真实服务器名称。另一台服务器监听端口 81,并重写为“w”子域。不能 100% 确定这是否可行,但值得一试。
server {
listen 80;
rewrite ^ http://example.com$request_uri? permanent;
[...]
}
server {
listen 81;
rewrite ^ http://w.example.com$request_uri? permanent;
[...]
}