티스토리 뷰
저는 기존에 사용하는 도메인에 대한 ssl 을 가지고 있다는 전제하에 nginx 에 ssl 적용하는 포스팅하려고 합니다.
*.abc.com 이란 도메인을 가지고 있고 비밀번호가 설정 되어있습니다.
보통 도메인에 대한 ssl 을 구매하시면 웹서버 종류별로 SSL 파일을 제공해줍니다.
pem, p7b, pfx, keystore 등등의 파일들
nginx 는 cert.pem, key.pem 이 두 파일을 가지고 있으면 됩니다.
key.pem 은 개인키가 설정되어 있는 파일입니다.
그리고 cert.pem 파일을 열어보면
발급받은 도메인 인증서와 체인인증서의 내용이 합쳐져 있는 것을 확인 할 수 있습니다.
(* 만약 cert.pem 이 제공되지 않았다면 도메인인증서와 체인인증서를 합쳐서 만들어줘야하는 작업이 필요할 수 있습니다.)
NGINX + SSL 적용
cert.pem과 key.pem 인증서 관련 파일을 적절한 위치에 복사합니다.
저는 관리하기 쉽게 nginx 폴더 안에 위치시켰습니다.
/etc/nginx/ssl/
그리고 설정파일을 vi 에디터로 열어 도메인에 대한 ssl 설정을 해줍니다.
(저는 conf.d 하위 폴더에 default.conf 에 작성 되어있습니다. 사용자 마다 설정파일 위치가 다를 수 있습니다.)
[root@localhost conf.d]# vi default.conf
server {
listen 443 ssl;
server_name blog.abc.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_password_file /etc/nginx/ssl/pass.txt;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
server {
listen 80;
server_name blog.abc.com;
#return 301 https://blog.abc.com;
location / {
return 301 https://$host$request_uri;
}
}
위와 같이 443 포트에 대한 설정을 진행합니다.
cert.pem 과 key.pem 의 위치를 지정해줍니다.
제 key.pem 은 비밀번호가 적용되어있어 ssl_password_file 옵션을 사용하여 비밀번호를 자동으로 인지하게 해줬습니다.
* 일반 텍스트 파일로 작성해줘야 합니다. 아파치에서 쓰듯이 sh 파일로 작성했는데 nginx 에서 올바르게 암호를 풀지 못했습니다.
pass.txt 에 대한 내용은 암호를 바로 작성해주면 됩니다.
[root@localhost ssl]# cat pass.txt
비밀번호
그리고 이제 80 포트로 들어오는 리퀘스트도 443으로 리다이렉트 되게끔 설정해줍니다.
(http 로 들어왔던 리퀘스트도 같이 던져주기 위해 $request_uri 로 설정했습니다. return 301 로 /index 에만 보내버리면 사용자가 요청한 것들이 모두 날라가기 때문입니다.)
server {
listen 80;
server_name blog.abc.com;
#return 301 https://blog.abc.com;
location / {
return 301 https://$host$request_uri;
}
}
위와 같이 다 작성했으면 conf 파일을 저장하고
nginx 테스트를 진행해봅니다.
[root@localhost nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
문제가 없다면 위와같이 successful 메세지를 볼 수 있고 nginx 를 재구동시키면 잘 적용됩니다.
설정 작성에 문제가 있다면 관련된 오류 메세지가 나올 것 입니다.
만약 key.pem 에 비밀번호를 제거하고 싶다면 아래의 명령어를 사용하면 됩니다.
그러면 conf 파일에서 사용했던 ssl_password_file 비밀번호 옵션을 주석처리해도 됩니다.
[root@localhost ssl]# openssl rsa -in key.pem -out nokey.pem
OPENSSL 사용법 참고
'DevOps > NginX' 카테고리의 다른 글
[Nginx] 특정 ip 허용/차단하기. (0) | 2024.09.27 |
---|---|
[NGINX] 다중 도메인 간단하게 설정하기. (site-* 안만듬) (0) | 2023.03.31 |