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

Nginx容器为何将私有域名ho.me重定向至Transmission服务?

问题分析与解决方案

核心错误点

  1. Apache配置文件完全无用:你用的是Nginx容器,却编写了Apache的home.conf,还挂载到Apache的目录下,Nginx根本不会识别这类配置,等于白做了这部分操作。
  2. Nginx的server_name不匹配:default.conf里写的是server_name localhost;,但你要访问的是ho.me,导致Nginx无法正确匹配域名请求,后续路径处理逻辑混乱。
  3. 冗余的挂载与文件复制:脚本里创建的/apps/docker/apacheconf/htmlfiles目录及挂载操作完全多余,你的Nginx配置根本没用到这个路径。
  4. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:10:27