/nginx_ensite

A script to enable or disable a site in nginx.

Primary LanguageShell

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:

  1. All virtual hosts configuration files are by default under /etc/nginx/sites-available. For example the virtual host foobar is configured through a file in /etc/nginx/sites-available.

  2. 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.

  3. 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.

  4. If everything is correct now just reload nginx, in Debian based systems that means invoking service nginx reload (default startup program name is service).

  5. Now point the browser to the newly configured host and everything should work properly assuming your configuration is sensible.

  6. 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:

  1. Source the script to Bash by issuing either source nginx-ensite or . nginx-ensite.

  2. Now when you invoke nginx_ensite the sites under /etc/nginx/sites-available will appear as hypothesis for completion. For nginx_dissite you get all the sites listed in /etc/nginx/sites-enabled as possible completions.

  3. 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.