Skip to content

Nginx 설정

Ubuntu 22.04 에서 nginx 를 설치했을때의 기준으로 설명합니다.

nginx 설치
sudo apt update
sudo apt install nginx


/etc/nginx/sites-enabled 로 이동후 your-domain.conf 로 아래와 같은 내용의 파일을 만듭니다. (설정 파일의 확장자를 .conf로 하지 않아도 동작합니다.)

nginx 설정
server {
    listen 80;
    server_name your-domain.com www.your-domain.com;

    access_log /var/log/nginx/your-access.log;
    error_log  /var/log/nginx/your-error.log;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        if ($request_uri ~* \.(css|js|ico|gif|png|jpe?g|svg)$) {
            access_log off;
        }
    }
}


nginx 설정이 잘됐는지 확인하기 위하여 nginx 를 실행합니다.

nginx 시작
sudo systemctl restart nginx


Let's Encrypt SSL을 적용하기 위해 nginx용 certbot 을 설치합니다.

certbot 설치
sudo apt update
sudo apt install certbot python3-certbot-nginx


certbot을 사용하여 SSL 인증서를 획득합니다. 이 과정에서는 도메인 소유권을 증명해야 합니다.

sudo certbot --nginx -d your-domain.com -d www.your-domain.com


/etc/nginx/sites-enabled/your-domain.conf 파일의 내용이 아래와 비슷하게 수정되었는지 확인합니다.

수정된 nginx 설정 파일
server {
    server_name your-domain.com www.your-domain.com;

    access_log /var/log/nginx/your-access.log;
    error_log  /var/log/nginx/your-error.log;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        if ($request_uri ~* \.(css|js|ico|gif|png|jpe?g|svg)$) {
            access_log off;
        }
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = your-domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = www.your-domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;

    server_name your-domain.com www.your-domain.com;
    return 404; # managed by Certbot
}


nginx 설정이 수정 됐으므로 nginx 를 다시 실행합니다.

nginx 시작
sudo systemctl restart nginx


브라우저에서 https://your-domain.comhttps://www.your-domain.com 이 잘 접속되는지 확인합니다.