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

Nginx Docker容器HTTP转HTTPS重定向失效问题求助

问题:Docker部署Nginx HTTP转HTTPS重定向外部访问失效

我们通过Docker部署Nginx,要求将所有HTTP流量重定向至HTTPS。服务器内部用curl测试重定向正常:

$ curl -L -I  http://maxquant.org
HTTP/1.1 301 Moved Permanently
Server: nginx/1.19.10
Date: Tue, 21 Nov 2023 08:12:10 GMT
Content-Type: text/html
Content-Length: 170
Connection: keep-alive
Location: https://maxquant.org/

HTTP/1.1 200 OK
Server: nginx
...

但外部访问http://maxquant.org(含/不含www)时,仅显示Nginx默认欢迎页,重定向未生效。

相关配置文件

nginx.conf.template

server {
  listen 80;

  server_name ${NGINX_DOMAIN};

  return 301 https://$host$request_uri;
}
server {
  listen 443 ssl default_server;
  server_name ${NGINX_DOMAIN};

  gzip              on;
  ...

  location / {
     include uwsgi_params;
     uwsgi_pass maxquant_download_app:8001;
  }

  location /static {
      root /app/maxquant;
  }

  location /p/ {
      secure_link $arg_md5,$arg_expires;
      secure_link_md5 "$secure_link_expires$uri ${NGINX_SECRET}";

      if ($secure_link = "") {
          return 403;
      }

      if ($secure_link = "0") {
          return 410;
      }
      rewrite ^/p/(.*)$ /assets/$1;
   }

   location /assets/ {
       internal;
       root /app/maxquant;
   }
}

docker-compose.yml

version: '3.4'
services:
  maxquant_download_app:
    ...     
  nginx:
    container_name: nginx
    build:
      context: ..
      network: host
      dockerfile: docker/nginx.dockerfile
      args:
      ...
  depends_on:
    - maxquant_download_app
    ports:
      - 80:80
      - 443:443
    restart: "always"

补充说明:访问HTTP时显示Nginx默认欢迎页,而非目标网站。

排查与解决方案

1. 确认环境变量NGINX_DOMAIN的注入与取值

HTTP监听的server块依赖${NGINX_DOMAIN}作为server_name,若该变量未正确传递至容器,或取值未包含maxquant.org和www.maxquant.org,Nginx会匹配不到外部请求,转而使用默认server块(即自带的欢迎页配置)。

  • 确保容器构建/运行时,NGINX_DOMAIN的值设为maxquant.org www.maxquant.org,覆盖带www与不带www的域名。
  • 进入Nginx容器,查看最终生成的nginx.conf,确认server_name已被正确替换为目标域名。

2. 为HTTP server块添加default_server

若没有其他监听80端口的server块,给HTTP监听的server添加default_server,确保所有80端口请求都进入重定向块,避免匹配到默认欢迎页配置:

server {
  listen 80 default_server;
  server_name ${NGINX_DOMAIN};
  return 301 https://$host$request_uri;
}

3. 检查宿主机80端口占用情况

若宿主机本身运行了其他Nginx服务或程序占用80端口,外部请求会被宿主机服务处理,而非转发至Docker容器内的Nginx,导致显示默认欢迎页。

  • 执行netstat -tulpn | grep :80检查宿主机80端口的占用状态,确保仅Docker容器的Nginx在监听。

4. 清理Nginx默认配置

Docker镜像可能自带default.conf(通常位于/etc/nginx/conf.d/目录),该配置会监听80端口并返回欢迎页。需在构建镜像时删除该文件:

  • 在nginx.dockerfile中添加命令:RUN rm /etc/nginx/conf.d/default.conf,确保默认配置被移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:13:40