nginx 重定向代理

nginx 重定向代理

我有一个在本地 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;
  [...]
}

http://wiki.nginx.org/HttpRewriteModule

相关内容