Nginx 通配符将所有内容重定向到 https 非 www 但子域名转到特定文件夹?

Nginx 通配符将所有内容重定向到 https 非 www 但子域名转到特定文件夹?

我刚刚安装了 Let's Encrypt 通配符证书,我想使用非 www 作为较短服务器块的标准正则表达式。因此,我希望执行以下操作:

  1. http 非 www ---> https 非 www

  2. http www ---> https 非 www

  3. https www ---> https 非 www

  4. http any ---> https any 到特定文件夹,例如 /var/www/any

  5. https any ---> https any 到特定文件夹,例如 /var/www/any

我这样做对吗?重定向是否太多?我希望你能实现我想要实现的目标。

答案1

经过一些测试后我已经找到了答案......

# case 1 & 2...

server {
    listen 80;
    listen [::]:80;
    server_name <domain> www.<domain>;
    return 301 https://<domain>$request_uri;
}

# case 3...

server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;
    server_name www.<domain>;
    ...
    return 301 https://<domain>$request_uri;
}

# the main server block...

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

对于情况 4 和 5,我首先需要通过 DNS 中的 CNAME 记录添加一个子域并将其指向我的主域,然后创建一个服务器块,其根文件夹与您想要的 server_name(子域)相对应。

server {
    ...
    server_name <subdomain>.<domain>
    root /var/www/any
    ...
}

另外值得一提的是(为了避免域名停放和与 IP 无关的域名)并返回“444 连接关闭而没有响应”...

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    access_log off;
    log_not_found off;
    server_name _;
    return 444;
}

关于不使用正则表达式重定向和避免 if 语句的参考:https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

相关内容