비전공자도 이해할 수 있는 Nginx 입문/실전
separate-config-with-include
✅ 설정 파일을 분리해야 하는 이유
지금까지 셋팅된 설정 관련 코드만으로도 꽤 복잡해졌다.
default.conf
server {
server_name jscode.p-e.kr;
location / {
root /usr/share/nginx/nginx-frontend-react/dist;
index index.html;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/jscode.p-e.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/jscode.p-e.kr/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 {
server_name admin.jscode.p-e.kr;
location / {
root /usr/share/nginx/nginx-frontend-next/out;
index index.html;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/admin.jscode.p-e.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/admin.jscode.p-e.kr/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 = jscode.p-e.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name jscode.p-e.kr;
return 404; # managed by Certbot
}
server {
if ($host = admin.jscode.p-e.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name admin.jscode.p-e.kr;
return 404; # managed by Certbot
}
서비스가 커지면 커질수록 아래 설정 파일도 점점 더 거대해질 것이다. 한 파일에 너무 많은 코드가 담겨있으면 가독성이 떨어지고 유지보수가 어려워진다. 이걸 해결하기 위해 여러 파일로 분리해서 설정 파일들을 관리해보자.
✅ 설정 파일 분리해서 관리하기
- 폴더 만들기
$ cd /etc/nginx/conf.d
$ sudo mkdir websites
- 설정 파일 분리하기
/etc/nginx/conf.d/default.conf 파일에 있는 코드 내용을 각 파일에 분리해서 넣는다.
/etc/nginx/conf.d/websites/jscode.p-e.kr.conf
server {
server_name jscode.p-e.kr;
location / {
root /usr/share/nginx/nginx-frontend-react/dist;
index index.html;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/jscode.p-e.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/jscode.p-e.kr/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 = jscode.p-e.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name jscode.p-e.kr;
return 404; # managed by Certbot
}
/etc/nginx/conf.d/websites/admin.jscode.p-e.kr.conf
server {
server_name admin.jscode.p-e.kr;
location / {
root /usr/share/nginx/nginx-frontend-next/out;
index index.html;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/admin.jscode.p-e.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/admin.jscode.p-e.kr/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 = admin.jscode.p-e.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name admin.jscode.p-e.kr;
return 404; # managed by Certbot
}
default.conf 파일에서 분리한 설정 파일 불러오기/etc/nginx/conf.d/default.conf
include conf.d/websites/jscode.p-e.kr.conf;
include conf.d/websites/admin.jscode.p-e.kr.conf;
- 기준 경로가
/etc/nginx이기 때문에 위와 같이 주소를 입력했다.
- 변경된 Nginx 설정 파일 반영하기
# Nginx 설정 파일 중 문법 에러가 있는 지 체크
$ sudo nginx -t
# Nginx의 설정 파일이 바뀐 경우 아래 명령어를 입력해줘야 설정 파일이 반영된다.
$ sudo nginx -s reload
- 잘 작동하는 지 확인하기
- include를 한 줄 삭제해보기
/etc/nginx/conf.d/default.conf
include conf.d/websites/jscode.p-e.kr.conf;
include conf.d/websites/admin.jscode.p-e.kr.conf;
# Nginx 설정 파일 중 문법 에러가 있는 지 체크
$ sudo nginx -t
# Nginx의 설정 파일이 바뀐 경우 아래 명령어를 입력해줘야 설정 파일이 반영된다.
$ sudo nginx -s reload
- 작동 안 하는 지 확인하기
- 와일드카드(*)를 활용해 설정 간결하게 추가하기
/etc/nginx/conf.d/default.conf
include conf.d/websites/*.conf;
# Nginx 설정 파일 중 문법 에러가 있는 지 체크
$ sudo nginx -t
# Nginx의 설정 파일이 바뀐 경우 아래 명령어를 입력해줘야 설정 파일이 반영된다.
$ sudo nginx -s reload
- 잘 작동하는 지 확인하기