Nginx

목차

환경설정

  • user : NGINX 프로세스가 실행되는 권한
  • work_processes : NGINX 프로세스 실행 가능 수
    • auto도 무방하지만, 명시적으로 서버에 장착되어 있는 코어 수 만큼 할당하는 것이 보통이며, 더 높게도 설정 가능하다.
  • pid : NGINX 마스터 프로세스 ID 정보가 저장된다.
  • events : NGINX의 특징인 비동기 이벤트 처리 방식에 대한 옵션을 설정한다.
    • worker_connections는 하나의 프로세스가 처리할 수 있는 커넥션의 수를 의미한다.
    • 최대 접속자수 = worker_processes X worket_connections가 된다.
  • http
    • keepalive_timeout : 접속시 커넥션을 몇 초동안 유지할지에 대한 설정값. 이 값이 높으면 불필요한 커넥션(접속)을 유지하기 때문에 낮은값 또는 0을 권장한다. (default=10)
    • servers token : NGINX의 버전을 숨길것인가에 대한 옵션이다. 보안상 주석을 제거하여 설정하는 것이 좋다.
    • types_hash_max_size, server_names_hash_bucket_size 호스트의 도메인 이름에 대한 공간을 설정하는 것으로 이 값이 낮을 경우 많은 가상 호스트 도메인을 등록한다거나, 도메인 이름이 길 경우 bucket 공간이 모자라 에러가 생길 수 있으므로 넉넉하게 설정한다.
  • include 옵션 : 가상 호스트 설정이나 반복되는 옵션 항목을 inlcude를 통해 불러올 수 있다. EX) 리버스 프록시를 각 도메인에 설정한다고 했을 떄 헤더 처리 옵션등을 conf.d 디렉토리에 넣어두고 incldue 명령을 통해 불러올 수 있다.

React를 Nginx웹 서버에 배포하기

  • yarn build
  • npm run build

Windows

C:\github\mamma1234\nginx-1.17.8\conf\nginx.conf

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   C:\github\mamma1234\klnet.owner\klnet.owner.web\material-react-mobx\build;
            index  index.html index.htm menu.html;
            try_files $uri $uri/ /index.html;
        }


기본 파일, 폴더

  • sites-available : 가상 서버 환경들에 대한 설정 파일들이 위치하는 부분입니다. 가상 서버를 사용하거나 사용하지 않던간에 그에 대한 설정 파일들이 위치하는 곳이다.
  • sites-enabled : sites-available 에 있는 가상 서버 파일들중에서 실행시키고 싶은 파일을 symlink로 연결한 폴더입니다. 실제로 이 폴더에 위치한 가상서버 환경 파일들을 읽어서 서버를 세팅합니다.
  • nginx.conf : Nginx에 관한 설정파일로 Nginx 설정에 관한 블록들이 작성되어 있으며 이 파일에서 sites-enabled 폴더에 있는 파일들을 가져옵니다.

명령어

    서버 시작 : nginx
    서버 중지 : nginx -s stop
    서버 재시작 : nginx -r reload

Nginx 로드밸런싱 설정

    #http블럭 내부에 추가
        #NodeJS 서버 로드밸런싱
        upstream nodejs_server {
            #least_conn;
            #ip_hash;
            server localhost:3000 weight=10 max_fails=3 fail_timeout=10s;
            server localhost:3001 weight=10 max_fails=3 fail_timeout=10s;
        }

        #3333번 포트 NodeJS 서버로 연결
        server{
            listen                3333;
            server_name  localhost;

            location / {
                proxy_pass http://nodejs_server;
            }
        }

ip_hash : 동일한 IP의 접속은 같은 서버로 접속하도록 하는 옵션입니다. least_conn : 가장 접속이 적은 서버로 접속을 유도하는 옵션으로 ip_hash와 같이쓰입니다.

Nginx 멀티 location 설정

server {
    listen 80;
    index index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /usr/share/nginx/html;

    location ~* /api {
        proxy_pass http://server:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location ~* /pg {
        proxy_pass http://server:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location ~* /auth {
        proxy_pass http://server:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location ~* /ora {
        proxy_pass http://server:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }


    location ~* /own {
        proxy_pass http://server:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location / {
            root /usr/share/nginx/html;
            index index.html index.htmi menu.html;
            try_files $uri $uri/ /index.html;
    }

    error_page 500 502 503 504 /50x.html;

    location = /50x.html {
            root /usr/share/nginx/html;
    }
}

Nginx 프록시 설정

# nginx/default.conf

upstream client {
    server client:3000;
}

upstream server {
    server server:3050;
}

server {
    listen 80;

    location / {
        proxy_pass http://client;
    }

    location /sockjs-node {
        proxy_pass http://client;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

    location /api {
        rewrite /api/(.*) /$1 break;
        proxy_pass http://server;
    }
}

nginx 인증서 적용

server {
    listen       443;
	server_name  plismplus.com
	root         html;

	ssl				on;
	ssl_certificate		/usr/local/ssl/server.crt;
	ssl_certificate_key		/usr/local/ssl/server.key;
	ssl_session_timeout		5m;
	ssl_protocols			SSLv2 SSLv3 TLSv1;
	ssl_ciphers			HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers	on;

	location / {
		root	/home/espeniel;
		index	index.html index.htm;
	}
}

504 Gateway Time-out

    #proxy_connect_timeout   90; # default 60
    #proxy_send_timeout      90; # default 60
    proxy_read_timeout      300;


    #fastcgi_connect_timeout 90; # default 60
    #fastcgi_send_timeout 90; # default 60
    fastcgi_read_timeout 300;