Using Nginx with Virtualmin

This document is deprecated
---------------------------------------

The Virtualmin install script has the `--bundle LEMP` option to perform an installation with nginx that should be used if you wish to use nginx with Virtualmin.

Introduction to Nginx
-----------------

Nginx is a lightweight webserver that supports most of the functionality of Apache, but is faster and uses less memory. It is suited to websites that have a large amount of static content, or virtual machines with limited memory. For more information, see http://wiki.nginx.org/Main

Installing Nginx Support
--------------------

Switching a system from the Apache webserver (installed by default by Virtualmin) to Nginx should only be done if no virtual servers with websites have been created yet. Ideally the change should be done on a freshly installed system, running RHEL 6.0, CentOS 6.0 or Debian 6.0 or later.

The steps to remove Apache and install Nginx are :

1. Shut down Apache with the command `service httpd stop ; chkconfig httpd off` (on RHEL or CentOS), or `/etc/init.d/apache2 stop ; update-rc.d apache2 remove` (on Debian).
2. Install Nginx with the command `yum install nginx` (on RHEL or CentOS) or `apt-get install nginx` (on Debian).
3. Start the Nginx webserver with the command `/etc/init.d/nginx start`
4. Install Virtualmin's Nginx plugin with the command `yum install wbm-virtualmin-nginx wbm-virtualmin-nginx-ssl` (on RHEL or CentOS) or `apt-get install webmin-virtualmin-nginx webmin-virtualmin-nginx-ssl` (on Debian).

Once this is done, you can configure Virtualmin to use it as follows :

1. Login to Virtualmin as root, and go to **Webmin** -> **Servers** -> **Nginx Webserver** and make sure that Nginx and its configuration files are found.
2. If not, click on the **Module Config** link and set the config and command paths correctly.
3. Return to Virtualmin, and go to **System Settings** -> **Features and Plugins**.
4. Un-check the "Apache website" , "SSL website" and "DAV Login", "Mailman", "Protected web directories", "AWstats reporting" and "Subversion repositories" features.
5. Check the "Nginx website" and "Nginx SSL website" features, then click "Save".
6. If Virtualmin reports that any other features cannot be used without Apache, go back and de-select them too.
7. Go to the **System Information** page and click **Refresh system information** in the top right.
8. Verify that Nginx is shown as running in the "Status" section.

Using Nginx
----------

Once Nginx support has been configured, you should be able to create virtual servers just as you would with Apache. However, on the **Create Virtual Server** page you will need to select **Enable Nginx website?** in the **Enabled features** section, instead of **Enable Apache**.

When creating a domain from the command-line API, you will need to use the `--virtualmin-nginx` flag instead of `--web` . For SSL websites, you will need to use `--virtualmin-nginx-ssl` instead of `--ssl` .

Similarly, when creating a domain via the remote API, you will need to use the `virtualmin-nginx=` parameter instead of `web=` .

Limitations of Nginx
----------------

Nginx as configured by Virtualmin lacks some features of Apache, such as :

* Nginx does not support CGI, so any applications or Virtualmin scripts that use CGI will not work. Virtualmin should prevent the installation of scripts that require CGI, mod_perl or Apache-specific features.

* PHP can only be executed via FastCGI, and all PHP scripts run with domain owner permissions. Execution via CGI or mod_php is not supported. For PHP to work, Virtualmin will setup a PHP FastCGI server process that Nginx communicates with for each virtual server.

* Only one PHP version is supported, and Virtualmin will pick the highest version available on the system. This typically means that PHP v4 scripts cannot be run.