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

如何配置Nginx让localhost/tut/映射到容器且避免404错误

解决方案

第一步:关闭测试容器的端口暴露

修改docker-compose.yml,删除my-test服务中的ports配置项——同一Docker网络内的服务可直接通过服务名访问,无需暴露端口给主机:

version: '3'

services:
  my-nginx:
    container_name: my-nginx
    build: ./nginx/.
    ports:
      - "80:80"
      - "443:443"
    networks:
      - my-network

  my-test:
    container_name: my-test
    image: docker/getting-started
    # 移除ports配置,不再暴露4444端口
    networks:
      - my-network

networks:
  my-network:
    name: my-network
    driver: bridge

第二步:调整Nginx配置实现路径映射

根据你的需求,提供两种配置方案:

方案一:通过/tut/访问教程容器(基础需求)

修改nginx.conf中的location /tut/配置,将请求代理到测试容器的/tutorial/路径,并修正重定向地址:

events {}
http {
  server {
      listen       80;
      listen  [::]:80;

      location / {
          root   /usr/share/nginx/html;
          index  index.html index.htm;
      }

      location /tut/ {
          # 将/tut/路径代理到测试容器的/tutorial/
          proxy_pass http://my-test:80/tutorial/;
          # 修正测试容器返回的重定向地址,把/tutorial/替换为/tut/
          proxy_redirect http://my-test:80/tutorial/ /tut/;
          # 传递原始请求头,避免测试容器路径识别错误
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
  }
}

方案二:通过/tutorial/直接访问(最优需求)

如果希望直接用/tutorial/路径访问,配置更简洁,无需路径转换:

events {}
http {
  server {
      listen       80;
      listen  [::]:80;

      location / {
          root   /usr/share/nginx/html;
          index  index.html index.htm;
      }

      location /tutorial/ {
          # 直接代理到测试容器的/tutorial/路径
          proxy_pass http://my-test:80/tutorial/;
          # 传递必要请求头
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
  }
}

第三步:重新部署服务

执行以下命令重启容器,使配置生效:

docker-compose down
docker-compose up -d --build

原配置404的原因

你之前的proxy_pass http://my-test:80/会把/tut/请求转发到测试容器的根路径,而测试容器根路径会自动重定向到/tutorial/。此时浏览器地址会变成http://localhost/tutorial/,但Nginx没有配置这个路径的代理规则,所以会去本地/usr/share/nginx/html目录查找tutorial/index.html,最终导致404错误。

内容的提问来源于stack exchange,提问作者Murrah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:33:18