Docker Nginx反向代理配置后出现HTTPD 404响应问题求助
Nginx反向代理路径问题解决方法
问题根源
当Nginx匹配location /preklad处理请求时,默认会把完整的URI(包括/preklad前缀)转发给后端HTTPD服务。比如访问http://localhost/preklad,实际转发到HTTPD的请求是http://translation_web:80/preklad,但你的HTTPD服务根目录下并没有/preklad这个路径,因此返回404。
修复方案
修改Nginx的proxy_pass配置,在目标地址末尾加上/。这样Nginx会自动剔除/preklad前缀,把请求转发到HTTPD的根路径(即http://translation_web:80/)。
修改后的Nginx配置
server { listen 80; server_name localhost; location /preklad { proxy_pass http://translation_web:80/; proxy_set_header Host $http_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; } }
验证操作
- 重新启动Nginx容器,加载新配置:
docker-compose up -d --force-recreate proxy - 在浏览器访问
http://localhost/preklad,此时应该能正常返回HTTPD的网站内容。 - 如果你的TS应用包含静态资源(如JS、CSS文件),需确保资源路径使用相对路径,或者补充Nginx规则适配。比如资源路径是
/js/app.js,可以添加:location /js { proxy_pass http://translation_web:80/js/; }
额外说明
- Docker Compose默认会为所有服务创建共享网络,Nginx容器通过服务名
translation_web访问HTTPD容器的配置是正确的,这部分无需修改。 - 之前在Nginx容器内curl
http://translation_web:80正常,是因为直接访问了HTTPD根路径,和转发时的路径差异才导致了问题。
内容的提问来源于stack exchange,提问作者Simon Podstavek
相关产品推荐
相关产品推荐

