Рейтинг:0

Прокси-сервер Nginx L4 работает с HTTPS, но не с HTTP

флаг us

У меня есть следующая конфигурация прокси-сервера L4 через Nginx, и все работает нормально.

  транслировать {
 

    
    карта $ ssl_preread_server_name $ имя {
    имена хостов;
    .ipchicken.com $ssl_preread_server_name;
    .bbc.com $ssl_preread_server_name;
    .bbc.co.uk $ssl_preread_server_name;
    .bbci.co.uk $ssl_preread_server_name;
    .neverssl.com $ssl_preread_server_name; #<-------
    
}


сервер {

    резольвер 8.8.8.8;
    слушать 443;
    ssl_preread включен;
    proxy_connect_timeout 5 с;
    proxy_pass $имя:$server_port;
}

Но когда запрашивается HTTP-сайт, например «http://neverssl.com/», Nginx не отвечает. Любая идея по этому вопросу?

Ivan Shatsky avatar
флаг gr
Схема `http://` использует TCP-порт 80, в то время как ваш серверный блок прослушивает порт 443.
Zareh Kasparian avatar
флаг us
@ИванШацкий. Уважаемый Иван, спасибо за ответ. если честно, я хочу, чтобы и HTTP, и HTTPS направлялись через мой прокси. В прошлый раз вы помогли мне исправить мою конфигурацию для HTTPS. Я был бы признателен, если бы вы могли указать мне, как настроить оба в одном файле конфигурации.
Zareh Kasparian avatar
флаг us
@IvanShatsky, я думаю, должно быть что-то настроено в ssl_preread_server_name;,
Рейтинг:1
флаг gr

Насколько я знаю ssl_preread директива работает только с протоколом HTTPS. Я не знаю, как получить HTTP Хозяин значение заголовка в ngx_stream_core_module. Вы можете попробовать использовать дополнительный сервер блокировать в http контекст, как показано здесь:

http {
    ...
    карта $ http_host $ прокси {
        имена хостов;
        .neverssl.com $http_host;
        ...
    }

    сервер {
        слушать 80;
        резольвер 8.8.8.8;
        место расположения / {
            если ($ прокси = '') { вернуть 403; } # Возвращаем HTTP 403 Запрещено для неуказанных доменов
            proxy_set_header Хост $proxy;
            прокси_перенаправление выключено;
            proxy_connect_timeout 5 с;
            proxy_pass http://$proxy;
        }
    }
}

транслировать {
    ... # конфигурация потока для порта HTTPS 443 здесь
}

Нет необходимости использовать $server_port переменная в блоке потокового сервера, вы слушаете только порт 443, поэтому вы можете просто использовать proxy_pass имя $: 443;

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

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