Подстановочные знаки Nginx перенаправляют все на https не www, но субдомены переходят в определенную папку?
Я только что установил подстановочный сертификат Let's Encrypt и хочу использовать не www в качестве стандартного регулярного выражения для более короткого блока сервера. Поэтому я хочу сделать следующее:
http не www ---> https не www
http www ---> https non www
https www ---> https non 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 мне сначала нужно добавить поддомен с помощью записи CNAME в моем DNS и указать его на моем основном домене, а затем создать блок сервера с корневой папкой, соответствующей нужному вам имени_сервера (поддомену).
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/