지난 포스트에서는 NGINX를 설치해 보았습니다.
이제 우리는 이 웹서버를 적절히 사용하기 위해 설정에 대해 알아보고자 합니다.
0. 들어가기에 앞서서
Apache, NGINX 등 모든 웹서버는 아마 설정에 따라 성능이 천차만별일 것입니다.
이에 어느 설정이 있는지, 그 설정이 어떠한 역할을 하는지에 대해 아는 것이 중요합니다.
이에 이번 포스트는 NGINX가 제공하는 기본 설정에 대해 쉽게 알아보겠습니다.
1. nginx.conf
NGINX의 기본 설정 파일입니다.
[user@server /]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Core Module | |
user | NGINX process가 어느 사용자/그룹 으로 동작될 지의 설정입니다. root로 설정 시 프로세스가 모든 권한을 갖게 되므로 자제 필요 |
worker_processes | 발생되는 이벤트를 처리하는 작업자 프로세스 수에 대한 설정입니다. 보통의 경우 CPU 코어 수로 설정하지만, 감이 안올 땐 auto로 설정하기도 합니다. |
error_log | NGINX의 에러 로그를 저장하는 파일명을 지정합니다. |
pid | NGINX 실행 후 Process ID를 저장하는 경로를 지정합니다. |
events 블록 | |
worker_connections | 하나의 worker process가 동시 처리할 수 있는 커넥션 수입니다. worker_processes가 2이며, 이 설정이 1024로 설정되어있다면 한 번에 2048개의 커넥션을 처리할 수 있습니다. *이 때, 클라이언트와의 커넥션 뿐만 아니라 프록시되는 서버와의 커넥션도 포함된다는 점을 인지해야 합니다. |
HTTP 블록 | |
include | 특정 파일을 포함하는 설정입니다. 기본적으로는 /etc/nginx/mime.types 및 conf 디렉토리의 하위 conf를 포함합니다. 이 mime.types는 특정 파일에 대한 클라이언트의 요청이 들어올 경우, 해당 파일이 어떠한 Content-Type인지를 지정하여 전달합니다. 이에 이 파일은 잘못 설정되어있을 경우 사용자에게 잘못된 응답을 반환할 수 있습니다. (ex. .html 파일이 text/html이 아닌 text/plain 으로 반환 되도록 설정되어있다면 브라우저는 html을 파싱하지 않고 plain text로 보여줍니다.) |
default_type | 이 웹서버의 기본 Content-Type을 지정합니다. 이 웹서버에서 해석할 수 없는 요청이라면 이 설정의 Content-Type을 반환합니다. |
log_format | 작성되는 로그의 포맷을 지정합니다. 사용되는 변수는 이곳에서 확인이 가능합니다. |
access_log | 클라이언트가 access할 때의 로그에 대한 설정입니다. access_log {저장 위치} {log_format명} |
sendfile | 리눅스 서버의 sendfile() 시스템 콜을 사용할지 말지에 대한 설정입니다. 이 설정을 on으로 할 경우, 커널에서 최적화된 알고리즘을 통해 파일 전송 속도가 빨라지며 전송에 대한 메모리 사용이 감소되어 고성능 웹서버 구축에 매우 유용합니다. |
keepalive_timeout | 클라이언트의 접속 유지 시간을 지정합니다. |
tcp_nopush | TCP 연결을 맺은 클라이언트에게 데이터를 즉시 보낼지, 버퍼를 두고 보낼지에 대한 설정입니다. ON으로 설정할 경우, 성능적인 이점이 있을 수 있지만 반환 데이터의 크기가 매우 클 경우 오히려 느려질 수 있으며, SSL/TLS 환경에서는 즉시 보내는 것을 보안적인 이유로 권장되지 않습니다. 그러므로 애플리케이션의 특성과 보안적인 요구사항을 생각하여 고려해야합니다. |
2. default.conf
default.conf는 위의 nginx.conf의 http 블록에서 include 되어 있습니다.
server 블록을 사용해 각각의 도메인에 따라 별도의 서비스를 수행할 수 있습니다.
(같은 웹서버에서 다른 도메인으로 들어올 경우 다른 WAS 혹은 페이지로 보낼 수 있다.)
💡 굳이 default.conf로 만들지 않아도 되며, nginx.conf에 server 블록을 선언해도 상관 없으며, 여러 conf로 나누어도 상관 없다. |
[user@server nginx]# cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
server 블록 | |
listen | 접근 포트를 지정할 수 있습니다. 포트를 80/443 등으로 나누어 각 server 블록에서 처리할 수 있도록 합니다. |
server_name | 호스트 네임을 지정합니다. ex) localhost, www.example.org, www.naver.com |
access_log | 이 server 블록에 설정된 hostname으로 접근 시 access_log의 저장 위치를 별도로 지정합니다. (nginx의 http 블록과 별개) |
error_page | error_page {error_code_list} {error_page} 형태로 구성되며 클라이언트의 HTTP 요청이 error_code_list에 설정된 에러일 경우 지정한 error_page로 보여줍니다. (ex.www.example.org/abcdefg404 로 접근 시 페이지가 없고 HTTP 상태 코드가 404일 경우 /404.html을 보여주도록 설정) |
location |
위의 예시로 들자면, http://example.org/ 로 접근 시 index.html로 초기 페이지를 지정해주는 설정 |
3. 마치며...
기본적인 NGINX의 설정을 확인해 보았습니다.
제 딴엔 쉽게 풀어갈 수 있도록 설명했다고 하는데 잘 이해가 가실지 모르겠습니다.
이후에는 deny/allow 등 조금 더 실무적인 내용에 대해 알아보겠습니다.
'미들웨어 > Nginx' 카테고리의 다른 글
NGINX 요청의 크기를 조절해보자. (client_max_body_size) (0) | 2023.10.01 |
---|---|
NGINX의 HTTP 메서드를 제한해보자 (0) | 2023.05.14 |
HTTP 응답에서 NGINX의 버전 정보를 숨겨보자 (0) | 2023.05.13 |
웹서버 중 NGINX를 설치해보자! (0) | 2023.05.10 |
댓글