2be84eddf23e24bf937a4ce46436fc352cac2654
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 |