能否通过单端口转发(8081)在Windows服务器上同时访问Django与Nginx?
实现Django与Nginx通过单端口8081共用访问(Windows Docker环境)
核心思路
新增一个反向代理Nginx容器作为统一入口,监听宿主机8081端口,根据请求路径将流量转发到内部的Django服务和Allure报告Nginx服务。原有两个服务无需再暴露端口到宿主机,仅通过Docker内部网络通信。
步骤1:修改Docker Compose配置
更新docker-compose.yml,新增反向代理服务,同时移除原有服务的宿主机端口映射:
version: '3' services: web: build: . command: sh -c "echo 'Making migrations ' && python manage.py makemigrations && echo 'Migrating...' && python manage.py migrate && echo 'Running server...' && python manage.py runserver 0.0.0.0:8000" volumes: - .:/code restart: always # 移除宿主机端口映射,仅保留内部网络访问 nginx-allure: image: nginx container_name: nginx-allure volumes: - type: bind source: ./allure-reports target: /usr/share/nginx/html read_only: true restart: always # 移除宿主机端口映射 nginx-proxy: image: nginx container_name: nginx-proxy ports: - "8081:80" volumes: - type: bind source: ./nginx-proxy.conf target: /etc/nginx/conf.d/default.conf read_only: true restart: always # 依赖其他服务,确保先启动后端服务 depends_on: - web - nginx-allure
步骤2:创建反向代理配置文件
在项目根目录下新建nginx-proxy.conf,配置路径转发规则:
server { listen 80; server_name localhost; # 转发Django应用请求 location / { proxy_pass http://web:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 转发Allure报告请求,路径前缀为/report location /report/ { proxy_pass http://nginx-allure:80/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 重写路径,去掉/report前缀 rewrite ^/report/(.*)$ /$1 break; } }
步骤3:启动服务
在项目根目录执行命令启动所有服务:
docker-compose up -d --build
访问方式
- Django应用:直接访问
http://127.0.0.1:8081/ - Allure报告:访问
http://127.0.0.1:8081/report/
注意事项
- Windows环境下,确保
./allure-reports和./nginx-proxy.conf路径正确,Docker能正常读取宿主机文件。 - 若Django应用有静态文件,需额外配置Nginx代理静态资源,或在Django中配置
STATIC_ROOT并收集静态文件到对应目录。
内容的提问来源于stack exchange,提问作者Muhammad Nawaz
相关产品推荐
相关产品推荐

