#!/bin/sh echo echo "Welcome to ngxproxy utility." echo "We're about to create a new virtual host (AKA server block)." echo while [ "$NAME" == "" ]; do read -p "Name: " NAME done if [ -f "/sites-enabled/$NAME.conf" ]; then echo "ERROR: /sites-enabled/$NAME.conf already exists." exit 1 fi while [ "$DOMAIN" == "" ]; do read -p "Domain: " DOMAIN done if [ "$(dig +short $DOMAIN)" == "" ]; then echo "WARNING: $DOMAIN couldn't be resolved: it may not work!" echo "HINT: Is this domain correct? Did you update your DNS zone?" fi read -p "Webroot (default is /): " WEBROOT if [ "$WEBROOT" == "" ]; then WEBROOT="/" elif [ "$WEBROOT" != "/" ]; then echo "WARNING: You might have to add a proxy header to get your custom webroot working." while [[ "$CONFIGURE_WEBROOT" != "y" && "$CONFIGURE_WEBROOT" != "n" ]]; do read -p "Is it required (by the app) to configure it? [y/n]: " CONFIGURE_WEBROOT done if [ "$CONFIGURE_WEBROOT" == "y" ]; then while [ "$WEBROOT_HEADER" == "" ]; do read -p "Type the required proxy_set_header (like X-Script-Name): " WEBROOT_HEADER done fi fi while [ "$CONTAINER" == "" ]; do read -p "Container: " CONTAINER done ping -c 1 $CONTAINER >/dev/null 2>&1 if [ "$?" != "0" ]; then echo "WARNING: $CONTAINER seems to be unavailable. It may not work!" echo "HINT: Did you correctly link the container?" fi read -p "Port (default is 80): " PORT if [ "$PORT" == "" ]; then PORT="80" elif ! [ "$PORT" -eq "$PORT" ] 2>/dev/null; then echo "ERROR: an integer value was expected." exit 1 elif [ "$PORT" -gt "65535" ]; then echo "ERROR: $PORT exceeds the maximum TCP port which is 65535" exit 1 fi while [[ "$HTTPS" != "y" && "$HTTPS" != "n" ]]; do read -p "HTTPS [y/n]: " HTTPS done if [ "$HTTPS" == "y" ]; then while [ ! -f "$CERTIFICATE_PATH" ]; do read -p "Certificate path: " CERTIFICATE_PATH done while [ ! -f "$KEY_PATH" ]; do read -p "Certificate key path: " KEY_PATH done cp -f /etc/nginx/conf/vhost_https.conf /tmp/${NAME}.conf sed -i \ -e "s||$CERTIFICATE_PATH|g" \ -e "s||$KEY_PATH|g" \ /tmp/$NAME.conf while [[ "$HEADERS" != "y" && "$HEADERS" != "n" ]]; do read -p "Secure headers [y/n]: " HEADERS done if [ "$HEADERS" == "y" ]; then sed -i 's|#include /etc/nginx/conf/headers_params|include /etc/nginx/conf/headers_params|g' /tmp/$NAME.conf fi while [[ "$HSTS" != "y" && "$HSTS" != "n" ]]; do read -p "Enable HSTS header ? [y/n]: " HSTS done if [ "$HSTS" == "y" ]; then read -p "Max-age in seconds (default is 31536000): " HSTS_MAX_AGE if [ "$HSTS_MAX_AGE" == "" ]; then HSTS_MAX_AGE="31536000" elif ! [ "$HSTS_MAX_AGE" -eq "$HSTS_MAX_AGE" ] 2>/dev/null; then echo "ERROR: an integer value was expected." exit 1 fi while [[ "$HSTS_SUBDOMAINS" != "y" && "$HSTS_SUBDOMAINS" != "n" ]]; do read -p "Include subdomains ? [y/n]: " HSTS_SUBDOMAINS done if [ "$HSTS_SUBDOMAINS" == "y" ]; then HSTS_SUBDOMAINS="includeSubDomains;" else HSTS_SUBDOMAINS="" fi while [[ "$HSTS_PRELOAD" != "y" && "$HSTS_PRELOAD" != "n" ]]; do read -p "Enable preload list mechanism ? [y/n]: " HSTS_PRELOAD done if [ "$HSTS_PRELOAD" == "y" ]; then HSTS_PRELOAD="preload" else HSTS_PRELOAD="" fi sed -i \ -e 's/#add_header/add_header/g' \ -e "s//$HSTS_MAX_AGE/g" \ -e "s//$HSTS_SUBDOMAINS/g" \ -e "s//$HSTS_PRELOAD/g" /tmp/$NAME.conf fi else cp -f /etc/nginx/conf/vhost_http.conf /tmp/${NAME}.conf fi while [ "$MAX_BODY_SIZE" == "" ]; do read -p "Max body size in MB (integer/null): " MAX_BODY_SIZE done if ! [ "$MAX_BODY_SIZE" -eq "$MAX_BODY_SIZE" ] 2>/dev/null && [ "$MAX_BODY_SIZE" != "null" ]; then echo "ERROR: Incorrect value." exit 1 fi if [ "$MAX_BODY_SIZE" != "null" ]; then sed -i "s|#client_max_body_size |client_max_body_size $MAX_BODY_SIZE|g" /tmp/$NAME.conf fi if [ "$CONFIGURE_WEBROOT" == "y" ]; then sed -i "/proxy_pass/a \ \ \ \ proxy_set_header $WEBROOT_HEADER $WEBROOT;" /tmp/$NAME.conf fi sed -i \ -e "s||$DOMAIN|g" \ -e "s||$CONTAINER|g" \ -e "s||$PORT|g" \ -e "s||$WEBROOT|g" \ /tmp/$NAME.conf mv /tmp/$NAME.conf /sites-enabled/ echo echo "Done! $NAME.conf has been generated." while [[ "$RELOAD" != "y" && "$RELOAD" != "n" ]]; do read -p "Reload nginx now? [y/n]: " RELOAD done if [ "$RELOAD" == "y" ]; then su-exec $UID:$GID nginx -s reload echo "nginx successfully reloaded." else echo "Restart manually nginx to enable this new vhost." fi echo exit 0