
우분투 서버 nginx 설치후 무료 인증서 letsencrypt 완벽 적용법 쉬운 설명
다른 설명 포스팅이나 글들은 인증서 발급 과정을 건너띄거나 nginx.conf 설정을 먼저해서 햇갈립니다.
nginx 를 설치했다는 가정하에 인증서 발급 과정부터 nginx.conf 설정 방법까지를 순서대로 설명합니다.
$ sudo apt-get install certbot letsencrypt
$ sudo certbot certonly --webroot --agree-tos --no-eff-email --email 당신@이메일 -w /var/www/letsencrypt -d www.당신도메인 -d 당신도메인
생성된 인증서는 /etc/letsencrypt/live/www.당신도메인/ 에 심볼링 링크로 생성됩니다.
이제 생성된 인증서를 nginx에 적용 시키기 위한 작업을 시작합니다.
nginx 서비스를 중지하고 인증서 challenges 용 디렉토리를 다음과 같이 생성합니다.
$ sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge
nginx 에서 challenges 관련 설정을 따로 빼주고 ssl 관련 설정도 안 햇갈리게 따로 빼줍니다.
그전에 실행중인 nginx 서비스를 중지 시켜 주세요. 파란색 부분은 코드입니다.
$ sudo service nginx stop
$ sudo vim /etc/nginx/snippets/letsencrypt_challenges.conf
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
$ sudo vim /etc/nginx/snippets/ssl_settings.conf
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
$ sudo vim /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 당신도메인 당신도메인;
server_tokens off;
include /etc/nginx/snippets/letsencrypt_challenges.conf;
location / {
return 301 https://당신도메인$request_uri;
}
}
server {
server_name 당신도메인;
server_tokens off;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server ipv6only=on;
ssl_certificate /etc/letsencrypt/live/당신도메인/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/당신도메인/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/당신도메인/fullchain.pem;
include /etc/nginx/snippets/ssl_settings.conf;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name 당신도메인;
ssl_certificate /etc/letsencrypt/live/당신도메인/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/당신도메인/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/당신도메인/fullchain.pem;
include /etc/nginx/snippets/ssl_settings.conf;
location / {
return 301 https://당신도메인$request_uri;
}
}
$ sudo service nginx start
모든 과정이 완료되었습니다. 만약 에러가 난다면 오타가 난겁니다.
위 모든 내용은 루트 계정 사용없이 진행되었기 때문입니다.
아, 추가로 인증서 자동 갱신을 위한 cron 을 설정합니다. 파란색은 코드입니다.
$ sudo vim /etc/letsencrypt/letsencrypt_ssl_autorenew.sh
...
systemctl reload nginx
...
$ sudo chmod +x /root/letsencrypt.sh
$ sudo crontab -e
...
20 3 * * * certbot renew --noninteractive --renew-hook /root/letsencrypt.sh
...
끝입니다! 수고하셨습니다!
Leave 우분투 서버 nginx 설치후 무료 인증서 letsencrypt 완벽 적용법 쉬운 설명 to:
Read more #ubuntu posts
Best Posts From pilgoo
We have not curated any of pilgoo's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.