Files
cloud-node-container/scripts/create-nginx-config.sh
T

69 lines
2.2 KiB
Bash
Raw Normal View History

#!/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 {
listen 443 ssl;
http2 on;
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;
# 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.
proxy_set_header Upgrade \$http_upgrade;
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;
proxy_set_header Host \$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 \$http_x_forwarded_proto;
proxy_set_header X-CLIENT-IP \$http_x_client_ip;
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