首页 > 解决方案 > 使用 nginx 重定向具有固定路径的应用程序

问题描述

我的服务器位于我们大学的反向代理后面。我得到了域 myuniverse.org/mysubdomain/。

不幸的是,我要使用的应用程序总是更改路径:myuniverse.org/mysubdomain/ 自动变为 myuniverse.org/myappname/ 并且该域不可访问。如果我从大学网络通过 IP 访问我的服务器,一切都很好,因为 myIP/myappname 有效。

有没有办法用 nginx 重定向这种行为?

server {
        listen 80;
        server_name myServerName;


        location / {
        proxy_pass http://10.11.0.3:8080;
        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

解决方案


您正试图让您的应用程序认为它在一条实际上并非如此的路径上。这可以通过重写目标来完成proxy_pass

  location ~ ^/mysubdomain(/.*)?$ {
    proxy_pass http://10.11.0.3:8080/myappname$1$is_args$args;
    # this example does not include proxy_set_header for simplicity but you may need it
  }

但是,在大多数情况下,我不建议您这样做。以上将帮助您获得对初始请求的响应,但由于您的应用程序会认为它位于不同的路径上,因此如果其中包含链接,则后续请求(对静态文件或子页面)可能会被破坏/myappname。NGINX 可以在代理响应中重写 URL,但它是另一个有其缺点的 hack。

您真正需要的是将应用程序的基本 URI 从 更改/myappname/mysubdomain. 这将使它在不涉及黑客的情况下工作。


推荐阅读