nginx config ловит домены, не указанные в server_name - PullRequest
1 голос
/ 10 июля 2020

У меня включены две конфигурации в моей папке nginx sites-enabled.

Первый (my-domain.fr.conf) выглядит так:

server {
    listen 443 ssl http2;
    server_name my-domain.fr;
    index index.html;
    location / {
        root /www/my-domain.fr;
    }
    include ssl_certif.conf;
}

# HTTP redirect
server {
    listen 80 default_server;
    server_name my-domain.fr;

    location / {
        return 301 https://my-domain.fr$request_uri;
    }
}

второй (sub.my-domain.fr.conf) выглядит так:

server {
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
    include ssl_certif.conf;
    server_name sub.my-domain.fr;
    listen [::]:443 ssl;
}
server {
    if ($host = sub.my-domain.fr) {
        return 301 https://$host$request_uri;
    }

    server_name sub.my-domain.fr;

    listen [::]:80;
    return 404;
}

Я ожидал бы, что последний будет перехватывать запросы только к поддоменам sub.my-domain.fr, но вместо этого он перехватывает что угодно (у меня есть поддомены с подстановочными знаками, настроенные на моем DNS), и даже маскирует my-domain.fr.

Как я могу убедиться, что он перехватывает только запросы sub.my-domain.fr?

1 Ответ

1 голос
/ 10 июля 2020

Я нашел причину.

sub.my-domain.fr поддерживает ipv6 (listen [::]:443 ssl;). my-domain.fr - нет. Я предполагаю, что мое соединение использует ipv6, когда это возможно, и в этом случае sub.my-domain.fr является единственным совпадением.

Добавление поддержки ipv6 (listen 443 ssl => listen [::]:443 ssl; и listen 80; => listen [::]:80;) во всех записях сервера исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...