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

CentOS下Nginx将所有子域名重定向至根域名失败求助

我来帮你搞定这个子域名重定向的问题!结合你用CentOS+Nginx+Puma的场景,这种配置后失效的情况,大概率是Nginx的server块匹配规则或者配置顺序出了问题,咱们一步步来调整:

可能的问题点&解决方案

1. 调整Server块的匹配顺序与规则

Nginx是按匹配优先级处理请求的,你需要把主域名的精确匹配server块放在前面,再用一个default_server的兜底块来处理所有子域名。给你一个适配Puma的正确配置示例:

# 主域名配置(精确匹配,优先处理)
server {
    listen 80;
    server_name mydomein.com www.mydomein.com; # 不需要保留www的话,只留主域名即可

    # 反向代理到Puma的核心配置
    location / {
        proxy_pass http://127.0.0.1:3000; # 替换成你的Puma实际监听端口
        proxy_set_header Host $host;
        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;
    }

    # 静态文件直接由Nginx处理(如果你的应用有静态资源的话)
    location ~* ^/assets/ {
        expires 1y;
        add_header Cache-Control public;
        add_header ETag "";
        break;
    }
}

# 兜底子域名重定向块
server {
    listen 80 default_server;
    server_name *.mydomein.com;

    # 301永久重定向到主域名,保留原请求路径
    return 301 http://mydomein.com$request_uri;
}

这里的关键是default_server标记,它会让所有未匹配到主域名的请求(也就是所有子域名)都进入这个块执行重定向。

2. 确认DNS解析是否正确

你得确保*.mydomein.com这个泛域名已经指向了你的服务器IP,如果DNS没配置对,Nginx根本收不到子域名的请求,自然会跳转到默认页面。

3. 验证配置并重启Nginx

每次改完配置后,一定要先检查语法是否合法:

nginx -t

如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,再重启Nginx生效:

systemctl restart nginx

要是之前配置有语法错误,Nginx会停留在旧配置上,新规则自然不生效。

4. 检查Puma与日志排查

  • 确保Puma的监听地址是Nginx能访问到的(比如127.0.0.1:3000),不要绑定到特定外部IP导致Nginx连不上。
  • 如果还是有问题,去看Nginx的日志找线索:
    • 访问日志:/var/log/nginx/access.log,看子域名请求到底匹配到了哪个server块
    • 错误日志:/var/log/nginx/error.log,有没有报错信息(比如proxy_pass失败、配置语法问题)

5. 测试重定向效果

用curl命令快速验证:

curl -I http://任意子域名.mydomein.com

如果返回的响应头里有Location: http://mydomein.com/原路径,说明重定向已经生效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:45:03