Nginx 作为 Jetty 的代理

Nginx 作为 Jetty 的代理

对不起,这是我第一次尝试使用 Nginx-Jetty 而不是 Apache-JK-Tomcat。

我将 myapp.war 文件部署到了 $JETTY_HOME/webapps/,并且可以通过以下 URL 访问该应用程序:

http://我的IP:8080/myapp

我默认安装了 Nginx,默认的 Nginx 页面可以通过 myIP 访问

然后,我将 /etc/nginx/sites-enabled 下的默认域修改为以下内容:

server {
        listen   80;
        server_name mydomain.com;

        access_log  /var/log/nginx/localhost.access.log;

        location / {
                #root   /var/www/nginx-default;
                #index  index.html index.htm;
                proxy_pass http://127.0.0.1:8080/myapp/;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }
}

现在,当我访问 myIP 时,我得到了 mypp(在 jetty 中运行)的索引页,这很好。但所有链接都是格式错误的。例如,css 的链接是 mydomain.com/myapp/css/style.css,而它应该是 mydomain.com/css/style.css。它似乎将 mydomain.com 映射到 127.0.0.1:8080,而不是 127.0.0.1:8080/myapp/

知道我遗漏了什么吗?我也需要在 Jetty 端进行任何更改吗?

答案1

现在不是 nginx 配置问题,而是您的应用程序或 Jetty 配置问题。在 Jetty 下运行的应用程序仍然“认为”其 URL 是 /myapp/ 而不是 /,您应该更改应用程序配置以使用正确的基本 URL。

理论上,服务器可以在将应用程序响应传回客户端时重写链接(具有正确模块的 Apache 可以做到这一点,我不确定 nginx 是否可以),但只有当您无法修复代理传递到的应用程序或服务器时,这才是好主意。

答案2

你也可以使用 Nginx 的重写模块

听起来你的问题出在 Jetty 上,在应用程序级别之前——如果不是,你可以使用 Tuckey URL 重写过滤器。两者都非常容易使用。Tuckey 位于 http ://tuckey.org/urlrewrite/

相关内容