Подстановочные знаки Nginx перенаправляют все на https не www, но субдомены переходят в определенную папку?

Я только что установил подстановочный сертификат Let's Encrypt и хочу использовать не www в качестве стандартного регулярного выражения для более короткого блока сервера. Поэтому я хочу сделать следующее:

  1. http не www ---> https не www

  2. http www ---> https non www

  3. https www ---> https non 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 мне сначала нужно добавить поддомен с помощью записи 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/

Другие вопросы по тегам