nodejs + nginx reverse proxy
ubuntu 기준입니다.
8080 포트 열어주어야 합니다.
테스트: http://주소:8080/socket.io/socket.io.min.js
sudo apt update
sudo apt install nginx build-essential python3 make g++ pkg-config
1) systemctl edit nginx
LimitNOFILE=65535
2) vi /etc/nginx/nginx.conf
user www-data; # 기본 값.
pid /run/nginx.pid; # 기본 값.
worker_processes auto; # 기본 값, 필요하면 늘림.
include /etc/nginx/modules-enabled/*.conf; # 기본 값
events {
use epoll;
worker_connections 20000;
}
# PCRE JIT (정규식 성능)
pcre_jit on;
# 파일/소켓 수 상한
worker_rlimit_nofile 65535;
http {
# WebSocket Upgrade 헤더 처리용 (sites-enabled include보다 먼저!)
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server_tokens off; # 선택 사항
include /etc/nginx/mime.types; # 기본
default_type application/octet-stream;
sendfile on; # 기본
tcp_nopush on; # 기본
tcp_nodelay on;
types_hash_max_size 2048; # 기본
keepalive_timeout 65; # 채팅/WebSocket
# reverse proxy 공통 타임아웃(웹소켓/롱커넥션 대비)
proxy_http_version 1.1; # Node/WebSocket에 유리
proxy_connect_timeout 5s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
send_timeout 60s;
client_max_body_size 10m; # (선택)
include /etc/nginx/conf.d/*.conf; # 기본
include /etc/nginx/sites-enabled/*.conf; # 확장자 conf 만 로딩 (선택)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types
text/plain
text/css
application/json
application/javascript
text/xml
application/xml
application/xml+rss
text/javascript;
}
3) vi /etc/nginx/sites-enabled/chat.elkha.kr.conf
upstream node_chat {
server 127.0.0.1:8082;
keepalive 64;
}
server {
listen 0.0.0.0:8080;
server_name _;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 5s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_pass http://node_chat;
}
location ~* \.map$ { return 204; }
}
nodejs (root 아니어도 됨)
# 1) nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
# 2) 현재 쉘에 nvm 로드 (터미널 재실행해도 됨)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
# 3) Node.js 24 설치/사용
nvm install 24
nvm use 24
nvm alias default 24
# 4) PM2 설치
npm i -g pm2
# 5) 확인
node -v
pm2 -v
cd elkhatalk
pm2 start app.js --name elkhatalk --max-memory-restart 1024M
pm2 startup systemd -u elkha --hp /home/elkha
# 위 명령이 출력하는 sudo 1줄을 그대로 실행
pm2 save