Nginx配置:Drupal站点子域名代理至主域名路径且不跳转
实现user.redangus.org透明代理redangus.org/user的Nginx配置方案
这个需求本质是要做域名到特定路径的反向代理,同时适配Drupal的路由机制,避免它自动触发重定向。我之前帮同事调过几乎一模一样的配置,给你拆解关键步骤:
1. 配置Nginx的server块(核心)
针对user.redangus.org新建一个server块,通过反向代理把请求转发到原站点的/user路径,同时修改请求头让Drupal“误以为”请求来自原站点,从而避免重定向。
完整配置示例:
server { listen 80; listen [::]:80; server_name user.redangus.org; # 如果你的站点用HTTPS,取消下面的注释并配置证书路径 # listen 443 ssl http2; # listen [::]:443 ssl http2; # ssl_certificate /etc/nginx/ssl/user.redangus.org.crt; # ssl_certificate_key /etc/nginx/ssl/user.redangus.org.key; location / { # 关键:proxy_pass末尾的斜杠不能少!否则URI拼接会出错 proxy_pass http://redangus.org/user/; # 强制修改Host头为原站点域名,这是避免Drupal重定向的核心 proxy_set_header Host redangus.org; # 传递客户端真实IP和协议,适配Drupal的日志和安全模块 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 关闭自动重定向,确保URL保持不变 proxy_redirect off; # 禁用压缩,避免代理后资源加载异常 proxy_set_header Accept-Encoding ""; # 调整超时时间,适配Drupal后台的长操作 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } }
2. 调整Drupal的信任域名配置
打开Drupal根目录下的sites/default/settings.php,添加user.redangus.org到信任域名列表,否则Drupal会拒绝来自这个域名的请求:
$settings['trusted_host_patterns'] = [ '^redangus\.org$', '^user\.redangus\.org$', ];
3. 测试与排坑
- 重启Nginx使配置生效:
sudo systemctl restart nginx - 清除浏览器缓存(或用隐私模式访问),检查
user.redangus.org是否正常显示redangus.org/user的内容,且URL无跳转 - 如果仍出现重定向,检查原站点
redangus.org的Nginx配置,看是否有强制跳转到www、HTTPS的规则影响了代理请求;另外可以查看Drupal的日志(sites/default/logs),排查路由相关的错误
内容的提问来源于stack exchange,提问作者Coy
相关产品推荐
相关产品推荐

