Рейтинг:0

Как я могу настроить свой сервер nginx для приема разных поддоменов, а также порта?

флаг mx

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

Ниже мой файл конфигурации:

сервер {
    имя_сервера app.example.com www.app.example.com;
    журнал доступа /home/hub-app/logs/app.example.com.access.log;
    
    место расположения / {
        proxy_set_header Хост $host;
        прокси_пароль http://127.0.0.1:8082;
        прокси_перенаправление выключено;
        proxy_set_header Обновить $http_upgrade;
        proxy_set_header Соединение «обновление»;      
        proxy_cache_bypass $http_upgrade;       
        прокси_http_версия 1.1;     
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $ схема; 
    }

    слушать 443 ssl; 
    ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
    включить /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;


}   

сервер {
    имя_сервера example.com www.example.com;
    журнал доступа /home/hub-public/logs/example.com.access.log;
    
    место расположения / {
        proxy_set_header Хост $host;
        прокси_пасс http://127.0.0.1:8081;
        прокси_перенаправление выключено;
        proxy_set_header Обновить $http_upgrade;
        proxy_set_header Соединение «обновление»;      
        proxy_cache_bypass $http_upgrade;       
        прокси_http_версия 1.1;     
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $ схема; 
    }

    слушать 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 
    включить /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

}

Приведенное выше работает хорошо и указывает на указанные домены, например, example.com и app.example.com. Теперь я хочу добавить еще один виртуальный сервер для работы с MY_PUBLIC_IP:8080. Порт 8080 не должен быть доступен в других доменах, т.е. пример.ком:8080/приложение.пример.ком:8080 не должно быть доступно.

djdomi avatar
флаг za
использовать в качестве server_name ip
Рейтинг:0
флаг gr

Я не думаю, что ответ @Klamberext действительно отвечает на вопрос. То есть веб-сервер nginx имеет сервер по умолчанию концепция. Официальную страницу документации по этому вопросу можно найти здесь: Как nginx обрабатывает запрос. Однако один из серверных блоков, прослушивающих некоторую комбинацию сетевого интерфейса/порта, всегда будет действовать как блок по умолчанию. Если вы не укажете этот блок сервера явно, он будет самым первым блоком сервера в вашей конфигурации. Это означает, что ваш сервер блокируется с имя_сервера app.example.com www.app.example.com; строка будет блоком сервера по умолчанию для любого запроса, поступающего на порт 443 TCP, и обслуживает любой запрос, где HTTP Хозяин заголовок не будет соответствовать пример.com или же www.example.com (или если не будет Хозяин заголовок вообще).

Как уже сказал @Klamberext, обычной практикой является определение блока сервера-заглушки для перехвата всех запросов, где Хозяин Заголовок HTTP не соответствует ни одному из обслуживаемых вами доменов. Вы можете увидеть пример на это ТАК отвечай. Обычно такой серверный блок содержит вернуть 444; оператор, который является специальным кодом возврата nginx для немедленного закрытия соединения.Однако кажется, что вам нужно что-то противоположное, и для этого вам понадобятся два блока сервера, поскольку, как уже было сказано, один блок сервера, прослушивающий TCP-порт 8080, будет действовать как блок по умолчанию, независимо от того, какой Хозяин заголовок установлен на:

сервер {
    слушать 8080;
    имя_сервера example.com www.example.com app.example.com www.app.example.com;
    вернуть 444;
}
сервер {
    слушать 8080 default_server;
    ... ваш конфиг здесь
}

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

сервер {
    слушать 8080;
    if ($http_host ~ \.?example\.com$) { return 444; }
    ... ваш конфиг здесь
}
Рейтинг:0
флаг ru

Ты можешь использовать default_server.

Nginx объявит этот сервер сервером по умолчанию. После этого Nginx будет использовать сервер по умолчанию для обработки запросов, когда их заголовок HTTP-хоста не будет соответствовать каким-либо другим блокам сервера.

Что такое default_server в Nginx

Пример:

сервер {
    слушать 8080 default_server;
    
    корень /www/по умолчанию;
        
    место расположения / {
        индекс index.html;
    }
}


Я использую его для ботов-сканеров-ловушек и транслирую им несколько эмодзи какашек, если они ищут phpAdmin или что-то в этом роде :)

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

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