1) Reverse proxy 란
역방향 프록시는 클라이언트 요청을 가져와서 하나 이상의 프록시 서버에 요청을 보내고 응답을 가져오고 서버의 응답을 클라이언트에 전달하는 서비스입니다.
성능과 확장성 때문에 NGINX는 HTTP 및 비 HTTP 서버의 역방향 프록시로 자주 사용됩니다. 일반적인 역방향 프록시 구성은 Nginx를 Node.js, Python 또는 Java 애플리케이션 앞에 배치하는 것입니다.
Nginx를 역방향 프록시로 사용하면 다음과 같은 몇 가지 추가적인 이점을 얻을 수 있습니다.
2) Reverse proxy 장점
로드 밸런싱 : Nginx는 클라이언트의 요청을 프록시 서버에 분산하기 위해 로드 밸런싱을 수행하여 성능, 확장성 및 신뢰성을 향상시킬 수 있습니다.
캐싱 : Nginx를 역방향 프록시로 사용하면 미리 렌더링된 버전의 페이지를 캐시하여 페이지 로드 시간을 단축할 수 있습니다. 이 기능은 프록시 서버의 응답에서 수신한 콘텐츠를 캐싱하고 이 콘텐츠를 사용하여 매번 동일한 콘텐츠를 프록시 서버에 연결할 필요 없이 클라이언트에 응답하는 방식으로 작동합니다.
SSL 터미네이션 : Nginx는 클라이언트와의 연결에 대한 SSL 끝점 역할을 할 수 있습니다. 수신 SSL 연결을 처리 및 해독하고 프록시 서버의 응답을 암호화합니다.
압축 : 프록시 서버가 압축된 응답을 보내지 않는 경우 클라이언트로 보내기 전에 응답을 압축하도록 Nginx를 구성할 수 있습니다.
DDoS 공격 완화 : 수신 요청과 단일 IP 주소당 연결 수를 일반 사용자에게 일반적인 값으로 제한할 수 있습니다. 또한 Nginx를 사용하면 클라이언트 위치와 "User-에이전트" 및 "Referer"와 같은 요청 헤더 값을 기준으로 액세스를 차단하거나 제한할 수 있습니다.
3) Reverse proxy 구성
Ubuntu, CentOS 또는 Debian 서버에 Nginx가 설치되어 있다고 가정합니다
#파일 오픈 /etc/nginx/nginx.conf #아래와 같은 코드 확인 #/etc/nginx/conf.d 폴더 아래에 있는 *.conf파일을 Include 한다 #CentOS include /etc/nginx/conf.d/*.conf; #/etc/nginx/sites-enabled/ 폴더 아래에 있는 모든 파일을 Include 한다 #Ubuntu 및 Debian include /etc/nginx/sites-enabled/*; #파일을 오픈 include /etc/nginx/sites-enabled/default
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location /api/ { #<========요청될 주소 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host @http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:5000/; #<=====포워딩될 주소 proxy_redirect off; } }
nginx 재가동
nginx -s reload
http://주소/api 요청시 => http://localhost:5000/로 호출 된다.
옵션location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }
proxy_http_version 1.1 - 프록시를 위한 HTTP 프로토콜 버전을 정의합니다. 기본적으로 1.0으로 설정됩니다. 웹 소켓 및 활성 연결을 유지하려면 버전 1.1을 사용해야 합니다.
proxy_cache_bypass $http_upgrade - 캐시에서 응답을 가져오지 않을 조건을 설정합니다.
Upgrade $http_upgrade 및 Connection "upgrade" - 응용프로그램이 웹 소켓을 사용하는 경우 헤더 필드가 필요합니다.
Host $host - 다음 우선 순위의 $host 변수에는 요청 라인의 호스트 이름 또는 호스트 요청 헤더 필드의 호스트 이름 또는 요청과 일치하는 서버 이름이 포함됩니다.
X-Real-IP $remote_addr - 실제 방문자 원격 IP 주소를 프록시 서버로 전달합니다.
X-Forwarded-$proxy_add_x_forwarded_for - 클라이언트가 프록시 처리한 모든 서버의 IP 주소를 포함하는 목록입니다.
X-Forwarded-Proto $scheme - HTTPS 서버 블록 내에서 사용할 경우 프록시 서버의 각 HTTP 응답이 HTTPS로 다시 작성됩니다.
X-Forwarded-Host $host - 클라이언트가 요청한 원래 호스트를 정의합니다.
X-Forwarded-Port $server_port - 클라이언트가 요청한 원래 포트를 정의합니다
'node.js & nginx' 카테고리의 다른 글
7. Nginx 로드밸런싱 (0) | 2023.05.19 |
---|---|
6. Node.js Worker Thread (0) | 2023.05.19 |
4. 배포 및 pm2 서비스 등록 (0) | 2023.05.17 |
3. Node.js 설치 방법 3가지 (0) | 2023.05.17 |
2. Nginx 설치 (0) | 2023.05.17 |
댓글