작은숲:위키노트/Nginx HTTPS 설정
Nginx에서 HTTPS 연결을 설정하는 것은 server 블럭에서 한다. 아파치와 비교해서 크게 다른 것은 없다. 다만 SSL 인증서 설정할 때 차이가 있으니 이것만 주의하면 된다.
server {
listen 80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}server {
listen 443 ssl;
server_name www.example.com;
root /var/www/example;
access_log /var/log/nginx/example-access.log main;
ssl on;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/pki/ssl-unified.crt;
ssl_certificate_key /etc/pki/ssl.key;
}
첫 번째 server 블럭은 80 포트, 즉 HTTP로 접속하면 HTTPS로 보내준다. 실제 SSL 적용은 두 번째 server 블럭에서 하고 있다.
아파치에서는 mod_ssl 확장 기능을 올려야하고 서버에서 SSL에 대한 설정을 따로 해야 하지만 Nginx에서는 server 블럭에서 listen 443 ssl;과 ssl on;을 설정하면 된다. 아파치의 가상 호스트 설정에서 SSL 설정은 대략 아래와 비슷하다.
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/ssl.crt
SSLCertificateKeyFile /etc/pki/ssl.key
SSLCertificateChainFile /etc/pki/sub.class1.server.ca.pem
SSLCACertificateFile /etc/pki/startssl/ca.pem
이처럼 아파치에서는 중계자 인증서(sub.class1.server.ca.pem)와 CA 인증서(ca.pem)를 따로 설정하지만 Nginx에서는 서버 인증서(ssl.crt)에 함께 넣어서 설정한다. 그래서 Nginx에서 SSL 설정을 하기 위해서는 이 세 인증서를 합해야 한다.
# cat ssl.crt sub.class1.server.ca.pem ca.pem > ssl-unified.crt
이 부분만 주의하면 크게 문제되는 부분은 없다.