Docker部署Nginx使用非80端口映射跳转异常问题求助
问题原因
该问题由Nginx默认的重定向规则导致:默认配置下Nginx开启了absolute_redirect与port_in_redirect参数,生成3xx重定向响应时,会使用容器内部监听的80端口作为重定向地址的端口,不会继承宿主机映射的外部自定义端口,因此跳转时会丢失8080这类非80映射端口。
Apache httpd默认的重定向规则会优先使用请求头Host字段携带的端口生成跳转地址,因此端口映射场景下无需额外配置即可正常运行。
解决方案
步骤1:导出Nginx默认配置
执行以下命令导出官方Nginx镜像自带的默认站点配置文件:docker run --rm nginx cat /etc/nginx/conf.d/default.conf > default.conf步骤2:修改配置文件
打开导出的default.conf文件,找到server配置块,在块内新增两行配置,原有其他配置保持不变:
server { listen 80; server_name localhost; # 新增以下两行配置 absolute_redirect off; port_in_redirect off; location / { root /usr/share/nginx/html; index index.html index.htm; } }
- 步骤3:挂载配置启动容器
启动容器时新增自定义配置的挂载参数,最终启动命令如下:docker run -d -p 8080:80 -v /path/to/site:/usr/share/nginx/html -v ./default.conf:/etc/nginx/conf.d/default.conf nginx
效果验证
容器启动完成后访问http://localhost:8080,点击站内链接会自动保留8080端口,不再跳转到缺失端口的80端口地址。
内容的提问来源于stack exchange,提问作者dattha
相关产品推荐
相关产品推荐

