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 nginx: http://wiki.nginx.org/NginxFr
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
Installation de MySql
1 | apt-get install mysql-server mysql-client |
Lors de l’installation, un mot de passe root sera demander.
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:
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
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
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; }
|