nginx_ensite and nginx_dissite for quick virtual host enabling and disabling
Description
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/2.4.
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
.
The script allows for arbitrary paths for the nginx configuration directories. This is particularly useful not only to those on Mac, but also in a microservice approach where each service has it's own vhost configuration, for example.
Th deafult startup program is service
. Feel free to pass another
program. For example using nginx to send a SIGHUP
to reload the
configuration you just pass the option -s nginx
to the script.
Installation
Automatic
git clone https://github.com/perusio/nginx_ensite.git
cd nginx_ensite
sudo make install
Manual
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 are by default under
/etc/nginx/sites-available
. For example the virtual hostfoobar
is configured through a file in/etc/nginx/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
service nginx reload
(default startup program name isservice
). -
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.
Requirements
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.
Command Completion
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.
Manual pages
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
.
Here's an online version of the manpage.
Security & Trust
The script is signed with my GPG key. Just do gpg --keyserver keys.gnupg.net --recv-keys 4D722217
. Verify by issuing gpg --verify nginx_ensite.sig
.
Acknowledgments
Thanks to the many people that have contributed to this script. You're the stuff Free Software is made of.