#!/bin/sh folder="$PWD" port=8080 try_files='/$uri /$uri.html /$uri/index.html =404' access_log='/dev/stdout' cache_control=' add_header Last-Modified $date_gmt; add_header Cache-Control "private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; if_modified_since off; expires off; etag off; ' usage() { cat << EOF usage: $(basename "$0") [options] [folder] options: -p PORT host server on port PORT (default $port) -t STR set try_files pattern to STR (default '$try_files') -C enable server cache (disabled by default) -v verbose mode (prints config before starting server) -q quiet mode (disable access_log) -h show this help EOF exit $1 } ARGC=0 while getopts hvp:Ct:q OPT; do [ $OPTIND -gt $ARGC ] && ARGC=$OPTIND case $OPT in h) usage 0 ;; p) port="$OPTARG" ;; t) try_files="$OPTARG" ;; v) print_config=1 ;; C) cache_control="" ;; q) access_log="/dev/null" ;; \?|*) usage 1 ;; esac done shift $(( $OPTIND - 1 )) [ $# -ge 1 ] && folder="$(readlink -f "$1")" config="$(mktemp)" pidfile="$(mktemp)" cat << EOF > "$config" worker_processes 1; daemon off; pid $pidfile; events { worker_connections 1024; } http { types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; $cache_control access_log $access_log; server { listen $port; listen [::]:$port; root $folder; location / { try_files $try_files; } } } EOF [ $print_config ] && cat "$config" nginx -c "$config" rm -f "$config" "$pidfile"