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 hostfoobar
is configured through a file in/etc/sites/available
. - After running the script with
foobar
as argument:nginx_ensite foobar
. A symbolic link/etc/nginx/sites-enabled/foobar -> /etc/nginx/sites-available/foobar
is created. Note that if the/etc/nginx/sites-enabled
directory doesn’t exist the script creates it. - The script invokes
nginx -t
to 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-ensite
or. nginx-ensite
. - Now when you invoke
nginx_ensite
the sites under/etc/nginx/sites-available
will appear as hypothesis for completion. Fornginx_dissite
you get all the sites listed in/etc/nginx/sites-enabled
as 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.