Redirect 在nginx中将www和http请求重定向到https://,捕获所有域

Redirect 在nginx中将www和http请求重定向到https://,捕获所有域,redirect,nginx,configuration,no-www,Redirect,Nginx,Configuration,No Www,在nginx中,我们希望将所有发送的请求重定向到: https://www.<domain> http://www.<domain> http://<domain> …但是第一个服务器块(www-catch)似乎匹配所有请求,而不仅仅是www.* 不要失去“其他一切”: server { listen 80 default_server; server_name _; return 301 http://ex

在nginx中,我们希望将所有发送的请求重定向到:

https://www.<domain>
http://www.<domain>
http://<domain>
…但是第一个服务器块(www-catch)似乎匹配所有请求,而不仅仅是www.*

不要失去“其他一切”:

server {
    listen       80 default_server;
    server_name  _;
    return       301 http://example.com$request_uri;
}
更高效的是,只需在http协议上运行重写,就可以避免在每个请求()上检查$scheme变量

也许您可以在一个地方尝试使用80/443:

server {
    listen   80;
    listen   [::]:80;
    listen   443 default ssl;

    server_name www.example.com;

    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;

    if ($ssl_protocol = "") {
       rewrite ^   https://$server_name$request_uri? permanent;
    }
}

谢谢,瓦莱里。您知道如何将此应用于捕获所有域吗?空服务器实际上是捕获所有域server@ValeriySolovyov为什么在最后一段代码中出现
如果
的情况?@Mohammad AbuShady如果不是https->redirect$ssl_协议-返回已建立ssl连接的协议;嗯,我会尽量避免
如果
s,我认为第一个解决方案更好,3个服务器块和nginx将匹配正确的一个。
server {
    listen   80;
    listen   [::]:80;

    server_name www.example.com;

    return 301 https://example.com$request_uri;
}
server {
    listen   443 default_server ssl;

    server_name www.example.com example.org;

    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;
}
server {
    listen       80 default_server;
    server_name  _;
    return       301 http://example.com$request_uri;
}
server {
    listen   80;
    listen   [::]:80;
    listen   443 default ssl;

    server_name www.example.com;

    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;

    if ($ssl_protocol = "") {
       rewrite ^   https://$server_name$request_uri? permanent;
    }
}