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

Vue Router搭配Nginx刷新404及Nginx部署Java Jar问题求助

问题解决:Vue Router刷新404 + Nginx搭配Java Jar运行方案

一、Vue Router刷新/手动输入URL出现404的解决

你的核心问题是Nginx配置中root和proxy_pass指令冲突,导致前端路由请求无法正确处理。结合你的配置和现象,分两种部署场景给出解决方案:

场景1:前端静态文件独立部署在Nginx,后端API通过代理转发

这种场景下,前端打包后的dist文件放在Nginx目录,API请求转发到后端服务。修改HTTPS server块的配置:

server {
    listen       443 ssl;
    server_name  mmsdev.kolmarbnh.co.kr;

    ssl_certificate      .crt;
    ssl_certificate_key  .key;

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    # 处理前端静态资源和路由:所有路由请求返回index.html,由Vue Router接管
    location / {
        root   C:/path/to/your/vue/dist; # 替换为你的Vue项目dist目录绝对路径
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    # 转发API请求到后端服务(假设API以/api开头,可根据实际调整)
    location /api {
        proxy_pass $service_url;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}
  • 原理:try_files会先找对应路径的静态文件,找不到就返回index.html,让Vue Router处理前端路由;API请求单独转发到后端,避免和前端路由冲突。

场景2:后端服务(如Spring Boot)已包含前端静态资源

如果你的后端服务已经打包了前端文件,只需在后端配置路由转发,Nginx保持反向代理即可:

  1. 后端添加路由转发代码(以Spring Boot为例):
@Controller
public class RouteForwardController {
    // 匹配所有非静态资源的请求,转发到index.html
    @RequestMapping(value = "/**/{path:[^.]*}")
    public String forwardToIndex() {
        return "forward:/index.html";
    }
}
  1. Nginx的location /保持原有的proxy_pass配置即可,无需添加try_files。

你之前配置失效的原因

你直接在原有location /中添加try_files,导致Nginx优先读取本地html目录下的文件,而不是代理到后端服务,所以根路径/无法访问;/login虽然能显示,但因为API请求没有被正确转发,导致功能异常。


二、Nginx服务器上运行Java Jar包的方案

Nginx本身不直接运行Java Jar,Jar包由JVM执行,Nginx仅作为反向代理转发请求到Jar服务。步骤如下:

1. 准备Java环境

  • 检查服务器是否安装Java:执行java -version,确保版本符合Jar包要求
  • 未安装则根据系统(Windows/Linux)安装对应版本的JDK或JRE

2. 启动Java Jar包

  • 前台启动(终端关闭后服务停止,用于调试):
    java -jar your-app.jar
    
  • 后台启动(终端关闭后服务持续运行):
    • Windows:start /B java -jar your-app.jar,或使用winsw工具注册为系统服务
    • Linux:nohup java -jar your-app.jar > app.log 2>&1 &(日志输出到app.log)

3. 配置Nginx反向代理

假设Jar包服务运行在localhost:8080,在Nginx的server块中添加:

location / {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

如果需要同时运行多个Jar服务,可通过不同的location前缀区分:

location /app1 {
    proxy_pass http://localhost:8080;
    # 其他proxy_set_header配置同上
}

location /app2 {
    proxy_pass http://localhost:8081;
    # 其他proxy_set_header配置同上
}

4. 可选:优化Jar服务管理(Linux)

将Jar注册为systemd服务,实现开机自启和故障自动重启:

  1. 创建服务文件/etc/systemd/system/yourapp.service:
[Unit]
Description=Your Java Application
After=network.target

[Service]
User=root
ExecStart=/usr/bin/java -jar /path/to/your-app.jar
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
  1. 执行以下命令启用服务:
systemctl daemon-reload
systemctl start yourapp
systemctl enable yourapp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:07:07