0

我无法弄清楚我的 nginx 配置。

我的配置应该强制使用 https 而没有 www。一些子域api.domain.comapi.staging.domain.com是允许的。最后提到的目前是在另一个conf文件中配置的,这里没有附上。

目前我的问题是这似乎允许 www. 我需要将 www 301 重定向到无 www。子域 www 在 dns 配置中设置为 cname。

有人可以帮我吗?

server {
        listen          54.00.00.00;
        server_name     54.00.00.00;
        rewrite         .* https://domain.com$request_uri permanent;
}
server {
        listen          80;
        return          301 https://$host$request_uri;
}
server {
        listen          443 default ssl;
        server_name     domain.com api.domain.com;
        root            /var/www/domain.com/current/web;

        ##
        # Certificate Settings
        ##

        ssl_certificate         /etc/nginx/ssl/domain.com.pem;
        ssl_certificate_key     /etc/nginx/ssl/domain.com.key;
4

1 回答 1

0

你的问题是这个server

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

匹配所有服务器,即使是那些www考虑到如果您正在请求http://www.example.com$host将会是的服务器www.example.com,因此您最终会重定向到https带有www.

如果您想全面了解并仍然www从拥有它的人身上剥离,我建议最好在服务器名称中使用正则表达式

server {
    server_name ~^(www\.)?(?<domain>.+)$;
    return 301 https://$domain$request_uri;
}
于 2013-11-19T16:36:18.647 回答