You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Tomcat搭配Nginx时.jsp文件被下载且Servlet请求报404

问题分析与解决方案

嘿,我看你这配置里的问题挺明显的,咱们一步步来拆解:

为什么JSP会触发下载?

你配置里的proxy_pass http://127.0.0.1:80写错端口啦!Tomcat默认监听的是8080端口,你现在把请求转发回了Nginx自己的80端口,等于Nginx根本没把JSP请求交给Tomcat去解析编译,直接把JSP原文件当静态资源扔给了浏览器——浏览器看不懂JSP代码,自然就触发下载操作了。

为什么Servlet请求返回404?

location /里的try_files $uri $uri/ =404规则是罪魁祸首。这条规则会让Nginx先检查请求的路径是不是服务器上真实存在的文件或目录,但Servlet的URL对应的是后端的Java类,不是真实的文件,所以Nginx找不到就直接返回404了,根本没把请求转发给Tomcat处理。


修改后的Nginx配置

直接给你改好的配置,关键改动我都标出来了:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    # 注释掉原root配置,因为动态内容全由Tomcat处理,静态资源单独配置路径
    # root /opt/apache-tomcat-8.0.46/webapps/app1;
    index index.jsp index.html index.htm;
    server_name mydomain.com www.mydomain.com;

    # 优先处理静态资源,Nginx直接返回,减轻Tomcat压力
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        # 这里指定静态资源的实际路径(Tomcat webapps下的对应目录)
        root /opt/apache-tomcat-8.0.46/webapps/app1;
        expires 1M;
    }

    # 所有动态请求(JSP、Servlet、接口等)全部转发给Tomcat
    location / {
        # 改成Tomcat的默认端口8080,如果你改了Tomcat端口请对应调整
        proxy_pass http://127.0.0.1:8080; 
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 删掉try_files!动态请求不是真实文件,不需要这条检查
        # try_files $uri $uri/ =404;
    }
}

关键改动说明

  • 修正转发端口:把proxy_pass的目标端口从80改成Tomcat的8080,确保动态请求能到Tomcat手里。
  • 调整location顺序:先匹配静态资源,让Nginx直接返回静态文件,提升性能;剩下的所有请求都转发给Tomcat,覆盖JSP、Servlet等所有动态场景。
  • 移除try_files规则:这条规则对动态请求完全不适用,删掉它才能让Servlet请求正常转发到Tomcat。
  • 静态资源指定root:如果你的静态文件存在Tomcat的webapps目录下,必须在静态资源的location里指定root路径,Nginx才能找到这些文件。

改完配置后,重启Nginx生效:

sudo systemctl restart nginx

别忘了确认Tomcat正在运行,并且监听的是8080端口(可以去Tomcat的conf/server.xml里看Connector的端口配置)。

内容的提问来源于stack exchange,提问作者Samtech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:48:52