Nginx 重定向/重写:将 www 重定向到非 www 和 https

Nginx 重定向/重写:将 www 重定向到非 www 和 https

注意:请参阅下面的更新!

我有一个关于两个域的 Nginx 设置,example1.org并且example2.org它们都在同一个实例中处理。

我的问题是example2.org,我想http://www.example2.org重定向到https://example2.org,但是当我http://www.example2.org在浏览器中输入时,我总是得到一个“隐私错误 - 不安全”,其中列出了的证书example1.org

问题似乎是default server在解决时部分“获胜” http://www.example2.org,据我所知,这不应该发生,而且 des 似乎也不会发生

首先,我default.confexample1.org

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name _;

    ssl_certificate /etc/letsencrypt/live/example1.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example1.org/privkey.pem; # managed by Certbot
    ssl_session_tickets off;

    return 302 http://$host$request_uri;

}

然后example2.org.conf我有

server {
        server_name www.example2.org;
        return 301 https://example2.org$request_uri;
}


server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name example2.org;
    root /opt/web-apps/example2.org/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    ssl_certificate /etc/letsencrypt/example2.org/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/example2.org/example2.org.key;
    include /etc/nginx/snippets/ssl-params.conf;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2371;

    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}

对于我遗漏了什么/做错了什么,有什么建议吗?

干杯!


更新:

浏览器会保留自己的 HSTS 缓存,这会把事情搞砸。不幸的是,似乎没有办法为特定子域(如“www”)禁用此服务器端...

答案1

问题在于它没有被您期望的块http://www.example2.com处理。server

如果您启用HTTP 严格传输安全对于域名,并包含“子域名”子句,浏览器将会记住这一点很长时间。

浏览器自动将http请求更改为https://www.example2.com

没有服务器块在端口 443 上处理该域名,因此它由默认服务器块处理,该默认服务器块使用 的证书example1.com

相关内容