Рейтинг:0

один ip разрешает 2 веб-сайта - конфигурация Ubuntu 20.04 для разрешения определенного домена

флаг cn

Итак, я недавно установил дроплет цифрового океана с Ubuntu 20.04 с веб-сервером nginx.Я на одном веб-сайте по умолчанию говорю, что example.com использует настройки nginx, а затем IP-адрес цифрового океана в качестве записи в панели DNS домена.

Таким образом, example.com работает нормально, но, не зная, я поместил тот же IP-адрес в другой домен, скажем, example1.com, и теперь и example1.com, и example.com открывают один и тот же веб-сайт.

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

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

    сервер {
        слушать 80;
        вернуть 301 https://$host$request_uri;
    }
    
    сервер {
            слушать 443 по умолчанию ssl http2;
            имя_сервера пример.com;
            ssl_session_cache встроенный: 1000 общий: SSL: 10 м;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
            ssl_prefer_server_ciphers включен;
            gzip включен;
            gzip_static включен;
            gzip_types font/woff2 text/plain text/css application/json application/x-javascript text/xml application/xml application/xml>
            gzip_proxy любой;
            gzip_vary включен;
            gzip_comp_level 6;
            gzip_buffers 16 8k;
            gzip_http_версия 1.1;

Вот полная конфигурация nginx:

файл конфигурации /etc/nginx/sites-enabled/ug:

сервер {
    слушать 80 default_server;
вернуть 404;
   # вернуть 301 https://$host$request_uri;
}

сервер {
    слушать 443 ssl http2;
    имя_сервера пример.com;
    ssl_session_cache встроенный: 1000 общий: SSL: 10 м;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers включен;
    gzip включен;
    gzip_static включен;    
    gzip_types font/woff2 text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    gzip_proxy любой;
    gzip_vary включен;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_версия 1.1;
# вернуть 404;

    место расположения / {
        индекс index.html
        add_header Прагма «без кеша»;
        add_header Cache-Control "без хранения, без кеша, обязательная повторная проверка, пост-проверка = 0, предварительная проверка = 0";
        try_files $uri $uri @universal;
        корень /home/winnc/www/us/dist/ecommcerce/сервер;
    }

    местоположение @universal {
        #port определен в вашем server.js
        proxy_pass http://localhost:4000;
        прокси_http_версия 1.1;
        proxy_set_header Обновить $http_upgrade;
        proxy_set_header Соединение «обновление»;
        proxy_set_header Хост $host;
        proxy_cache_bypass $http_upgrade;
    }

    местоположение/администратор {
        индекс index.html
        add_header Прагма «без кеша»;
        add_header Cache-Control "без хранения, без кеша, обязательная повторная проверка, пост-проверка = 0, предварительная проверка = 0";
        try_files $uri $uri/admin @universal-admin;
        корень /home/winnc/www/us/dist/ecommerce-admin/server/dist/ecommerce-admin/browser;
    }

    местоположение @universal-admin {
        #port определен в вашем server.js
        proxy_pass http://localhost:4001; 
        прокси_http_версия 1.1;
        proxy_set_header Обновить $http_upgrade;
        proxy_set_header Соединение «обновление»;
        proxy_set_header Хост $host;
        proxy_cache_bypass $http_upgrade;
    }

    расположение /API/ {
            proxy_pass http://localhost:5000;
            прокси_http_версия 1.1;
            proxy_set_header Обновить $http_upgrade;
            proxy_set_header Поддержание соединения;
            proxy_set_header Хост $host;
            proxy_cache_bypass $http_upgrade;
        proxy_redirect http://localhost:5000 https://example.com;
        корень /home/winnc/www/us;
    }

        расположение /контент/ {
             proxy_pass http://localhost:5000;
             прокси_http_версия 1.1;
             proxy_set_header Обновить $http_upgrade;
             proxy_set_header Поддержание соединения;
             proxy_set_header Хост $host;
             proxy_cache_bypass $http_upgrade;
         proxy_redirect http://localhost:5000 https://example.com;
        корень /home/winnc/www/us;
    }


# слушать 443 ssl; # под управлением Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # под управлением Certbot
# включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}


# сервер {
# если ($host = example.com) {
# вернуть 301 https://$host$request_uri;
# } # под управлением Certbot


# имя_сервера example.com;
# слушать 80;
# вернуть 404; # под управлением Certbot


#}
Рейтинг:1
флаг us

В nginx есть концепция виртуального хоста по умолчанию, который обслуживается для HTTP-запросов, для которых не настроен соответствующий виртуальный хост.

Точный алгоритм выбора виртуального хоста описан в документация по nginx.

Если два виртуальных хоста в вашем вопросе являются единственными настроенными, то они также являются виртуальными хостами по умолчанию для соответствующих портов.

Чтобы настроить правильный виртуальный хост по умолчанию, вам необходимо добавить следующее сервер блоки:

сервер {
    слушать 80 default_server;
    вернуть 404;
}

сервер {
    слушать 443 default_server ssl http2;
    вернуть 404;
}

Это говорит nginx вернуть HTTP 404 код состояния для всех виртуальных хостов, кроме виртуального хоста, настроенного с имя сервера.

Также необходимо удалить бессмысленное По умолчанию ключевое слово в текущем Слушать директива, чтобы она стала

слушать 443 ssl http2;

В целом, вам нужно иметь четыре сервер блоки:

  1. default_server для порта 80
  2. default_server для порта 443
  3. пример.com для порта 80
  4. пример.com для порта 443
флаг cn
Как только я меняю настройки, либо оба домена получают 404, либо оба работают. Но я просто хочу, чтобы один домен работал, а другой нет.
флаг us
Пожалуйста, отредактируйте свой вопрос и добавьте вывод `nginx -T`, чтобы мы увидели вашу полную конфигурацию.
флаг cn
я отредактировал вопрос
флаг us
Вам нужно сохранить исходный блок server для HTTP-трафика и отдельно добавить блок default_server в мой ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.