Nginx 捕获所有域名,如果不存在则添加 www

Nginx 捕获所有域名,如果不存在则添加 www

此设置用于多个域共享单个 CMS 平台。它将允许任何域指向我的服务器 IP。

我可以使用 nginx server_name _; 来捕获所有内容。

但是如果不存在 www,那么我想 301 重定向到 www(在前面附加 www.)。如果存在 www,那就没问题。

我怎样才能实现这个?

答案1

类似这样的事情可能会起作用(未经测试!):

server {
    server_name  ~^www\.;
    <deliver content here>
}
server {
    server_name  ~^(?!www\.);
    location / {
        return 302 $scheme://www.$host$request_uri;
    }
}

现在缺少其他选项!例如“listen”和“location”。
您可能应该添加另一个服务器块,其中包含服务器的公共 IP,它将非虚拟主机流量重定向到默认站点。
您应该注意 server_name 指令的处理顺序:http://nginx.org/en/docs/http/server_names.html

相关内容