TLS 통과 역방향 프록시 역할을 하는 NGINX 인스턴스(nginx/1.17.7)가 있습니다(TLS를 종료하지 않지만 SNI 헤더를 기반으로 원래 TCP 연결을 전달함).
이 구성의 주요 단점은 업스트림 서버가 실제 클라이언트 IP 주소를 얻을 수 없지만 역방향 프록시 IP만 연결 소스로 볼 수 있다는 것입니다.
구현하려고 하는데기관 계약이 문제를 이해하는 업스트림 서버(예: 다른 NGINX 서버)를 가짐으로써 이 문제를 극복하십시오.
모든 업스트림 서버가 동시에 인바운드 프록시 프로토콜을 수락하기 시작하도록 구성되어 있다고 가정하면 구현하기가 매우 쉽습니다.
이 구성은 다음과 같은 경우에 잘 작동합니다.
stream {
map $ssl_preread_server_name $name {
www.site1.com site1_https;
www.site2.com site2_https;
# ...
}
upstream site1_https {
server <site1 internal ip1>:443;
# ...
}
upstream site2_https {
server <site2 internal ip1>:443;
# ...
}
# ...
server {
listen <public ip address>:443
ssl_preread on;
proxy_pass $name;
# This line enable outbound PROXY Protocol to EVERY upstream server!
proxy_protocol on;
}
}
그러나 시간이 지남에 따라 인바운드 프록시 프로토콜을 구현하려는 경우 또는 PROXY 프로토콜 헤더를 디코딩할 수 없는 일부 업스트림 서버가 있는 경우 업스트림 서버의 하위 집합에만 아웃바운드 프록시 헤더를 추가할 수 있는 것이 더 좋습니다. .
이를 달성하기 위해 지금까지 시도한 것은 다른 매핑 변수를 추가하여 Proxy_protocol을 설정해야 하는지 결정하는 것입니다.
stream {
map $ssl_preread_server_name $name {
www.site1.com site1_https;
# ...
}
map $name $proxy_protocol_onoff {
site1_https on;
}
# ...
server {
# ...
proxy_pass $name;
proxy_protocol $proxy_protocol_onoff;
# ...
하지만 다음과 같은 오류가 발생합니다.
invalid value "$proxy_protocol_onoff" in "proxy_protocol" directive, it must be "on" or "off" in /etc/nginx/nginx.conf:147
지시어 사용은 지시어 내부에서 if
허용되지 않으므로 옵션이 아닙니다 server
. proxy_protocol on;
내부 업스트림 지시문을 정의하는 것도 허용되지 않습니다 .
NGINX에서 이 동작이 가능합니까? 아니면 유일한 방법은 HAProxy나 이와 유사한 것으로 전환하는 것입니까?