특정 소스 IP를 사용하는 프록시로 nginx


10

정적 파일을 제공하고 Tomcat 인스턴스에 다른 요청을 프록시하기 위해 nginx를 사용하고 있습니다. 문제는 nginx가 Tomcat에 연결할 때 사용할 IP 주소를 선택하는 방법을 모른다는 것입니다.

각 Tomcat 인스턴스는 특정 IP 주소의 HTTP 연결 만 허용합니다. 내 서버에는 이러한 모든 IP가 있습니다. 나는 단지 nginx가 사용할 것을 선택할 수 없습니다.

이것은 내 구성 파일입니다.

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location /integracao/ {
    proxy_pass http://X.X.X.X:9080/integracao/;
}

location /solr/ {
    proxy_pass http://Y.Y.Y.Y:8080/solr/;
}

내 서버에는 A와 B라는 두 개의 IP 주소가있는 하나의 인터페이스가 있습니다. IP A를 사용하여 첫 번째 Tomcat에 연결하고 IP B를 사용하여 Solr에 연결해야합니다.

아무도 그것을하는 방법을 알고 있습니까?

답변:


11

proxy_bind 지시문을 사용하면 다른 소스 IP 주소를 선택할 수 있습니다.

http://wiki.nginx.org/HttpProxyModule#proxy_bind

따라서 구성은 다음과 같습니다.

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location /integracao/ {
    proxy_bind A.A.A.A;
    proxy_pass http://X.X.X.X:9080/integracao/;
}

location /solr/ {
    proxy_bind B.B.B.B;
    proxy_pass http://Y.Y.Y.Y:8080/solr/;
}

내 질문에이 지시어를 사용할 수 없었습니다. 버전 0.8.22부터 사용할 수 있습니다. :) 당신의 도움을 주셔서 감사합니다
msbrogli

1

nginx가 할 수 없다면 항상 netfilter와 SNAT를 사용하여 nginx가 특정 ip를 사용하는 것처럼 보이게 할 수 있습니다.

iptables -t nat -A POSTROUTING -p tcp --dport 9080 -d ip_of_your_backend -j SNAT --to one_of_ips_bound_to_nginx_server

0

nginx 위키 와 특히 ProxyModule 에 대한 부분을 검색 했을 때 관련된 내용을 찾지 못했습니다.

약간의 실험을 할 수 있다면 listen지시문 에서 다른 값을 시도 하고 백엔드 서버의 액세스 로그를 확인하여 IP 주소 nginx의 출처를 확인하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.