DDEV nginx-fpm环境多域名HTTP跳转HTTPS配置问题咨询
DDEV多域名301重定向配置方案
原有配置失效原因
.ddev/nginx_full目录存放的是DDEV运行时自动生成的全量Nginx配置,手动放入的独立.conf文件不会被加载,直接修改该目录下的文件会在DDEV重启时被覆盖,还会和默认生成的配置冲突。- DDEV的HTTPS请求在入口反向代理层完成TLS终止,转发到后端Nginx服务的请求均为HTTP协议,直接判断80端口返回HTTPS跳转,会触发无限重定向循环。
- 手动新增的80端口server块会和DDEV默认生成的默认server块抢占匹配优先级,导致域名识别异常。
正确配置流程
- 新建Nginx自定义配置目录,DDEV会自动加载该目录下所有
.conf后缀的配置文件,且不会被系统覆盖:
mkdir -p .ddev/nginx
- 在该目录下新建
redirect.conf文件,写入如下重定向规则,通过DDEV传递的X-Forwarded-Proto头判断原始请求协议,避免循环:
# 附属域名统一跳转至主站HTTPS地址 server { listen 80; server_name .domain1.com .domain2.com .domain3.com; return 301 https://www.maindomain.com$request_uri; } # 主域名HTTP请求强制跳转HTTPS server { listen 80; server_name maindomain.com www.maindomain.com; access_log off; error_log off; if ($http_x_forwarded_proto != "https") { return 301 https://$host$request_uri; } }
- 现有
config.yaml中的additional_fqdns配置无需调整,所有绑定域名已正确加入列表,use_dns_when_possible: false配置也符合本地多域名测试的要求。 - 执行重启命令让配置生效:
ddev restart
配置注意事项
主域名跳转规则不要硬编码写入
www.前缀拼接逻辑,通过$host变量获取当前访问域名即可,配合前置的附属域名跳转规则,可实现逻辑分层,避免后续新增域名时出现非预期跳转。
内容的提问来源于stack exchange,提问作者pmichelazzo
相关产品推荐
相关产品推荐

