对不起,这是我第一次尝试使用 Nginx-Jetty 而不是 Apache-JK-Tomcat。
我将 myapp.war 文件部署到了 $JETTY_HOME/webapps/,并且可以通过以下 URL 访问该应用程序:
我默认安装了 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/