Nginx容器为何将私有域名ho.me重定向至Transmission服务?
问题分析与解决方案
核心错误点
- Apache配置文件完全无用:你用的是Nginx容器,却编写了Apache的
home.conf,还挂载到Apache的目录下,Nginx根本不会识别这类配置,等于白做了这部分操作。 - Nginx的
server_name不匹配:default.conf里写的是server_name localhost;,但你要访问的是ho.me,导致Nginx无法正确匹配域名请求,后续路径处理逻辑混乱。 - 冗余的挂载与文件复制:脚本里创建的
/apps/docker/apacheconf/htmlfiles目录及挂载操作完全多余,你的Nginx配置根本没用到这个路径。 - Nginx location结构错误:
error_page和对应错误页面的location被嵌套在location /里,不符合Nginx配置规范,可能引发路径处理异常。
修正后的配置与操作步骤
1. 简化启动脚本 configure_and_run.sh
删除所有Apache相关操作,改为Nginx对应的目录挂载:
#!/bin/bash # 配置并运行Nginx反向代理容器 # 更新系统 sudo apt-get update sudo apt-get upgrade -y sudo apt-get autoremove -y --purge # 创建Nginx持久化目录 sudo mkdir -p /apps/docker/nginx/conf.d sudo mkdir -p /apps/docker/nginx/html # 复制配置文件到持久化目录 sudo cp default.conf /apps/docker/nginx/conf.d/ sudo cp index.html /apps/docker/nginx/html/ # 构建镜像 docker build -t nginx-reverse-proxy . # 运行容器,挂载配置和静态文件目录 docker container run \ --publish 80:80 \ -d --name nginxrp \ -v /apps/docker/nginx/conf.d:/etc/nginx/conf.d \ -v /apps/docker/nginx/html:/usr/share/nginx/html \ nginx-reverse-proxy
2. 修正Nginx配置 default.conf
调整server_name匹配你的域名,重构location结构:
# Nginx反向代理配置 server { listen 80; listen [::]:80; # 匹配私有域名 server_name ho.me www.ho.me; # 根路径返回静态index.html location / { root /usr/share/nginx/html; index index.html index.htm; } # Transmission代理:/t路径指向后端服务 location /t/ { proxy_pass http://192.168.50.30:9091/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # Plex代理:/tv路径指向后端web界面 location /tv/ { rewrite /tv(/.*) $1 break; proxy_pass http://192.168.50.30:32400/; proxy_http_version 1.1; proxy_set_header Accept-Encoding ""; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; sub_filter '/web/' '/tv/web/'; sub_filter_types *; sub_filter_once off; } # 错误页面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
3. 简化Dockerfile(可选)
因为已经通过挂载宿主机目录来管理配置和静态文件,Dockerfile可以简化为:
FROM nginx:latest
4. 本地域名解析配置
在本地hosts文件中添加映射(替换<Nginx宿主机IP>为你的服务器/容器所在主机的IP):
<Nginx宿主机IP> ho.me www.ho.me
为什么之前会跳转到Transmission?
主要是因为server_name不匹配,Nginx无法正确识别ho.me的请求,加上静态文件路径配置混乱,导致根路径的请求没有被正确处理,最终触发了异常跳转逻辑。
内容的提问来源于stack exchange,提问作者Iulian Donici
相关产品推荐
相关产品推荐

