用 sh 脚本生成 Niginx Vhost 配置文件

这篇文章(59005034c621c6c81bf78e70)是从 Teambition 迁移过来的

touch ngxcfg.sh $$ chmod +x ngxcfg.sh

脚本代码如下:

#!/bin/bash
# MaXiaojun

help() {
  echo "Generate vhost configuration file for Nginx"
  echo "Usage:"
  echo "  ngxcfg  "
  echo "  ngxcfg -r www.jkr3.com https://192.168.123.123:8080"
  echo "    -h Help"
  echo "    -r Generate redirect config file."
  echo "    -f Force overwrite config file."
}

# get options
while getopts ":hrfv" optname  "$@"
  do
    case "$optname" in
      "v")
          echo v0.1.0
          exit 0
        ;;
      "h")
          help
          exit 0
        ;;
      "r")
        IS_REDIRECT=true
        ;;
      "f")
        IS_FORCE=true
        ;;
      "?")
        echo "Unknown option -$OPTARG"
        exit 1
        ;;
      ":")
        echo "No argument value for option -$OPTARG"
        exit 1
        ;;
      *)
      # Should not occur
        echo "Unknown error while processing options"
        exit 1
        ;;
    esac
  done


SHIFT_COUNT=$(($OPTIND-1))
shift $SHIFT_COUNT 

DOMAIN=$1
PROXY_TO=$2


if [ "$DOMAIN" == "" ] || [ "$PROXY_TO" == "" ]; then
  help
  exit 1
fi

FILENAME=$DOMAIN.conf


if [ "$IS_FORCE" != "true" ]; then
  if [ -s $FILENAME ]; then
    echo "Error: Config '$FILENAME' exist." && exit 1
  fi
fi

TMP_REDIRECT="## REDIRECT ##
server {
  listen 80;
  server_name $DOMAIN;
  return 301  $PROXY_TO\$request_uri;
}
"

TMP_PROXY="## PROXY ##
server {
  listen 80;
  server_name $DOMAIN;
  location / {
    proxy_pass $PROXY_TO;
    proxy_set_header Host \$host:80;
    proxy_set_header X-Real-IP \$remote_addr;
    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    proxy_set_header Via \"nginx\";

    add_header X-Upstream-Addr \$upstream_addr;
  }
}
"

if [ "$IS_REDIRECT" == "true" ]; then
  echo "$TMP_REDIRECT" > $FILENAME;
else
  echo "$TMP_PROXY" > $FILENAME;
fi

echo "=========================================================="
echo "Config file '$FILENAME'' generate successfully."
echo "----------------------------------------------------------"
cat "$FILENAME"
echo "----------------------------------------------------------"