2025-07-21 16:00:46 -07:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
|
|
# Create nginx configuration for reverse proxy to Node.js app
|
|
|
|
|
cat > /etc/nginx/conf.d/default.conf << EOF
|
|
|
|
|
upstream nodejs_backend {
|
|
|
|
|
server 127.0.0.1:3000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
server {
|
|
|
|
|
listen 80;
|
|
|
|
|
server_name $domain $serveralias;
|
|
|
|
|
|
|
|
|
|
# Redirect HTTP to HTTPS
|
|
|
|
|
return 301 https://\$server_name\$request_uri;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
server {
|
2026-08-03 07:54:32 -07:00
|
|
|
listen 443 ssl;
|
|
|
|
|
http2 on;
|
2025-07-21 16:00:46 -07:00
|
|
|
server_name $domain $serveralias;
|
|
|
|
|
|
|
|
|
|
ssl_certificate /etc/pki/tls/certs/localhost.crt;
|
|
|
|
|
ssl_certificate_key /etc/pki/tls/private/localhost.key;
|
|
|
|
|
|
|
|
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
|
|
|
|
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
|
|
|
|
|
|
|
|
|
|
access_log /home/$user/logs/nginx/access.log;
|
|
|
|
|
error_log /home/$user/logs/nginx/error.log;
|
|
|
|
|
|
|
|
|
|
location / {
|
|
|
|
|
proxy_pass http://nodejs_backend;
|
|
|
|
|
proxy_http_version 1.1;
|
2026-08-03 07:54:32 -07:00
|
|
|
|
|
|
|
|
# WebSocket support (socket.io, ws). \$connection_upgrade is defined by
|
|
|
|
|
# the map in /etc/nginx/nginx.conf: 'upgrade' when the client asked to
|
|
|
|
|
# upgrade, 'close' otherwise -- a hardcoded 'upgrade' would send the
|
|
|
|
|
# header on every ordinary request too.
|
2025-07-21 16:00:46 -07:00
|
|
|
proxy_set_header Upgrade \$http_upgrade;
|
2026-08-03 07:54:32 -07:00
|
|
|
proxy_set_header Connection \$connection_upgrade;
|
|
|
|
|
|
|
|
|
|
# An idle WebSocket sends no bytes, and the default 60s read timeout
|
|
|
|
|
# would cut it. 600s clears any sane heartbeat (socket.io pings every
|
|
|
|
|
# 25s by default) without pinning connection slots for an hour --
|
|
|
|
|
# worker_connections is 512 and each client uses two.
|
|
|
|
|
proxy_read_timeout 600s;
|
|
|
|
|
proxy_send_timeout 600s;
|
|
|
|
|
|
2025-07-21 16:00:46 -07:00
|
|
|
proxy_set_header Host \$host;
|
|
|
|
|
proxy_set_header X-Real-IP \$remote_addr;
|
|
|
|
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
2025-07-24 09:01:08 -07:00
|
|
|
proxy_set_header X-Forwarded-Proto \$http_x_forwarded_proto;
|
|
|
|
|
proxy_set_header X-CLIENT-IP \$http_x_client_ip;
|
2025-07-21 16:00:46 -07:00
|
|
|
proxy_cache_bypass \$http_upgrade;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
location /ping {
|
|
|
|
|
proxy_pass http://nodejs_backend/ping;
|
|
|
|
|
access_log off;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Static files
|
|
|
|
|
location /static/ {
|
|
|
|
|
alias /home/$user/app/public/;
|
|
|
|
|
expires 30d;
|
|
|
|
|
add_header Cache-Control "public, immutable";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
EOF
|