У меня есть следующая конфигурация прокси-сервера 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 не отвечает. Любая идея по этому вопросу?
Насколько я знаю, директива 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;