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

Nginx игнорирует server_name

У меня есть веб-сайт, работающий на веб-сервере Nginx, который работает по HTTPS. Недавно я заметил, что кто-то указал свой домен на мой веб-сервер, а Nginx обслуживает мой веб-сайт на этом плохом домене. Вроде даже в гугле индексируется ...

Конфигурация Nginx:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/nginx/ssl/example.com/ssl-bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;

    root /var/www/example.com;
    index index.html;
}

Я пробовал добавить if заявление, чтобы проверить, $host соответствует server_name как рекомендовано Вот

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/nginx/ssl/example.com/ssl-bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;

      # Check if incoming hostname matches server_name 
      if ($host != $server_name) {
        # If not, return 404
        return 404;
      }

    root /var/www/example.com;
    index index.html;
}

Это дополнение, похоже, не помогло. На правильном ли пути все это? Любые предложения будут высоко ценится

Лучшим вариантом было бы создание универсального сервера. Вы могли либо return 404;, как предлагается, или перенаправить все на каноническое имя хоста; это решило бы проблему с поисковыми системами.

Вот моя альтернатива с полной конфигурацией:

server {
    # catch-all server for both http and https
    listen *:80 default_server;
    listen *:443 default_server;
    server_name _;

    # Your SSL configuration
    ssl_certificate     /etc/nginx/ssl/example.com/ssl-bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;

    # Redirect to canonical site
    rewrite ^/(.*)$ http://example.com/$1 permanent;
}

У меня есть веб-сайт, работающий на веб-сервере Nginx, который работает по HTTPS. Недавно я заметил, что кто-то указал свой домен на мой веб-сервер, а Nginx обслуживает мой веб-сайт на этом плохом домене. Вроде даже в гугле индексируется ...

Лучший способ справиться с этой или подобной ситуацией - создать серверный блок по умолчанию. Например, вот что мне нужно для обслуживания других доменов, которые указывают на IP моего сервера.

server {
    listen 80 default_server;
    server_name _;

    # deny all
    location / {
        return 403;
    }
}

Надеюсь, это поможет!