반응형
reverse proxy ?
- 외부에서 내부 서버가 제공하는 서비스에 접근할 경우, proxy server(nginx)를 통해서 들어오는 방식
- 클라이언트 -> 프록시 -> 서버
reverse proxy 왜 사용?
- 사용자 요청 분산 역할(로드밸런싱)
- 서버로 직접 접근하는 것을 막는다. (IP및 포트 숨김 가능)
예) http://www.test.com/web1 접근 시 1.2.3.4:8080 으로, http://www.test.com/web2 접근시 1.2.3.4:8081 로 연결해줄 수 있게 함
forward proxy는?
- 일반적인 프록시
- 클라이언트 -> 프록시 -> 서버
- 정해진 사이트만 연결하게 설정하는 등 웹 사용 환경을 제한할수 있으므로 보안이 매우 중요한 기업 환경등에서 많이 사용함
NGINX에서 설정하기
설정파일 : /etc/nginx/sites-enabled/default
파일을 열어보면 대략 이렇게 생겼다.
기본적인 설정은 아래와 같다.
location / { //경로 설정
proxy_pass http://123.45.678.90:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HOST $http_host;
}
- proxy_pass
기본 설정. 들어온 요청을 어디로 포워드 해줄건지 설정함.
현재 서버에 / 로 시작하는 path로 접근하면, http://123.456.78.90:8080 으로 접근하게 됨. - proxy_set_header
프록시 서버에 특정 헤더를 전달하기 위한 설정 - X-Forwarded-For
HTTP 프록시를 통해 웹 서버에 접속하는 클라이언트의 IP 주소를 식별하는 표준 헤더
클라이언트와 서버 중간에서 트래픽이 프록시나 로드 밸런서를 거치면, 서버 접근 로그에는 프록시나 로드 밸런서의 IP 주소만을 담고 있다.
클라이언트의 원 IP 주소를 보기위해 X-Forwarded-For 요청 헤더가 사용된다.
Apache는 ProxyPass를 사용할 경우 기본으로 X-Forwarded-For 헤더를 구성하지만 nginx는 직접 구성해줘야 한다. - $proxy_add_x_forwarded_for
$http_x_forwarded_for,$remote_addr 와 동일함
클라이언트의 IP 주소를 담고있는 $remote_addr 를 X-Forwarded-For Header의 값으로 추가해 줌 - HOST $http_host;
HTTP Request 의 Host 헤더값
http 요청이 들어 왔을 시 호스트 명
location /web1 {
proxy_pass http://1.2.3.4:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HOST $http_host;
}
location /web2 {
proxy_pass http://1.2.3.4:8081;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HOST $http_host;
}
반응형