[Nginx] Reverse Proxy

반응형

이번글에서는 Nginx의 reverse proxy에 대해 알아보도록 하겠습니다.

1. Reverse Proxy란?

Nginx가 클라이언트로부터 전달받은 요청을 어플리케이션 서버에 전달한 뒤, 어플리케이션 서버가 반환한 결과값을 다시 클라이언트에게 전달하는 방법입니다.

이를 통해 클라이언트는 모든 reqeust의 요청과 응답을 어플리케이션 서버가 아닌 Nginx를 통해 수행하게 됩니다.

2. Setting Reverse Proxy

이번글에서는 nginx와 php 서버를 사용해 Reverse Proxy를 구성해보도록 하겠습니다.

이번글에서 사용할 nginx.conf는 다음과 같습니다.

nginx.conf

events {}

http {

        server {

                listen 80;

                location / {
                        return 200 "Hello From NGINX\n";
                }
        }
}

php server는 단순히 아래의 text를 return 하도록 구성했습니다.

php server

"Hello from NGINX"

또한, Nginx와 PHP 서버를 각각 8888/9999 port로 구동하였습니다.

이제 Reverse Proxy를 사용해 Nginx에 /php로 접근시 9999 port에서 구동되고 있는 php server의 결과값을 return 하도록 변경하겠습니다.

아래와 같이 nginx.conf 파일을 변경합니다.

nginx.conf

events {}

http {

        server {

                listen 80;

                location / {
                        return 200 "Hello From NGINX\n";
                }

                # set reverse proxy
                location /php {
                    # proxy pass uri
                    proxy_pass http://localhost:9999/;
                }
        }
}

주의점으로는 proxy_pass에 입력하는 uri는 반드시 '/'로 끝나도록 작성해야 합니다. 😎

이제 reload 후 nginx의 /php로 접근해보면 아래와 같이 php server에서 결과값을 전달받아 return 하는 것을 확인할 수 있습니다.

nginx에서 proxy pass location으로 /php를 정의했으므로 만약 아래와 같이 '/php/some/url'로 접근하게되면 php server가 전달받은 request uri는 '//some/url'가 됩니다.

3. Setting Custom Header

Nginx를 proxy server로 사용할 경우 application server에 custom header를 전달하는 방법을 고려해야 합니다.

예를 들어 아래와 같이 nginx.conf를 구성한 경우 이 custom header는 client에게만 전달되며, application server에는 전달되지 않습니다.

nginx.conf

events {}

http {

        server {

                listen 80;

                location / {
                        return 200 "Hello From NGINX\n";
                }

                # set reverse proxy
                location /php {
                    # header
                    add_header proxied nginx;

                    # proxy pass uri
                    proxy_pass http://localhost:9999/;
                }
        }
}

따라서 위의 custom header를 application server(PHP)에 전달하기 위해서는, 아래와 같이 proxy_set_header로 선언해야 합니다.

nginx.conf

events {}

http {

        server {

                listen 80;

                location / {
                        return 200 "Hello From NGINX\n";
                }

                # set reverse proxy
                location /php {
                    # proxy header
                    proxy_set_header proxied nginx;

                    # proxy pass uri
                    proxy_pass http://localhost:9999/;
                }
        }
}

참고 자료 : https://www.udemy.com/course/nginx-fundamentals/


반응형

'Nginx' 카테고리의 다른 글

[Nginx] Load Balancer  (0) 2020.08.31
[Nginx] Let's Encrypt - SSL Certificates  (0) 2020.08.31
[Nginx] Hardening Nginx  (0) 2020.08.31
[Nginx] Basic Auth  (0) 2020.08.31
[Nginx] Rate Limiting  (0) 2020.08.31

댓글

Designed by JB FACTORY