Actions

Difference between revisions of "Nginx"

From Joomla! Documentation

m
(Fixed the shitty English and crappy style)
Line 1: Line 1:
[http://nginx.net/ Nginx] is light-weight web-server which run on more than 6% over internet web-servers[http://news.netcraft.com/].
+
[http://nginx.net/ nginx] is a lightweight web server that powers 7.5% of web servers across all domains[http://en.wikipedia.org/wiki/Nginx#Usage]. Unless you have specific requirements that demand a heavy web server like Apache, you are much better off using nginx.
  
Here are some instructions on how-to install it on Gentoo Linux machine and install joomla within this server. For other distros, see [[Nginx#Sources|sources]] section.
+
Below are instructions on how to get Joomla! running with [http://wiki.nginx.org/PHPFcgiExample nginx and PHP via FastCGI].
  
== PHP installation ==  
+
== Install nginx ==
PHP will run as fastcgi service (fpm), so Nginx server will run php separately (as different process):
+
For Ubuntu, run <tt>aptitude install nginx</tt>. For other distros, run the corresponding package manager, or see http://wiki.nginx.org/Install.
 +
 
 +
== Install PHP FastCGI ==  
 +
For Ubuntu, read this excellent page on how to [http://wiki.nginx.org/PHPFcgiExample configure PHP and FastCGI for nginx].
 +
 
 +
For Gentoo, PHP will run as a FastCGI service (fpm), so the nginx server will run PHP asa  different process:
 
<pre>
 
<pre>
 
# echo "dev-lang/php gd gd2 curl simplexml tokenizer dom tidy sqlite xml fpm cgi" >> /etc/portage/package.use
 
# echo "dev-lang/php gd gd2 curl simplexml tokenizer dom tidy sqlite xml fpm cgi" >> /etc/portage/package.use
 
# emerge php
 
# emerge php
 
</pre>
 
</pre>
The default of php-fpm is good for most servers. For special configuration visit [http://php.net/manual/en/install.fpm.php php site].
+
The default settings of php-fpm are good for most servers. For special configuration visit the [http://php.net/manual/en/install.fpm.php PHP FPM site].
== Install nginx ==
+
In Linux you'll need to use emerge command. In other distros it would be apt-get, rpm, etc (depend on the distro).
+
<pre>
+
# emerge nginx
+
</pre>
+
  
 +
== Configure Nginx ==
 
== Configure Nginx ==
 
== Configure Nginx ==
  
The configuration of the virtual host on Gentoo lives in /etc/nginx/nginx.conf. Here is example from the author server:
+
nginx configuration files reside in:
 +
* <tt>/usr/local/nginx/conf/</tt> on Ubuntu
 +
* <tt>/etc/nginx/nginx.conf</tt> on Gentoo
 +
 
 +
Here is an sample nginx configuration file.
 +
 
 
<pre>
 
<pre>
 
         server {
 
         server {
Line 29: Line 35:
  
 
                 root PATH_ON_SERVER;
 
                 root PATH_ON_SERVER;
                 # this is the sef of Joomla
+
                 # Support Clean URLs (aka Search Engine Friendly)
 
                 location / {
 
                 location / {
 
                         try_files $uri $uri/ /index.php?q=$request_uri;
 
                         try_files $uri $uri/ /index.php?q=$request_uri;
Line 35: Line 41:
  
 
                 index index.php index.html index.htm default.html default.htm;
 
                 index index.php index.html index.htm default.html default.htm;
                 # unauthorize running scripts inside writable directories
+
                 # deny running scripts inside writable directories
 
                 location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
 
                 location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
 
                         return 403;
 
                         return 403;
Line 50: Line 56:
  
 
                 # caching of files  
 
                 # caching of files  
                location ~* \.(ico|pdf|flv)$ {
 
                        expires 1y;
 
                }
 
 
 
                 location ~* \.(ico|pdf|flv)$ {
 
                 location ~* \.(ico|pdf|flv)$ {
 
                         expires 1y;
 
                         expires 1y;
Line 67: Line 69:
  
 
Pay attention for few things:
 
Pay attention for few things:
# The sef of Joomla is inside.
+
# The parameter <tt>fastcgi_pass</tt> is set to 127.0.0.1:9000, corresponding to the port that fpm is configured to listen to. This means you can run the PHP processes on separate servers. On Gentoo, you can find this configuration in <tt>/etc/php/fpm-php5.3/php-fpm.conf/</tt>
# The argument fastcgi_pass set to 127.0.0.1:9000 as the fpm configured to listen on this port. That's mean you can run the php on separate servers. You can find this configuration in /etc/php/fpm-php5.3/php-fpm.conf/
+
 
# Don't forget to replace YOUR_DOMAIN & PATH_ON_SERVER depend on your domain and the path of Joomla on your server.
 
# Don't forget to replace YOUR_DOMAIN & PATH_ON_SERVER depend on your domain and the path of Joomla on your server.
  
 
== GZip support ==
 
== GZip support ==
If you need GZip compression support add the next code into the http section (inside /etc/nginx/nginx.conf:
+
If you need GZip compression support, add the following section to the http section of the main nginx configuration file:
 
<pre>
 
<pre>
 
         gzip on;
 
         gzip on;
Line 85: Line 86:
  
 
== Sources ==
 
== Sources ==
* [http://wiki.nginx.org/Joomla Joomla in Nginx wiki]
 
 
* [http://en.gentoo-wiki.com/wiki/Nginx Nginx in Gentoo]
 
* [http://en.gentoo-wiki.com/wiki/Nginx Nginx in Gentoo]
 
* [http://www.kevinworthington.com/nginx-for-windows/ Nginx for Windows]
 
* [http://www.kevinworthington.com/nginx-for-windows/ Nginx for Windows]

Revision as of 05:35, 16 August 2011

nginx is a lightweight web server that powers 7.5% of web servers across all domains[1]. Unless you have specific requirements that demand a heavy web server like Apache, you are much better off using nginx.

Below are instructions on how to get Joomla! running with nginx and PHP via FastCGI.

Contents

Install nginx

For Ubuntu, run aptitude install nginx. For other distros, run the corresponding package manager, or see http://wiki.nginx.org/Install.

Install PHP FastCGI

For Ubuntu, read this excellent page on how to configure PHP and FastCGI for nginx.

For Gentoo, PHP will run as a FastCGI service (fpm), so the nginx server will run PHP asa different process:

# echo "dev-lang/php gd gd2 curl simplexml tokenizer dom tidy sqlite xml fpm cgi" >> /etc/portage/package.use
# emerge php

The default settings of php-fpm are good for most servers. For special configuration visit the PHP FPM site.

Configure Nginx

Configure Nginx

nginx configuration files reside in:

  • /usr/local/nginx/conf/ on Ubuntu
  • /etc/nginx/nginx.conf on Gentoo

Here is an sample nginx configuration file.

        server {
                listen 80;
                server_name YOUR_DOMAIN;
                server_name_in_redirect off;

                access_log /var/log/nginx/localhost.access_log main;
                error_log /var/log/nginx/localhost.error_log info;

                root PATH_ON_SERVER;
                # Support Clean URLs (aka Search Engine Friendly)
                location / {
                        try_files $uri $uri/ /index.php?q=$request_uri;
                }

                index index.php index.html index.htm default.html default.htm;
                # deny running scripts inside writable directories
                location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
                        return 403;
                        error_page 403 /403_error.html;
                }

                location ~ .*.php$ {
                    include /etc/nginx/fastcgi.conf;
                    fastcgi_pass  127.0.0.1:9000;
                    fastcgi_index index.php;
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                }

                # caching of files 
                location ~* \.(ico|pdf|flv)$ {
                        expires 1y;
                }

                location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
                        expires 14d;
                }

        }

Pay attention for few things:

  1. The parameter fastcgi_pass is set to 127.0.0.1:9000, corresponding to the port that fpm is configured to listen to. This means you can run the PHP processes on separate servers. On Gentoo, you can find this configuration in /etc/php/fpm-php5.3/php-fpm.conf/
  2. Don't forget to replace YOUR_DOMAIN & PATH_ON_SERVER depend on your domain and the path of Joomla on your server.

GZip support

If you need GZip compression support, add the following section to the http section of the main nginx configuration file:

        gzip on;
        gzip_http_version 1.1;
        gzip_comp_level 6;
        gzip_min_length 1100;
        gzip_buffers 4 8k;
        gzip_types text/plain application/xhtml+xml text/css application/xml application/xml+rss text/javascript application/javascript application/x-javascr$
        gzip_proxied     any;
        gzip_disable     "MSIE [1-6]\.";

Sources