Nginx 配置顺序错误

多看网页开发者工具,多按F12看调试

问题描述

前端能显示出来,但是验证码加载不出来,后端这xshell里也成功运行了jar包

ngix配置如下: server { listen 80; server_name 116.62.85.110; index index.html index.htm; root /www/wwwroot/dist; include /www/server/panel/vhost/nginx/extension/116.62.85.110/*.conf; # --- 核心修改:专门处理 /gkpro/ 的请求 --- # 使用 ^~ 符号告诉 Nginx:如果匹配到这个前缀,就不要再去匹配下面的正则了 location ^~ /gkpro/ { alias /www/wwwroot/dist/; # 尝试找文件,找不到就找 index.html(为了支持前端路由) try_files uri uri/ /index.html; } # API 代理 location /prod-api { proxy_pass http://localhost:8081/; proxy_set_header Host host; proxy_set_header X-Real-IP remote_addr; proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for; } # 根目录处理(防止直接访问 IP 时报错) location / { try_files uri uri/ /index.html; } # --- 静态资源缓存配置 --- # 注意:由于上面的 \^\~ /gkpro/ 优先级更高,这里的规则不会拦截 /gkpro/ 的请求 location \~ .\*\\.(js\|css)? { expires 12h; try_files uri =404; access_log /dev/null; } location \~ .\*\\.(gif\|jpg\|jpeg\|png\|bmp\|swf) { expires 30d; try_files $uri =404; access_log /dev/null; } # 禁止访问敏感目录 location ~* /(\.git|\.svn|\.env|node_modules)/ { return 404; } access_log /www/wwwlogs/116.62.85.110.log; error_log /www/wwwlogs/116.62.85.110.error.log; }

前端能显示出来,但是验证码加载不出来,后端这xshell里也成功运行了jar包

解决

java 复制代码
# 问题根源找到了!100%是Nginx配置顺序错误
你的**API代理完全没生效**!所有`/gkpro/prod-api/`的请求都被前面的`location ^~ /gkpro/`拦截了,Nginx把POST请求当成了静态文件请求,所以返回405。

---

# 直接替换成这个完整的Nginx配置
```nginx
server {
    listen 80;
    server_name 116.62.85.110;
    index index.html index.htm;
    root /www/wwwroot/dist;
    include /www/server/panel/vhost/nginx/extension/116.62.85.110/*.conf;

    # ✅ 第一步:先匹配API请求(优先级最高)
    # 专门处理 /gkpro/prod-api/ 的请求,转发到后端8081端口
    location ^~ /gkpro/prod-api/ {
        proxy_pass http://localhost:8081/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # ✅ 第二步:再处理前端静态资源和路由
    location ^~ /gkpro/ {
        alias /www/wwwroot/dist/;
        try_files $uri $uri/ /index.html;
    }

    # 根目录处理(防止直接访问IP时报错)
    location / {
        try_files $uri $uri/ /index.html;
    }

    # --- 静态资源缓存配置 ---
    location ~ .*\.(js|css)?$ {
        expires      12h;
        try_files $uri =404;
        access_log /dev/null;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ {
        expires      30d;
        try_files $uri =404;
        access_log /dev/null;
    }

    # 禁止访问敏感目录
    location ~* /(\.git|\.svn|\.env|node_modules)/ {
        return 404;
    }

    access_log  /www/wwwlogs/116.62.85.110.log;
    error_log  /www/wwwlogs/116.62.85.110.error.log;
}
```

---

操作步骤(宝塔面板)

  1. 进入宝塔面板 → 网站 → 找到`116.62.85.110` → 点击**设置**

  2. 点击左侧**配置文件**

  3. 全选原来的所有内容,替换成上面我给你的配置

  4. 点击**保存**

  5. 点击左侧**服务** → 点击**重启**按钮重启Nginx


验证是否成功

  1. 清空浏览器缓存(Ctrl+Shift+R强制刷新)

  2. 打开F12 → Network

  3. 刷新页面,看验证码接口(一般是`/gkpro/prod-api/captchaImage`)

  • 如果返回200,并且能看到验证码图片,说明配置成功
  1. 尝试登录,看`login`接口
  • 如果返回200或者401(用户名密码错误),说明接口通了

  • 如果还是405,检查后端服务是否真的在8081端口运行


为什么原来的配置错了?

Nginx的location匹配优先级:

`^~ 前缀匹配` > `正则匹配` > `普通前缀匹配`

你原来的配置:

```nginx

优先级高

location ^~ /gkpro/ {

处理静态文件

}

优先级低

location /prod-api {

永远不会被匹配到!

}

```

当请求`/gkpro/prod-api/login`时,会先匹配到`^~ /gkpro/`,Nginx会尝试在静态文件目录找`prod-api/login`这个文件,找不到就返回`index.html`。但前端发的是POST请求,Nginx默认不允许POST请求访问静态文件,所以返回405。


额外检查(如果还是不行)

  1. 确认后端服务确实在8081端口运行:

```bash

netstat -tulpn | grep 8081

```

应该能看到java进程在监听8081端口

  1. 确认后端接口路径是`/login`而不是`/prod-api/login`:

因为我们配置的是`proxy_pass http://localhost:8081/;\`,所以\`/gkpro/prod-api/login\`会被转发到\`http://localhost:8081/login\`

  1. 如果后端接口本身就是`/prod-api/login`,把proxy_pass改成:

```nginx

proxy_pass http://localhost:8081/prod-api/;

```

相关推荐
leoZ23114 小时前
Linux 环境常用服务一键部署文档(Docker 版)
运维·docker·容器
阿里云大数据AI技术14 小时前
千亿级 AI 搜索的效能实战:从混合检索到 Agentic RAG 的三年实战
人工智能·elasticsearch·阿里云·agentic·ai 搜索
落魄实习生14 小时前
Jenkins安装及使用
运维·jenkins
QuestLab14 小时前
让AI真正“看见“界面:纯视觉GUI自动化编排器开源了
运维·人工智能·自动化
imuliuliang15 小时前
五大编程语言核心对比:特性与应用全解析
运维·spring boot·nginx
Agent产品评测局15 小时前
制造业考勤智能管理系统,主流AI Agent方案横评:2026年企业级自动化选型深度指南
运维·人工智能·ai·chatgpt·自动化
bukeyiwanshui15 小时前
20260509 docker项目总结
运维·docker·容器
玄尺15 小时前
jenkins安装和使用
运维·jenkins
剑神一笑15 小时前
Linux xargs 命令深度解析:从管道到命令构建的桥梁
linux·运维·chrome
Cisyam^15 小时前
Bright Data Web Scraper 实战:构建 TikTok 与 LinkedIn Web Scraping 自动化 Skill(2026)
运维·前端·自动化