如何在NGINX中通过location参数重写URL实现Openproject反向代理
问题原因
你遇到的资源路径缺失前缀问题,本质是OpenProject默认运行在根路径下,生成的静态资源、跳转链接都默认指向域名根目录,没有携带/openproject前缀,仅靠Nginx反向代理规则无法自动修正后端返回内容里的硬编码路径。
解决步骤
第一步:修改OpenProject自身的子路径配置(必须操作)
这是适配性最高的解决方案,不需要依赖Nginx的内容替换规则:
- 如果你是通过系统包(deb/rpm)安装的OpenProject,执行以下命令设置子路径:
openproject config set OPENPROJECT_RAILS_RELATIVE_URL_ROOT="/openproject"
执行完成后重启OpenProject服务生效:
openproject restart
- 如果你是通过Docker部署的OpenProject,在启动命令或者docker-compose.yml中添加对应环境变量:
environment: - OPENPROJECT_RAILS_RELATIVE_URL_ROOT=/openproject
修改完成后重启容器即可。
第二步:调整Nginx反向代理配置
修改你的location块配置,补充必要的代理头规则,确保OpenProject能正确识别前端访问的协议、域名和路径:
location /openproject/ { proxy_pass http://10.0.0.1:8000/; # 以下代理头如果你的proxy.conf里已经包含可以不用重复添加 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; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; proxy_redirect default; include /etc/nginx/conf.d/proxy.conf; }
修改完成后执行nginx -s reload重载配置即可生效。
验证方法
配置完成后清除浏览器缓存,访问https://ngrp.com/openproject/ ,检查资源请求路径是否已经自动携带/openproject前缀,页面即可正常加载。
内容的提问来源于stack exchange,提问作者Knight01
相关产品推荐
相关产品推荐

