Guides/Configuration-dun-serveur-nginx-plus-PHP.md
... ...
@@ -0,0 +1,104 @@
1
+On travail ici sur un serveur vierge, sous debian 8 (jessie).
2
+
3
+On commence donc par faire une actualisation des dépots distants.
4
+
5
+`sudo apt update`
6
+
7
+# Installation de nginx
8
+
9
+nginx est inclut par défaut dans les dépôts Debian, on exécute alors
10
+
11
+`sudo apt install nginx`
12
+
13
+# Installation de PHP
14
+Depuis la version 8 de debian, php n'est plus disponible par défaut dans les dépôts. Il faut les ajouter à la main. Afin de ne pas installer n'importe quoi (les dépôts et versionde PHP par défaut changeant régulièrement), il est conseillé de consulter la documentation officielle afin d'avoir le dépôt correct.
15
+
16
+Ici, nous allons utiliser le dépôt DotDeb, la configuration détaillé est disponible [ici](https://angristan.fr/installer-php-7-debian-8-jessie-depot-dotdeb/)
17
+
18
+C'est partie, on commence par ajouter la ligne suivante au fichier `/etc/apt/sources.list` :
19
+
20
+`deb http://packages.dotdeb.org jessie all`
21
+
22
+On update
23
+
24
+`sudo apt update`
25
+
26
+On utilise Nginx, celui-ci ne possède pas de modèle préconfigurer pour PHP, comme peut l'avoir Apache. On doit donc installer php en Fast-CGI. Pour cela installons les dépendances suivantes :
27
+
28
+`sudo apt install php7.0 php7.0-fpm`
29
+
30
+> NOTE : En janvier 2017, le paquet php7.0 correspondait à la version la plus stable et la plus récente de PHP
31
+
32
+# Configuration de Nginx
33
+
34
+Un peu de culture : Sous Apache, la relation entre PHP et Apache se fait grâce à un sous programme nommé "mod_php", celui-ci permet a Apache d’interpréter directement le code PHP. Nginx ne possède pas ce sous-programme, il va alors devoir envoyer la requête à PHP via son interface Fast-CGI, qui va l'interpréter lui-même et renvoyer le résultat à Nginx, puis à l'utilisateur. Nous devons donc configurer Nginx afin qu'il sache comment communiquer avec PHP.
35
+
36
+
37
+Commençons par creer notre server-block, pour les familier d'Apache, unserver-block est l'équivalent d'un VirtualHost. Comme je cherche ici à installer le site de la télévision, je créer le fichier
38
+
39
+`sudo vim /etc/nginx/sites-available/tv_resel.conf`
40
+
41
+voici la configuration la plus simple d'un server block :
42
+
43
+ http {
44
+ index index.html;
45
+
46
+ server {
47
+ listen 80 default_server;
48
+ server_name _; # This is just an invalid value which will never trigger on a real hostname.
49
+ access_log logs/default.access.log main;
50
+
51
+ server_name_in_redirect off;
52
+
53
+ root /var/www/default/htdocs;
54
+ }
55
+ }
56
+
57
+> Pour plus d'infos, voir [ici](https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/)
58
+
59
+Comme j'utilise le framework Symfony, je vais utiliser le modèle donné sur [la documentation officielle](http://symfony.com/doc/current/setup/web_server_configuration.html) :
60
+
61
+ server {
62
+ server_name domain.tld www.domain.tld;
63
+ root /var/www/project/web;
64
+
65
+ location / {
66
+ try_files $uri /app.php$is_args$args;
67
+ }
68
+
69
+ location ~ ^/app\.php(/|$) {
70
+ fastcgi_pass unix:/var/run/php5-fpm.sock;
71
+ fastcgi_split_path_info ^(.+\.php)(/.*)$;
72
+ include fastcgi_params;
73
+ fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
74
+ fastcgi_param DOCUMENT_ROOT $realpath_root;
75
+ internal;
76
+ }
77
+
78
+ location ~ \.php$ {
79
+ return 404;
80
+ }
81
+
82
+ error_log /var/log/nginx/project_error.log;
83
+ access_log /var/log/nginx/project_access.log;
84
+ }
85
+
86
+Dans tous les cas, la configuration du fast-cgi ce fera grâce aux lignes suivantes, disposées dans un block "location"
87
+
88
+ fastcgi_pass unix:/run/php/php7.0-fpm.sock;
89
+ fastcgi_index index.php;
90
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
91
+ include fastcgi_params;
92
+ fastcgi_intercept_errors on;
93
+ fastcgi_ignore_client_abort off;
94
+ fastcgi_connect_timeout 60;
95
+ fastcgi_send_timeout 180;
96
+ fastcgi_read_timeout 180;
97
+ fastcgi_buffers 4 256k;
98
+ fastcgi_buffer_size 128k;
99
+ fastcgi_busy_buffers_size 256k;
100
+ fastcgi_temp_file_write_size 256k;
101
+
102
+> NOTE : Ceci est un exemple
103
+
104
+La ligne `fastcgi_pass unix:/run/php/php7.0-fpm.sock;` étant a modifier suivant votre version de php (typiquement `fastcgi_pass unix:/var/run/php5-fpm.sock;` pour PHP5)
... ...
\ No newline at end of file