Nginx 配置仅将一个域的 http 重定向到 https

Nginx configuratie redirect http to https for only one domain

在我的 Nginx .conf 文件的开头添加了以下重定向:

server {
    listen 80;
    listen [::]:80;

    server_name *.a-domain.nl;
    return 301 https://$host$request_uri;
}
server {
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    listen 443;
    listen [::]:443 ipv6only=on;

    server_name *.a-domain.nl;

    ssl on;
    ssl_certificate /etc/ssl/b-domain.crt;
    ssl_certificate_key /etc/ssl/b-domain.key;

    location ~* \.(ogg|ogv|svgz|mp4|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|html|txt|htm)$ {
        root /var/www/html/mtcore/web;
        try_files $uri $uri/ $uri.html =404;
    }

    location / {
        proxy_pass http://127.0.0.1;
        proxy_http_version 1.1;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
    }
}
server {
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _;

    location ~* \.(ogg|ogv|svgz|mp4|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|html|txt|htm)$ {
        root /var/www/html/mtcore/web;
        try_files $uri $uri/ $uri.html =404;
    }

    location / {
        proxy_pass http://127.0.0.1;
        proxy_http_version 1.1;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
    }
}

只有当我在浏览器中打开在同一台服务器上提供的以下域 www.b-domain.nl 时,Nginx 才会将其重定向到 https。我希望 Nginx 只重定向 www.a-domain.nl?

第一个服务器块是端口 80 的隐式默认服务器,因此它可以处理所有 http 请求,而不管服务器名称如何。第三个服务器块将只匹配服务器名称 _,这是非法的或不太可能的。

要使另一个服务器成为默认阻止,请在 listen 指令中使用 default_server 选项。

有关更多信息,请参阅 this document