@Polishken

Как заблокировать домены в nginx?

Dom1.com и dom2.com по курлу проксируется до сервера где стоит nginx + apache на домен domnginx.com
надо запретить dom1.com и dom2.com в nginx, ниже конфиг не блокирует
server {
        listen *:80;
        server_name domnginx.com;
        location / {
                proxy_pass http://6.6.6.6:8080;
                }
if ($host ~* dom1.com|dom2.com) {
return 403;
break;
}
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
}

Пробовал $host, $hostname, $proxy_host, http_host
Вот такое условие вполне работает
if ($http_user_agent ~ (iPhone|Android) ) { 
>>>blablalba
}

А домены заблокировать не получается, nginx воспринимает Хост не проксируемого сайта, а тот что domnginx.com
Не понимаю почему так.

для теста такое делал
location ~ (testpage|test$) {
return 200 "Host - $host Http_Host - $http_host";
}

Получаю
Host - domnginx.com Http_Host - domnginx.com
А должно быть dom1.com
  • Вопрос задан
  • 434 просмотра
Решения вопроса 1
Godless
@Godless
Поясните пожалуйста фразу
по курлу проксируется

Там просто при подключении к dom[1,2].com идут запросы через cURL из php или другого языка к домену domnginx.com?
Если нет

Далее:
server {
        listen *:80;
        server_name domnginx.com;
        location / {
                proxy_pass http://6.6.6.6:8080;
                }
if ($host ~* dom1.com|dom2.com) {
return 403;
break;
}
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
}

Этот код обслуживает домен domnginx.com. Это логично, что
if ($host ~* dom1.com|dom2.com) {
return 403;
break;
}

не отрабатывает.

Как минимум напрашивается:
server_name domnginx.com dom1.com dom2.com;
Но боюсь этого будет мало.
Если да

Тогда фильтровать нужно не по $host, а по клиентскому адресу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы