使用反向代理在Tomcat子文件夹中部署Java Web

使用反向代理在Tomcat子文件夹中部署Java Web,java,tomcat,deployment,nginx,dns,Java,Tomcat,Deployment,Nginx,Dns,我无法将Java Web项目部署到Tomcat 在localhostdevelopment环境中,我可以成功地部署它。我可以通过访问http://localhost:8080/project. 我尝试在服务器上部署它。当然,我可以使用http://server_ip:8080/project. 如您所见,该项目位于TOMCAT_HOME/webapps/project中 当我将其与Nginx支持的反向代理一起使用时。以下是Nginx的配置: server { listen 8

我无法将Java Web项目部署到Tomcat

在localhostdevelopment环境中,我可以成功地部署它。我可以通过访问http://localhost:8080/project.

我尝试在服务器上部署它。当然,我可以使用http://server_ip:8080/project. 如您所见,该项目位于TOMCAT_HOME/webapps/project中

当我将其与Nginx支持的反向代理一起使用时。以下是Nginx的配置:

server {
    listen       80;
    server_name  example.com;

    location / {
        proxy_pass         http://127.0.0.1:8080/project;
    }
}
通常,我可以使用http://example.com nginx将从中获取内容http://127.0.0.1:8080/project. 是的,但我在获取静态文件时遇到问题

我使用标记加载静态文件:

<link rel="stylesheet" type="text/css" href="<c:url value="/assets/css/style.css" />" />
当我使用http://server_ip:8080/project,一切正常。href的值将是/project/assets/css/style.css

但是当我使用http://example.com,href的值仍然是/project/assets/css/style.css,因此我将得到一个404错误。因为这个URL的意思是/project/project/assets/css/style.css。但是,该文件位于/assets/css/style.css中

有人能帮我解决这个问题吗?Thx很多。

尝试进行如下明确的位置匹配:

server {
    listen       80;
    server_name  example.com;

    location ^~ /project {
        proxy_pass         http://127.0.0.1:8080/project;
    }

    location ^~ / {
        deny all;
    }
}
解释: 位置^~/project{}注意:不适用于正则表达式


^~导致请求开头的匹配区分大小写。这意味着/project、/project/logo.jpg等都将匹配。这也会在符合匹配条件时立即停止位置扫描。

我使用以下配置解决了此问题

以下是nginx.conf:

下面是${TOMCAT_HOME}/conf中的server.xml: 在引擎标签中添加以下内容


当我重新启动nginx时,我收到以下错误消息:重新启动nginx守护程序:nginxnginx:[emerg]duplicate location/in/etc/nginx/nginx.conf。错误非常明显。检查NginX配置中是否存在位置“/”的重复定义听起来问题出在JSTL标记中,您的javawebapp正在服务器端呈现它的值,而它对它前面的代理一无所知。您是否尝试过将其更改为相对URL?将其更改为,或使用的上下文属性
server {
    listen       80;
    server_name  example.com;

    location ~ ^/(WEB-INF)/ {
        deny all;
    }

    location ~* ^.+.(css|js|jpeg|jpg|gif|png|ico|svg|eof|otf|ttf|woff) {
        root               /usr/local/tomcat/webapps/AppName/;
        expires            24h;
        access_log         off;
    }

    location / {
        proxy_pass         http://127.0.0.1:8080;
    }
}
<Host name="example.com" appBase="webapps/AppName"
        unpackWARs="true" autoDeploy="true">
    <Alias>www.example.com</Alias>

    <Context path="" docBase="${catalina.base}/webapps/AppName"
             reloadable="true" allowLinking="true">
    </Context>

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="appname_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>