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

OpenShift微服务中Nginx配置静态文件遇403错误的解决咨询

问题解决步骤

一、核心问题分析

你的403错误根源在于:React项目部署在/info/pc/子路径下,但打包生成的静态资源引用路径默认指向根路径/assets/,而Nginx当前配置未适配这个子路径,导致请求https://greg.com/assets/index.js时,实际服务器上的资源路径是/usr/share/nginx/html/assets/index.js,但Route的路径拦截规则让Nginx无法正确映射,最终返回403。

二、先解决静态资源路径匹配问题

1. 调整React打包配置

首先确保React打包时生成的资源引用路径包含子路径前缀:

  • 如果用Create React App,在package.json中添加:
    "homepage": "/info/pc/"
    
  • 或者构建时通过环境变量指定:
    PUBLIC_URL="/info/pc" npm run build
    

这样React生成的index.html里,资源引用会变成/info/pc/assets/index.js,而非根路径。

2. 修改Nginx配置适配子路径

更新你的default.conf,针对/info/pc/路径做规则映射:

events {
    worker_connections 1024;
}

http {
  server {
    listen 8080;
    root /usr/share/nginx/html;
    include /etc/nginx/mime.types;

    # 处理/info/pc/路径的请求
    location /info/pc/ {
      # 去掉请求URL中的/info/pc/前缀,映射到实际静态文件路径
      rewrite ^/info/pc/(.*)$ /$1 break;
      # 优先找对应文件,找不到就返回index.html(适配React路由)
      try_files $uri $uri/ /index.html;
    }

    # 保留根路径配置,兼容其他服务
    location / {
      try_files $uri /index.html;
    }
  }
}

配置后,请求https://greg.com/info/pc/assets/index.js会被Nginx映射到服务器上的/usr/share/nginx/html/assets/index.js,解决403问题。

三、OpenShift Route动态配置(避免硬编码)

如果不想在Nginx配置里硬编码/info/pc/,可以通过环境变量+Nginx模板+启动脚本实现动态适配:

1. 准备Nginx配置模板

创建default.conf.template文件,用变量替代固定路径:

events {
    worker_connections 1024;
}

http {
  server {
    listen 8080;
    root /usr/share/nginx/html;
    include /etc/nginx/mime.types;

    location ${APP_PATH}/ {
      rewrite ^${APP_PATH}/(.*)$ /$1 break;
      try_files $uri $uri/ /index.html;
    }

    location / {
      try_files $uri /index.html;
    }
  }
}

2. 编写启动脚本(entrypoint.sh)

脚本负责将环境变量替换到模板中,生成实际Nginx配置:

#!/bin/sh
# 替换模板中的环境变量
envsubst '${APP_PATH}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
# 启动Nginx
nginx -g 'daemon off;'

给脚本添加执行权限:chmod +x entrypoint.sh

3. 更新Dockerfile

将模板、脚本加入镜像,设置默认环境变量:

FROM nginx:alpine
# 复制React打包文件
COPY build/ /usr/share/nginx/html/
# 复制Nginx模板
COPY default.conf.template /etc/nginx/conf.d/
# 复制启动脚本
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# 设置默认子路径
ENV APP_PATH="/info/pc"
# 启动时执行脚本
ENTRYPOINT ["/entrypoint.sh"]

4. 在OpenShift中动态配置

  • 设置Deployment环境变量:
    用oc命令修改部署的环境变量,指定子路径:
    oc set env deployment/your-service-name APP_PATH="/info/pc"
    
  • 配置Route路径:
    创建或修改Route,将path设置为/info/pc/,确保和环境变量的APP_PATH一致。

后续如果需要修改子路径,只需更新Route的path和Deployment的环境变量,无需重新构建镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:38:30