이 가이드에서는 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 지시문을 사용하여 트래픽을 리디렉션하지 마십시오. 이로 인해 서버의 예상할 수 없는 동작이 발생할 수 있습니다.
사이트당 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 리디렉션을 수행하는 것입니다.
'SW > 리눅스' 카테고리의 다른 글
Linux : Git 서버 설정 방법, 예제, 명령어 (0) | 2022.03.11 |
---|---|
Linux : Debian : exFAT Drive 마운트 방법, 예제, 명령어 (0) | 2022.03.10 |
Linux : Debian 10 : MySQL (MariaDB) 마스터-슬레이브 복제 설정 방법, 예제, 명령어 (0) | 2022.03.08 |
Linux : USB Drives, SD Cards 포맷 방법, 예제, 명령어 (0) | 2022.03.07 |
Linux : Tar Bz2 File 압축 풀기(추출 하기) 방법, 예제, 명령어 (0) | 2022.03.06 |