Nginx
목차
- 환경설정
- React를 Nginx웹 서버에 배포하기
- Windows
- 기본 파일, 폴더
- 명령어
- Nginx 로드밸런싱 설정
- Nginx 멀티 location 설정
- Nginx 프록시 설정
- nginx 인증서 적용
- 504 Gateway Time-out
환경설정
- 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;