nginx_add.sh
nginx_add.sh
Sets up a new NGINX reverse proxy configuration for a project subdomain.
Location: Webserver VM (10.0.0.1, SSH port 22100)
Usage:
sudo ./nginx_add.sh <project_name> <port>
Example:
sudo ./nginx_add.sh s2s 3008
This will:
- Create
/etc/nginx/sites-available/s2s.abair.ie - Symlink to
/etc/nginx/sites-enabled/ - Test and reload NGINX
The project will be accessible at https://s2s.abair.ie proxying to http://10.0.0.2:3008 (services VM).
Note: You must also create a DNS A record in Cloudflare for the subdomain. See Setting up Cloudflare DNS.
#!/bin/bash
# Setup a new nginx reverse proxy config for [project_name].abair.ie -> 10.0.0.2:[port]
# Usage: sudo ./nginx_add.sh <project_name> <port>
set -e
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <project_name> <port>"
echo "Example: $0 s2s 3008"
exit 1
fi
PROJECT_NAME="$1"
PORT="$2"
DOMAIN="${PROJECT_NAME}.abair.ie"
CONF_FILE="/etc/nginx/sites-available/${DOMAIN}"
ENABLED_LINK="/etc/nginx/sites-enabled/${DOMAIN}"
# Check running as root
if [ "$EUID" -ne 0 ]; then
echo "Please run as root (sudo)"
exit 1
fi
# Check if config already exists
if [ -f "$CONF_FILE" ]; then
echo "Error: Config file $CONF_FILE already exists."
exit 1
fi
# Create the nginx config
cat > "$CONF_FILE" <<EOF
server {
listen 80;
server_name ${DOMAIN};
return 301 https://\$server_name\$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ${DOMAIN};
ssl_certificate /etc/letsencrypt/live/abair.ie/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/abair.ie/privkey.pem; # managed by Certbot
access_log /etc/nginx/log/access_${PROJECT_NAME}.abair.ie;
error_log /etc/nginx/log/error_${PROJECT_NAME}.abair.ie;
location / {
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_set_header X-Forwarded-Host \$host;
proxy_set_header Host \$host;
proxy_pass http://10.0.0.2:${PORT};
}
}
EOF
echo "Created config: $CONF_FILE"
# Enable the site
if [ -d "/etc/nginx/sites-enabled" ]; then
ln -s "$CONF_FILE" "$ENABLED_LINK"
echo "Enabled site: $ENABLED_LINK"
fi
# Test nginx config
echo "Testing nginx configuration..."
nginx -t
# Reload nginx
echo "Reloading nginx..."
systemctl reload nginx
echo ""
echo "Done! ${DOMAIN} is now proxying to http://10.0.0.2:${PORT}"
echo "Make sure your DNS has an A/CNAME record for ${DOMAIN} pointing to this server."