Назад | Перейти на главную страницу

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

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

  1. http без www ---> https без www

  2. http www ---> https без www

  3. https www ---> https без www

  4. http любой ---> https любой в определенную папку, например / var / www / any

  5. https любой ---> https любой в определенную папку, например / var / www / any

Я правильно это делаю? Слишком много перенаправлений? Я надеюсь, вы получите то, чего я хочу здесь.

Я нашел ответ уже после нескольких тестов ...

# 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_name (поддомену).

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

Также стоит упомянуть (чтобы избежать парковки домена и домена, не связанного с IP) и вернуть «444 Connection Closed Without Response» ...

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/