我刚刚安装了 Let's Encrypt 通配符证书,我想使用非 www 作为较短服务器块的标准正则表达式。因此,我希望执行以下操作:
http 非 www ---> https 非 www
http www ---> https 非 www
https www ---> https 非 www
http any ---> https any 到特定文件夹,例如 /var/www/any
- 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/