[Nginx] Nginx HTTP redirect 및 포트포워딩(Port Forwarding) 설정



Nginx 에서 HTTP 프로토콜에 대하여 HTTPS로 redirect 설정하는 것과 다른 포트로 포트포워딩(Port Forwarding) 하는 설정 내용을 정리합니다.


테스트 환경

Nginx를 설치 및 HTTPS 설정된 환경에서 진행을 하고 위 링크의 포스트가 선행되어야 하겠습니다.


Nginx HTTP redirect to HTTPS

HTTP redirect는 HTTP(비암호화 프로토콜)로 접속했을 때 자동적으로 HTTPS 프로토콜로 서비스되도록 리다이렉트 처리를 하는 것입니다.

일반적으로 사이트 접속 시 jackerlab.com 이렇게 도메인을 치고 사이트 접속을 하면 https://jackerlab.com과 같은 형태의 HTTP 프로토콜로 접속이 됩니다.

사이트를 항상 HTTPS로 서비스하기 위하여 HTTPS로 리다이렉트 처리하여 HTTPS로 접속을 전환/유도하는 것입니다.

Redirect 설정은 /etc/nginx/nginx.conf 파일에서 설정하고 Nginx 서비스를 구동하면 되고 HTTPS(443) 설정이 사전에 되어 있어야 합니다.

[root@jackerlab ~]# vim /etc/nginx/nginx.conf
... (앞부분 생략)
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        #server_name    _;
        server_name     apps.jackerlab.com;
        root         /usr/share/nginx/html;
        charset utf-8;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

        return  301 https://$host$request_uri;   # HTTP to HTTPS redirect
    }
... (뒷부분 생략 - 뒷부분의 HTTPS 설정이 되어 있어야 함)
[root@jackerlab ~]# 

위 설정은 마지막 부분에 1줄 추가가 된 상태고 301 HTTP 응답 코드에 의하여 https://도메인으로 redirect 처리 해주는 설정입니다.


Nginx 포트 포워딩 설정

웹 어플리케이션을 작성했을 때 HTTPS 통신을 하기 위하여 포트 포워딩을 사용할 수 있겠습니다.

예를 들어 React, Django 등의 웹서버가 별도로 구동되어 있을 경우, HTTPS인 443 포트에 React(3000), Django(8000) 매핑을 하여 HTTPS 프로토콜로 웹 서비스를 제공할 수 있겠습니다.

이번 테스트에서는 React(3000) 가 구동되었다고 가정하고 포트포워딩 설정을 해보겠습니다.

Redirect 설정과 연계되어 있고 최종적으로는 아래와 같은 구조가 되겠습니다.

  • https://jackerlab.com 접근
  • https://jackerlab.com > (redirect) > https://jackerlab.com
  • https://jackerlab.com > (port forward) > https://jackerlab.com:3000

최종적으로 사이트를 접속하면 HTTPS 암호화 통신 환경에서 React(3000) 어플리케이션에 접속이 되는 것입니다.

/etc/nginx/nginx.conf 파일에서 설정하고 Nginx 서비스를 구동하면 되고 HTTPS(443) 설정 및 React(3000) 서비스 구동이 사전에 되어 있어야 합니다.

[root@jackerlab nginx]# cat nginx.conf
... (앞부분 생략 - HTTP(80) 설정 부분)
# Settings for a TLS enabled server.
    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
	server_name localhost;
#        server_name  apps.jackerlab.com;
        root         /usr/share/nginx/html;

	ssl_certificate /etc/letsencrypt/live/apps.jackerlab.com/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/apps.jackerlab.com/privkey.pem;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers PROFILE=SYSTEM;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
	    proxy_pass http://localhost:3000; # 포트 포워딩 설정

        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
... (뒷부분 생략)
[root@jackerlab nginx]# 

위 설정은 중간 location 부분에 1줄 추가가 된 상태고 HTTPS(443) 접속 시, 프록시 기능으로 3000 포트로 포워딩을 하겠다는 설정입니다.

최종적으로 설정 된 결과는 아래와 같고 HTTPS(443) 과 인증서 적용(자물쇠)이 정상적으로 된 후, React(3000) 웹 서비스로 정상 접속된 것을 확인할 수 있습니다.

이미지에 대체텍스트 속성이 없습니다; 파일명은 image-2-1024x582.png 입니다.



1 thought on “[Nginx] Nginx HTTP redirect 및 포트포워딩(Port Forwarding) 설정”

Leave a Comment