This is a shell (Bash) script that replicates for nginx the Debian
a2ensite and a2dissite for enabling and disabling sites as virtual
hosts in Apache 2.2.
The original a2ensite and a2dissite is written in
Perl. a2dissite is a symbolic link to a2ensite. Here I followed
the same approach, i.e., nginx_dissite is a symbolic link to
nginx_ensite.
Just drop the script and the symbolic link in /usr/sbin or other
location appropriate for your system. Meaning: cp nginx_* /usr/sbin.
That’s it you’re done.
Note that the script assumes a specific file system topology for your
nginx configuration. Here’s the rundown:
- All virtual hosts configuration files should be under
/etc/nginx/sites-available. For example the virtual hostfoobaris configured through a file in/etc/sites/available. - After running the script with
foobaras argument:nginx_ensite foobar. A symbolic link/etc/nginx/sites-enabled/foobar -> /etc/nginx/sites-available/foobaris created. Note that if the/etc/nginx/sites-enableddirectory doesn’t exist the script creates it. - The script invokes
nginx -tto test if the configuration is correct. If the test fails no symbolic link is created and an error is signaled. - If everything is correct now just reload nginx, in Debian based
systems that means invoking
/etc/init.d/nginx reload. - Now point the browser to the newly configured host and everything should work properly assuming your configuration is sensible.
- To disable the site just run
nginx_dissite foobar. Reload nginx to update the running environment.
The script is written in Bash and uses what I believe to be some Bash specific idioms. I never tested it in other shells. You’re welcomed to try it in any other shell. Please do tell me how it went.
It requires also awk. The original awk (usually called BWK awk) from
Bell Labs will do if you don’t have gawk (Gnu awk). IN OS X and *BSD
the former is the default awk. The script should work in *BSD, OS X
and GNU/Linux.
There’s a Bash script for automatic completion of sites to be
enabled and disabled located in the bash_completion.d directory.
To make use of it you should:
- Source the script to Bash by issuing either
source nginx-ensiteor. nginx-ensite. - Now when you invoke
nginx_ensitethe sites under/etc/nginx/sites-availablewill appear as hypothesis for completion. Fornginx_dissiteyou get all the sites listed in/etc/nginx/sites-enabledas possible completions. - To get the completion script to be sourced upon login please
copy it to
/etc/bash_completion.d/or whatever location your shell environment uses to place all the completion scripts./etc/bash_completion.d/is the location in Debian (hence also in Ubuntu) of Bash completion scripts.
Two UNIX manual pages are included in the man directory. They should
be copied to a proper directory in your system. Something along the
lines of /usr/share/man/man8 or /usr/local/share/man/man8.
The script is signed with my GPG key. Just do gpg --keyserver
keys.gpg.net --recv-keys 4D722217. Verify by issuing gpg --verify
nginx_ensite.sig.
Thanks to xufan6 for setting me on the path of the Bash completion script.