SW/리눅스

Nginx : HTTP에서 HTTPS 로 리다이렉션 방법, 예제, 명령어

얇은생각 2022. 3. 9. 07:30
반응형

이 가이드에서는 HTTP 트래픽을 Nginx의 HTTPS로 리디렉션하는 방법을 설명합니다.

"엔진 x"로 발음되는 Nginx는 인터넷에서 가장 큰 일부 사이트의 부하를 처리하는 무료 오픈 소스 고성능 HTTP 및 리버스 프록시 서버입니다.

개발자나 시스템 관리자라면 Nginx와 정기적으로 거래할 가능성이 높습니다. 가장 일반적인 작업 중 하나는 HTTP 트래픽을 웹 사이트의 보안(HTTPS) 버전으로 리디렉션하는 것입니다.

요청 및 응답이 일반 텍스트로 전송되고 반환되는 HTTP와 달리 HTTPS는 TLS/SSL을 사용하여 클라이언트와 서버 간의 통신을 암호화합니다.

HTTP를 통해 HTTPS를 사용하면 다음과 같은 여러 가지 이점이 있습니다.

모든 데이터는 양방향으로 암호화됩니다. 따라서 중요한 정보를 가로채면 읽을 수 없습니다.

Google Chrome 및 다른 모든 인기 브라우저는 웹 사이트를 안전한 것으로 표시합니다.

HTTPS를 사용하면 HTTP/2 프로토콜을 사용할 수 있으므로 사이트 성능이 크게 향상됩니다.

구글은 HTTPS 웹사이트를 선호합니다. HTTPS를 통해 서비스를 제공하는 경우 사이트의 순위가 더 높아집니다.

HTTP를 Nginx에서 HTTPS로 리디렉션하기 위해 선호하는 방법은 사이트의 각 버전에 대해 별도의 서버 블록을 구성하는 것입니다. if 지시문을 사용하여 트래픽을 리디렉션하지 마십시오. 이로 인해 서버의 예상할 수 없는 동작이 발생할 수 있습니다.

 

 

Nginx : HTTP에서 HTTPS 로 리다이렉션 방법, 예제, 명령어

 

 

사이트당 HTTP를 HTTPS로 리디렉션

일반적으로 SSL 인증서가 도메인에 설치되면 해당 도메인에 대한 두 개의 서버 블록이 있습니다. 첫 번째는 포트 80의 사이트 HTTP 버전에 대한 것이고 다른 하나는 포트 443의 HTTPS 버전에 대한 것입니다.

단일 웹 사이트를 HTTPS로 리디렉션하려면 도메인 구성 파일을 열고 다음을 변경합니다.

server {
    listen 80;
    server_name jjeongil.com www.jjeongil.com;
    return 301 https://jjeongil.com$request_uri;
}

 

 

코드 줄을 한 줄씩 세분해 보겠습니다.

수신 80 - 서버 블록은 지정된 도메인에 대한 포트 80의 수신 연결을 수신합니다.

server_name jjeongil.com www.jjeongil.com - 서버 블록의 도메인 이름을 지정합니다. 도메인 이름으로 바꾸어야 합니다.

return 301 https://jjeongil.com$request_uri - 트래픽을 사이트의 HTTPS 버전으로 리디렉션합니다. $request_uri 변수는 인수를 포함한 전체 원래 요청 URI입니다.

일반적으로 사이트의 HTTPS www 버전을 비 www 또는 그 반대로 리디렉션해야 합니다. 리디렉션을 수행하는 권장 방법은 www 및 non-www 버전 모두에 대해 별도의 서버 블록을 만드는 것입니다.

예를 들어 HTTPS www 요청을 non-www로 리디렉션하려면 다음 구성을 사용합니다.

server {
    listen 80;
    server_name jjeongil.com www.jjeongil.com;
    return 301 https://jjeongil.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.jjeongil.com;

    # . . . other code

    return 301 https://jjeongil.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name jjeongil.com;

    # . . . other code
}

 

 

구성 파일을 변경할 때마다 Nginx 서비스를 다시 시작하거나 다시 로드해야 변경 내용을 적용할 수 있습니다.

sudo systemctl reload nginx

 

 

 

모든 사이트를 HTTPS로 리디렉션

서버에 호스팅되는 모든 웹 사이트가 HTTPS를 사용하도록 구성되어 있고 각 사이트에 대해 별도의 HTTP 서버 블록을 생성하지 않으려는 경우 단일 캐치 올 HTTP 서버 블록을 만들 수 있습니다. 이 블록은 모든 HTTP 요청을 적절한 HTTPS 블록으로 리디렉션합니다.

방문자를 사이트의 HTTPS 버전으로 리디렉션할 단일 캐치 올 HTTP 블록을 만들려면 Nginx 구성 파일을 열고 다음을 변경합니다.

server {
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name _;
	return 301 https://$host$request_uri;
}

 

 

코드 라인을 라인별로 분석해 보겠습니다.

listen 80 default_server - 이 서버 블록을 일치하지 않는 모든 도메인에 대한 기본(캐치-all) 블록으로 설정합니다.

server_name _ - _는 실제 도메인 이름과 일치하지 않는 잘못된 도메인 이름입니다.

return 301 https://$host$request_uri - 트래픽을 상태 코드 301(영구 이동)을 사용하여 해당 HTTPS 서버 블록으로 리디렉션합니다. $host 변수는 요청의 도메인 이름을 보유합니다.

예를 들어, 방문자가 브라우저에서 http://example.com/page2을 열면, Nginx는 요청을 https://example.com/page2으로 리디렉션합니다.

가능하면 글로벌 HTTP에서 HTTPS로의 리디렉션 대신 도메인별로 리디렉션을 생성하는 것이 좋습니다.

Nginx에서 HTTP를 HTTPS로 리디렉션하는 선호하는 방법은 별도의 서버 블록을 만들고 301 리디렉션을 수행하는 것입니다.

반응형