Skip to content

배포시리즈(1) Nginx

Junho Lee edited this page Nov 21, 2019 · 3 revisions

배포시리즈(1) - Nginx

  • 기본 설정파일 경로는 /etc/nginx/nginx.conf
# 이 설정은 worker process가 root권한으로 실행되게 한다. 파일 시스템의 모든 권한을 얻게되므로 보안상 위험하다.
user root;
# 워커 프로세스는 CPU core 수에 따라 설정해야한다. nginx는 그 이상의 이득을 주지는 않는다.
# 기본값은 1이지만 CPU가 2개이상의 코어를 갖는다면 이 값을 증가시키도록 권장한다.
# auto - 자동적으로 계산한다.
worker_processes auto; 
pid /run/nginx.pid;


# 연결 처리에 영향을주는 지시문이 지정되는 구성 파일 컨텍스트를 제공한다.
events {
  # 워커 하나가 몇명의 유저가 서비스를 할지 결정한다.
  # max clients = worker_connections * worker_processes
  # max clients 는 시스템에서 연결가능한 소켓 개수에 따라 제한한다. (~64k)
 	worker_connections 1024;
	# multi_accept on;
  
  # 테스팅 환경을 위해 각 스레드마다 많은 클라이언트를 서비스하도록 최적화한다.
  # use epoll;
  
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# Nginx의 버전을 숨길것인가에 대한 옵션이다. 보안상 주석을 제거하여 설정하는 것이 좋다.
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

  # include 는 이름 그대로 특정 파일을 포함시키는 역할을 한다.
  # include 지시어가 있는 위치에 해당 파일의 내용을 삽입한다.
	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

  # 참조 1에 따르면 HDD에 대한 I/O 성능을 높이기 위해 off 할 수도 있다.
  # ex) off;
  access_log /var/log/nginx/access.log;
  
  # 에러 로그 파일을 저장할 위치
  # 참조 1에 따르면 끝에 crit 옵션을 주어서 성능을 높일 수 있다고 한다.
  # ex) error_log /var/log/nginx/error.log crit;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  # 응답이 없는 client와의 연결을 끊는 것을 허용함으로써 이를통해 메모리를 비울 수 있다.
  reset_timedout_connection on;
  
  # request timed out -- default 60
  # 참조 1에 의하면 10
  client_body_timeout 60;
  
  
  # 서버는 이 시간후에 커넥션을 종료함 -- 기본값 75
  keepalive_timeout 30;
  
	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}
  • Nginx 의 설정파일은 크게 4가지 지시어블록을 가지고 있다.

    http 블록

    http 블록은 이후에 소개할 server, location의 루트 블록이라고 할 수 있고, 여기서 설정된 값을 하위 블록들은 상속한다. http 블록은 여러개를 사용할 수 있지만 관리상의 이슈로 한번만 사용하는 것을 권장한다.

    http, server, location 블록은 계층구조를 가지고 있다. 많은 지시어가 각각의 블록에서 동시에 사용할 수 있는데, http의 내용은 server의 기본값이 되고, server의 지시어는 location의 기본값이 된다. 그리고 하위의 블록에서 선언된 지시어는 상위의 선언을 무시하고 적용된다.

    server 블록

    server 블록은 하나의 웹사이트를 선언하는데 사용된다. 가상 호스팅(Virtual Host)의 개념이다. 예를들어 하나의 서버로 http://opentutorials.orghttp://egoing.net 을 동시에 운영하고 싶은 경우 사용할 수 있는 방법이다. 가상 호스팅에 대한 자세한 내용은 가상 호스팅 수업을 참고하자.

    location 블록

    location 블록은 server 블록 안에 등장하면서 특정 URL을 처리하는 방법을 정의한다. 이를테면 http://opentutorials.org/course/1http://opentutorials.org/module/1 로 접근하는 요청을 다르게 처리하고 싶을 때 사용한다.

    events 블록

    이벤트 블록은 주로 네트워크의 동작방법과 관련된 설정값을 가진다. 이벤트 블록의 지시어들은 이벤트 블록에서만 사용할 수 있고, http, server, location와는 상속관계를 갖지 않는다. 이벤트 모듈 지시어에 대한 설명은 이벤트 모듈 지시어 사전을 참고한다.

가상 호스트 설정

  • /etc/nginx/sites-available 경로에 위치한다.

  • 가상 호스트 설정 파일은 sites-available 에 위치하고 실제로 동작시킬 가상 호스트가 있는 경우 /etc/nginx/sites-enabled 에 symbolic link를 만들어 사용한다.

  • sites-available에 있다고 해서 설정이 적용되지는 않는다. 이 디렉터리에 있어야 비로소 설정이 적용된다. sites-available에서 적용할 설정파일을 symbolic link 를 만들어 사용한다.

  • lesstif.com 이라는 가상 호스트가 있을 경우 /etc/nginx/sites-available/lesstif.com 파일에 설정하고 사용할 경우에는 다음 명령어로 symbolic link를 만들어 주면 된다.

  • symbolic link 란?

    - 링크를 연결하여 원본 파일을 직접 사용하는 것과 같은 효과를 내는 링크이다. 윈도우의 바로가기와 비슷한 개념

    - 특정 폴더에 링크를 걸어 NAS, library 원본 파일을 사용하기 위해 심볼릭 링크를 사용한다.

ln -s /etc/nginx/sites-available/lesstif.com /etc/nginx/sites-enabled

명령어

  • 재시작
nginx -s reload
/etc/init.d/nginx start|restart
  • config 테스트
nginx -t
/etc/init.d/nginx configtest
  • 로그
# Nginx의 오류 로그 실시간 확인
tail -f /var/log/nginx/error.log
# Nginx의 서버 접근 기록 실시간 모니터링
tail -f  /var/log/nginx/access.log

지시어

문자열

  • 지시어 값으로 사용되는 문자열은 세가지 형태로 나타나는데, 우선 따옴표를 사용하지 않고 문자열을 나타낼 수 있다.
root    /home/example.com/www;
  • 하지만, 공백 문자(""), 세미콜론(;), 중괄호({}) 같은 특수 문자를 사용하려면 작은 따옴표나 큰따옴표 안에 지시어 값을 넣어야 한다.
root    '/home/example.com/my web pages';

에러로그

가장 상세한 로그 레벨부터 차례로 debug, info, notice, warn, error, crit가 됩니다. 애플리케이션, HTTP 서버, 가상 호스트, 가상 호스트 디렉토리 각각에 대해 다른 레벨로 에러 로그를 설정할 수 있다.

로그 출력 방향을 /dev/null로 전환하면 에러 로그를 해제하는 것과 같은 효과를 얻을 수 있습니다. 환경 설정 파일의 루트 부분에 다음의 지시어를 사용합니다.

error_log {file_path} {level}
# ex) error_log /var/log/nginx/access.log;
# ex) error_log /var/log/nginx/access.log crit;
# ex) error_log /dev/null crit; # 에러 로그 해제

참조

  1. NGINX Tuning For Best Performance

  2. Nginx 기본 환경 설정

  3. 가상 호스트

  4. symbolic link

1. 그라운드 룰

2. 스크럼 hackmd link

3. 변경 내역

4. 스프린트

5. 기술공유

6. 팀 회고록

Clone this wiki locally