Nginx에서 HTTP를 HTTPS로 리디렉션

Nginx에서 HTTP를 HTTPS로 리디렉션

2022-05-17 last update

7 minutes reading nginx
이 설명서에서는 Nginx에서 HTTP 트래픽을 HTTPS로 리디렉션하는 방법에 대해 설명합니다.Nginx는'enginex'로 발음하며 무료, 오픈소스, 고성능의 HTTP와 역방향 프록시 서버로 인터넷상의 일부 최대 사이트의 부하를 처리한다.만약 개발자나 시스템 관리자라면, 정기적으로 Nginx와 접촉할 가능성이 높다.사용자가 수행할 수 있는 가장 일반적인 작업 중 하나는 HTTP 트래픽을 웹 사이트의 보안(HTTPS) 버전으로 리디렉션하는 것입니다.HTTP와 달리 HTTP는 명문 형식으로 요청과 응답을 보내고 되돌려줍니다. HTTPS는 TLS/SSL을 사용하여 클라이언트와 서버 간의 통신을 암호화합니다.HTTP를 통해 HTTPS를 사용하면 많은 장점이 있다. 예를 들어
  • 모든 데이터는 양방향으로 암호화된다.따라서 민감한 정보를 읽을 수 없으면 읽을 수 없다.
  • 구글 크롬과 모든 다른 유행 브라우저는 당신의 사이트를 안전하게 표시할 것입니다.
  • HTTPS에서 HTTP/2 프로토콜을 사용할 수 있어 사이트 성능이 크게 향상되었습니다.
  • 구글은 HTTPS 사이트를 선호한다.만약 HTTPS 서비스를 통과한다면 당신의 사이트 순위는 더욱 좋을 것입니다.
  • Nginx에서 HTTP를 HTTPS로 리디렉션하는 첫 번째 방법은 각 버전의 사이트에 별도의 서버 블록을 구성하는 것입니다.리디렉션 트래픽if directive을 사용하지 않아야 합니다.
    서버의 예측할 수 없는 행동을 초래할 수 있기 때문이다.

    각 사이트의 HTTP를 HTTPS로 리디렉션

    일반적으로 도메인에 SSL 인증서를 설치하면 도메인에 두 개의 서버 블록이 있습니다.첫 번째는 포트 80 사이트의 HTTP 버전이고, 다른 하나는 포트 443의 HTTPS 버전입니다.단일 웹 사이트를 HTTPS로 리디렉션하려면 도메인 구성 파일을 열고 다음과 같이 변경합니다.
    server {
        listen 80;
        server_name  www.;
        return 301 https://$request_uri;
    }
    
    코드를 한 줄 한 줄 분해합니다.
  • listen 80 - 서버 블록은 포트 80에 지정된 도메인에 대한 수신 연결을 수신합니다.
  • server_name www. - 서버 블록의 도메인 이름을 지정합니다.도메인 이름으로 바꿔 주십시오.
  • return 301 https://$request_uri - 트래픽을 사이트의 HTTPS 버전으로 리디렉션합니다.$request_uri 변수는 매개변수를 포함한 전체 원본 요청 URI입니다.
  • 일반적으로 사이트의 HTTPS www 버전을 비 www 버전으로 바꿔야 합니다. 반대로도 마찬가지입니다.추천하는 리셋 방법은 www와 비ww 버전을 위한 단독 서버 블록을 만드는 것입니다.예를 들어 HTTPS www 요청을 비ww로 바꾸려면 다음과 같은 설정을 사용할 수 있습니다:
    server {
        listen 80;
        server_name  www.;
        return 301 https://$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name www.;
    
        # . . . other code
    
        return 301 https://$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name ;
    
        # . . . other code
    }
    
    다시 시작해야 할 프로필을 변경할 때마다 reload the Nginx service
    변경 사항을 적용하려면:
    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 - 이 서버 블록을 일치하지 않는 모든 도메인의 기본값(전체 패키지) 블록으로 설정합니다.
  • server_name _-_는 잘못된 도메인으로 그 어떠한 실제 도메인과도 일치하지 않습니다.
  • return 301 https://$host$request_uri - 트래픽을 적절한 HTTPS 서버 블록으로 리디렉션하고 상태 코드는 301(영구 이동)입니다.$host 변수는 요청한 도메인 이름을 저장합니다.
  • 예를 들어 방문자가 브라우저에서 http://example.com/page2를 열면 Nginx는 요청을 https://example.com/page2로 변경합니다.가능하면 전역 HTTP에서 HTTPS로 리디렉션하는 대신 각 도메인에 대한 리디렉션을 생성하는 것이 좋습니다.

    결론

    Nginx에서 HTTP를 HTTPS로 리디렉션하는 첫 번째 방법은 별도의 서버 블록을 만들고 301 리디렉션을 수행하는 것입니다.질문이나 피드백이 있으면 언제든지 댓글을 달아주세요.(adsbygoogle=window.adsbygoogle | |[]).추진({});