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

通过PM2与Apache ProxyPass部署Nuxt后路由无法访问的解决咨询

解决Nuxt.js SSR子路径路由问题(Apache反向代理配置)

核心问题原因

你的Nuxt应用不知道自己运行在/ssrapp子路径下,导致生成的路由、静态资源路径都是根路径(/),而Apache的代理配置没有配合Nuxt的路径规则,最终引发路由不存在的错误。

解决步骤

1. 修改Nuxt配置,指定子路径基础路径

根据你使用的Nuxt版本,修改项目根目录的配置文件:

Nuxt 2(nuxt.config.js)
export default {
  router: {
    // 指定应用的基础路径为/ssrapp
    base: '/ssrapp/'
  },
  build: {
    // 静态资源的公共路径同步设置
    publicPath: '/ssrapp/'
  }
}
Nuxt 3(nuxt.config.ts)
export default defineNuxtConfig({
  app: {
    baseURL: '/ssrapp/'
  },
  nitro: {
    publicAssets: {
      baseURL: '/ssrapp/'
    }
  }
})

修改后重启Nuxt服务:

pm2 restart <你的应用名称>

2. 调整Apache反向代理配置

编辑你的Apache虚拟主机配置文件(通常位于/etc/apache2/sites-available/你的站点.conf),替换原有ProxyPass相关配置:

<VirtualHost *:80>
  ServerName www.someurl.com

  # 启用必要模块(未启用则先执行:sudo a2enmod proxy proxy_http rewrite headers)
  LoadModule proxy_module modules/mod_proxy.so
  LoadModule proxy_http_module modules/mod_proxy_http.so
  LoadModule rewrite_module modules/mod_rewrite.so
  LoadModule headers_module modules/mod_headers.so

  # 代理/ssrapp下所有请求到Nuxt服务
  ProxyPass /ssrapp http://localhost:3000/ssrapp
  ProxyPassReverse /ssrapp http://localhost:3000/ssrapp

  # 设置反向代理头部,让Nuxt识别真实请求信息
  RequestHeader set X-Forwarded-Proto "http"
  RequestHeader set X-Forwarded-Host "www.someurl.com"
  RequestHeader set X-Forwarded-Prefix "/ssrapp"
</VirtualHost>

重启Apache生效:

sudo systemctl restart apache2

关键配置说明

  • router.base/app.baseURL:告诉Nuxt生成所有路由、资源路径时自动带上/ssrapp前缀,避免浏览器直接请求根路径资源。
  • ProxyPass/ProxyPassReverse:确保Apache将/ssrapp开头的请求正确转发到Nuxt服务,同时修正Nuxt响应中的重定向路径,避免跳转到错误地址。
  • X-Forwarded-*头部:让Nuxt获取真实的请求协议、主机和子路径前缀,防止生成URL时出现错误。

排查补充

如果问题仍存在,查看以下日志定位细节:

  • Apache错误日志:/var/log/apache2/error.log
  • Nuxt应用日志:pm2 logs <你的应用名称>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:50:17