Amazony.fr

Des astuces de toutes sortes, une forêt d'informations!

Amazony.fr
Serveurs

Installer un serveur web nginx sous ubuntu 12.04

Comment installer un serveur web performant sous ubuntu 12.04

Présentation du serveur web performant: LNMP

LNMP pour Linux Ngnix MySql Php
Le choix du moteur du serveur web est nginx avec les modules php-fpm et php-xcache, et comme serveur de base de donnée le célèbre MySql-server.

Pur plus d’info sur nginxhttp://wiki.nginx.org/NginxFr

nginx server logo

Ici le choix de l’os: Ubuntu serveur 12.04

php-fpm pour Php FastCGI sera le module qui traitera toutes les instructions PHP.
Pour ne pas retraiter des instructions PHP inutilement, le module php-xcache s’occupera donc du cache PHP.

Prérequis

Avoir les droits root
passage en root

1
sudo -s

Mise à jour des paquets

1
apt-get update

Installation de nginx

1
apt-get install nginx

on lance nginx

1
service nginx start

test dans un navigateur de nginx
nginx server web

Installation de MySql

1
apt-get install mysql-server mysql-client

Lors de l’installation, un mot de passe root sera demander.
mysql-server

Puis Sécuriser MySql

Installation de Php

1
apt-get install php5-fpm php5-mysql php5-xcache

Astuce: pour connaitre tous les module Php

1
apt-cache search php5

Configuration de nginx

Les fichiers de configuration des sites disponible se trouve, tout comme pour apache2, dans/etc/nginx/sites-available
Et un lien symbolique de chaque configuration des sites disponibles dans /etc/nginx/site-enabled

Par défaut voici la conf de nginx

1
nano /etc/nginx/sites-enabled/default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6
        root /usr/share/nginx/www;
        index index.html index.htm;
        # Make site accessible from http://localhost/
        server_name localhost;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

Création d’un fichier de configuration pour un site

1
touch /etc/nginx/sites-available/site-web01

Création du lien symbolique

1
ln -s /etc/nginx/sites-available/site-web01 /etc/nginx/sites-enabled/

Création du répertoire pour le site web, exemple:

1
mkdir /home/fred/web/
1
mkdir /home/fred/web/site-web01

Droits pour www-data sur le répertoire

1
chown -R www-data:www-data /home/fred/web/

Création d’une page de test

1
nano /home/fred/web/site-web01/index.html

le code html

1
<html><body>Page de TEST</body></html>

Suppression du fichier de configuration default

1
rm /etc/nginx/sites-enabled/default

Edition du fichier de configuration

1
nano /etc/nginx/sites-enabled/site-web01

Voici un exemple de configuration simple

1
2
3
4
5
6
7
8
9
10
server {
        listen   80;
        root /home/fred/web/site-web01;
        index index.html index.htm index.php;
        # Make site accessible from http://localhost/
        server_name www.domaine.tld;
        location / {
                try_files $uri $uri/ /index.html;
                        }
}

explication:
listen 80: le serveur web écoute sur le port 80
root /home/fred/web/site-web01: chemin du répertoire du site web
index index.html index.htm index.php: prise en charge des formats .html, .htm et .php
server_name www.domaine.tld: pour que le site soit accessible depuis l’extérieur il faut lui renseigner un vrai nom de domaine.
location / {try_files $uri $uri/ /index.html;}: lors de la requête dans le navigateur s’il n’est pas préciser la page, dans ce cas index.html sera appelé.

Test dans le navigateur:
nginx server

Prise en charge du PHP

Edition du fichier de configuration du site

1
nano /etc/ngnix/sites-enabled/site-web01

Ajout de la prise en charge PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
        listen   80;
        root /home/fred/web/site-web01;
        index index.html index.htm index.php;
        # Make site accessible from http://localhost/
        server_name localhost;
        location / {
                try_files $uri $uri/ /index.html;
                        }
        #prise en charge PHP
        location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        include /etc/nginx/fastcgi_params;
        fastcgi_index index.php;
        }
}

Relance de nginx

1
service nginx reload

Edition du fichier index.php

1
nano index.php
1
2
3
<?
phpinfo();
?>

Test dans le navigateur
nginx php

mais le module php-xcache n’est pas encore pris en compte

Prise en charge du module php-xcache

pour ce faire il suffit de relancer php5-fpm

1
service php5-fpm restart

Vérification dans le navigateur avec index.php
nginx xcache

Conclusion

Avec un minimum d’effort, nous voici avec un serveur web performant léger et robuste :-)
A savoir, les principaux site pr0n tournent sous nginx ;-)

Bonus: un fichier de configuration Nginx pour WordPress

A savoir:

  • ici nginx écoute sur le port 8080
  • Mise en cache des fichiers statiques: js|css|png|jpg|jpeg|gif|ico
  • redirection en HTTPS pour wp-admin
  • blocage par .htaccess à l’accès de wp-admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
server {
listen 8080;
server_name memo-linux.com;
root /home/fred/www/blog/;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log error;
index index.php index.phtml index.html
 # Security
        include global/security.conf;
        location / {
                # This is cool because no php is touched for static content.
                # include the "?$args" part so non-default permalinks doesn't break
#when using query string
                try_files $uri $uri/ /index.php?$args;
        }
    # PHP-FPM
    include global/php-fpm.conf;
location ~ /.ht {
    deny all;
}
    # STATICS FILES
        location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}
server
{
listen 443 ssl;
  server_name .memo-linux.com;
  ssl_certificate /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;
  root /var/www;
  index index.php;
  # Process only the requests to wp-login and wp-admin
  location ~ /(wp-) {
                auth_basic            "Acces DENIED!";
                auth_basic_user_file  /home/fred/www/rep01/.htpasswd;
location ~ .php$ {
try_files $uri =404;
      include fastcgi_params;
      fastcgi_index index.php;
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param  QUERY_STRING     $query_string;
      fastcgi_param  REQUEST_METHOD   $request_method;
      fastcgi_param  CONTENT_TYPE     $content_type;
      fastcgi_param  CONTENT_LENGTH   $content_length;
      fastcgi_intercept_errors        on;
      fastcgi_ignore_client_abort     off;
      fastcgi_connect_timeout 60;
      fastcgi_send_timeout 180;
      fastcgi_read_timeout 180;
      fastcgi_buffers 4 256k;
      fastcgi_buffer_size 128k;
      fastcgi_busy_buffers_size 256k;
      fastcgi_temp_file_write_size 256k;
      }
  }
  # Redirect everything else to port 80
location / {
    return 301 http://$host$request_uri;
  }
}

Création du fichier /etc/nginx/global/php-fpm.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
location ~ .php$ {
    # The following line prevents malicious php code to be executed through some uploaded file (without php extension, like image)
    # This fix shoudn't work though, if nginx and php are not on the same server, other options exist (like unauthorizing php execution within upload folder)
    # More on this serious security concern in the "Pass Non-PHP Requests to PHP" section, there http://wiki.nginx.org/Pitfalls
##ATTENTION ici c'est pour la redirection HTTPS!######
location ~ /wp-(admin|login) {
      return 301 https://$host$request_uri;
    }
################################
   try_files $uri =404;
    # PHP
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param  QUERY_STRING     $query_string;
    fastcgi_param  REQUEST_METHOD   $request_method;
    fastcgi_param  CONTENT_TYPE     $content_type;
    fastcgi_param  CONTENT_LENGTH   $content_length;
    fastcgi_intercept_errors        on;
    fastcgi_ignore_client_abort     off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffers 4 256k;
    fastcgi_buffer_size 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
}

 

Laisser un commentaire