
nginx.conf 파일에 다음 구성을 사용하여 Nginx 서버를 L4 프록시(스트림 모듈이 포함된 정방향 프록시)로 설정했습니다.
stream {
resolver 8.8.8.8;
server {
listen 443;
ssl_preread on;
proxy_connect_timeout 5s;
proxy_pass $ssl_preread_server_name:$server_port;
}
}
위의 구성으로 모든 것이 잘 작동합니다. 하지만 프록시 서버로 전달되는 URL의 액세스를 제한하고 싶다고 가정해 보겠습니다. IP 주소를 제한하는 것이 아니라 URL 이름을 사용하여 제한합니다.
나는 다음 구성 파일을 조사하고 설정했으며 어떻게든 내 프록시로 전달되는 URL을 제어할 수 있었습니다.
그런데 문제는 여기서부터 시작됩니다. 대규모 웹사이트가 호출되면 이면에 많은 링크나 하위 도메인이 로드되어 있고 통과할 수 있는 URL을 제한했으며 와일드카드 하위 도메인이 스트림 블록에서 작동하지 않는다는 사실을 알고 있기 때문에 요청한 웹사이트를 로드할 수 없습니다. 완전히.
도메인의 하위 도메인에 대한 와일드카드를 지원하기 위해 스트림 블록에서 이를 사용하는 솔루션이 있습니까? 내 새로운 구성은 다음과 같습니다.
stream {
map $ssl_preread_server_name $name {
ipchicken.com ipchicken.com;
www.bbc.com www.bbc.com;
www.bbc.co.uk www.bbc.co.uk;
bbci.co.uk bbci.co.uk;
}
server {
resolver 8.8.8.8;
listen 443;
ssl_preread on;
proxy_connect_timeout 5s;
proxy_pass $name:$server_port;
}
}
events {
}
답변1
키워드를 찾고 계십니다 hostnames
. 이 키워드를 사용하면 도메인 *.example.com
에 대한 와일드카드 항목으로 사용할 수 있습니다 . example.com
마찬가지로 지시어와 마찬가지로 및 둘 다에 server_name
사용할 수 있습니다 ..example.com
example.com
*.example.com
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;
}
대안으로 블록 내에서 정규 표현식을 사용할 수 있습니다 map
.
map $ssl_preread_server_name $name {
# covers 'bbc.com', 'www.bbc.com' and 'static.bbc.com':
~^(?:www\.|static\.)?bbc\.com$ $ssl_preread_server_name;
...
}