Pandora:Documentation en:Nginx

From Pandora FMS Wiki

Jump to: navigation, search

NGINX+PHP-FPM Installation and configuration for Pandora FMS

Nginx is a reverse high availability web/proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP protocols. It is free and open source software, simplified licensed by BSD. It is a multi-platform software running in Unix and Windows systems and it is used by a large list of websites known as WordPress, Netflix, Hulu, GitHub, Ohloh, SourceForge, TorrentReactor and some parts of Facebook.

NGINX, an apache alternative that increases load times.

This guide explain step by step how to change webserver, in the case we are using Apache and we want to use NGINX, in a Centos 6 machine.


NGINGX Instalation

Firstable, stop Apache service:

service httpd stop 

Create a directory, in order to save all respositories there:

mkdir /root/temp ; cd /root/temp  

Download all NGINX repositories from http://nginx.org/packages/, in this example we will choose Centos 6:

wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

Agregar los repositorios:

rpm -i nginx-release-centos-6-0.el6.ngx.noarch.rpm

Install NGINX

yum install nginx

Start the service:

service nginx start

Check that it is working properly. Open your browser and write http://<IP_HOST>/index.html, “Welcome to nginx!”should appear.

NGINX Configuration

Change the user and group owner of /var/www/html/ directory and all their subdirectories:

chown -R nginx:nginx /var/www/html/

You can keep /etc/nginx/nginx.conf file by default or you can change desired parameters:

user  nginx;

worker_processes  5;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  4096;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf; 
    ## en conf.d/ The line where we will add the server configuration.
}

Create a pandora.conf file at /etc/nginx/conf.d/ and remove or move all files .conf that exist in these directory.

nano /etc/nginx/conf.d/pandora.conf

Possible server configuration:

upstream php_backend {
    server unix:/tmp/php5-fpm.sock;  ## Socket path. 
}

server{
    listen 80;
    server_name 192.168.70.197; ## Higly recommend to set private server ip, 
                              ## otherwise if you set it to "localhost" or "127.0.0.1"  
                              ## you could get some errors.
    root /var/www/html;
    index index.php index.html;
    access_log   logs/pandora.log  combined; 
    client_max_body_size 500M;

        location ~* \.(png|jpg|jpeg|gif|ico)$ {
           expires 720h;
           log_not_found on;
        }

        location ~* \.(css|js|xml)$ {
           gzip_static on;
           expires 720h;
           log_not_found on;
        }

        location ~ \.php$ {
                include fastcgi_params;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 4 256k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_intercept_errors on;
                fastcgi_pass   php_backend;
                fastcgi_index  index.php;
                fastcgi_param  REQUEST_METHOD   $request_method;
                fastcgi_param  CONTENT_TYPE     $content_type;
                fastcgi_param  CONTENT_LENGTH   $content_length;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  QUERY_STRING     $query_string;
        }

        location / {
                try_files $uri $uri/ $uri.php?$args;
        }

}

Create the log directory:

mkdir /etc/nginx/logs/

Check if nginx is well configurated:

nginx -t

Restart nginx in order to get the new configuration:

service nginx restart

If you want to know more about NGINX, just check:

http://nginx.org/en/docs/beginners_guide.html

Php-fpm installation

Install php-fpm (Centos repositories got it already):

yum install php-fpm  

Check if the libraries bellow are installed, if not proceed to install it.

yum install php-­mbstring php-­gd php­-ldap php­-snmp graphviz php-­mysql

Php-fpm configuration

Edit the /etc/php-fpm.d/www.conf configuration file:

;listen = 127.0.0.1:9000
listen = /tmp/php5-fpm.sock ; #Socket path.
;listen.allowed_clients =
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0666

listen.owner = nginx
listen.group = nginx
listen.mode = 0666

user = nginx
group = nginx

Change the user and group owner of the /var/lib/php/session directory.

chown nginx:nginx /var/lib/php/session

APC optional installation:

yum install php-pecl-apc

You will be able to modify the APC configuration at /etc/php.d/apc.ini. This is an important parameter to have in mind, in order to speed up:

; The size of each shared memory segment, with M/G suffix
apc.shm_size=64M

Start the service:

service php-fpm start

Start up at boot

Start up nginx and php-fpm at system boot sequence and stop Apache:

chkconfig httpd off
chkconfig nginx on
chkconfig php-fpm on

Logs

Remember to check nginx, php-fpm and console logs aswell (/var/www/html/pandora_console/pandora_console.log).

Logs de NGINX:

/var/log/nginx/access.log /var/log/nginx/error.log

Logs de php-fpm:

/var/log/php-fpm/www-error.log /var/log/php-fpm/error.log

NGINX and Apache comparative

The target of installing NGINX is the improved load time performance. Here we show a comparative analysis between two identical machines (same RAM, CPU and database), one of them using Apache and the other one using NGINX:

Main access menu: Apache: (4,81s)

Apache1.png


NGINX: (4,46s)

Nginx1.png


Manage Monitoring access: Apache: (5,83s)

Apache2.png


NGINX: (4,84s)

Nginx2.png