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

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

  stream {
 

    
    map $ssl_preread_server_name $name {
    hostnames;
   .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;  #<-------
    
}


server {

    resolver 8.8.8.8;
    listen 443;
    ssl_preread on;
    proxy_connect_timeout 5s;
    proxy_pass $name:$server_port;
}

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

0
задан 29 September 2021 в 12:25
1 ответ

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

http {
   ...
    map $http_host $proxy {
        hostnames;
       .neverssl.com    $http_host;
       ...
    }

    server {
        listen 80;
        resolver 8.8.8.8;
        location / {
            if ($proxy = '') { return 403; } # Return HTTP 403 Forbidden for unlisted domains
            proxy_set_header Host $proxy;
            proxy_redirect off;
            proxy_connect_timeout 5s;
            proxy_pass http://$proxy;
        }
    }
}

stream {
   ... # stream configuration for HTTPS port 443 here
}

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

1
ответ дан 1 October 2021 в 10:30

Теги

Похожие вопросы