Лучший способ предотвратить использование сервера по умолчанию?

Лучший способ предотвратить использование сервера по умолчанию?

У меня есть несколько виртуальных хостов, и я хотел бы «отключить» виртуальный хост по умолчанию, либо с помощью пустой страницы, страницы с ошибкой, либо любым другим способом, который позволит наиболее эффективно использовать ресурсы Nginx, разрешив при этом доступ к другим виртуальным хостам только через предопределенные домены.

решение1

Определитеdefault_serverкоторый возвращаетHTTP-444код:

server {
    listen      80 default_server;
    server_name _;
    return      444;
}

(Возврат кода ошибки 4xx означает, что запросы могут быть интерпретированы клиентом как неудачные запросы, а не какHTTP 200 Пустая страница, но все работает, поверьте мне.)

Для портов 443/SSL-запросов,вы можете использовать ssl_reject_handshake on

решение2

Просто определитепо умолчаниюvhost, который будет указывать на каталог с пустым файлом index.html.

server {
    listen       80 default_server;
    server_name  _ ;
    root /var/www/placeholder ; 
    index index.html;
}

и поместите пустой индекс в /var/www/placeholder

решение3

почему бы просто не отрицать все

server {
    listen       80 default_server;
    server_name  _;

    location / {
        deny    all;
    }
}

решение4

Это то, что сработало у меня как для HTTP, так и для HTTPS на Debian 10 (buster) с запущенным nginx 1.18.0.

Примечание: Я всегда добавляю include /etc/nginx/sites-enabled/*;в httpраздел /etc/nginx/nginx.confи управляю виртуальными хостами, используя /etc/nginx/sites-availableпапки /etc/nginx/sites-enabled`.

Шаг 1: создайте самоподписанный сертификат-заполнитель

$ mkdir -p /usr/local/etc/ssl

$ cd /usr/local/etc/ssl

$ openssl req -new -x509 -days 1 -nodes -out default-cert.pem -keyout default-key.pem
Generating a RSA private key
.+++++
.........................+++++
writing new private key to 'default-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Шаг 2: создайте виртуальный хост по умолчанию

cat << EOF > /etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen 443 default_server ssl;

    return 444;

    ssl_ciphers aNULL;
    ssl_certificate /usr/local/etc/ssl/default-cert.pem;
    ssl_certificate_key /usr/local/etc/ssl/default-key.pem;
}
EOF

Шаг 3: включите виртуальный хост по умолчанию

cd /etc/nginx/sites-enabled
ln -s ../sites-available/default default

Шаг 4: перезапустите nginx

введите описание изображения здесь

введите описание изображения здесь

Связанный контент