Bonjour,
Comme vous pouvez le voir dans le fichier de configuration, j'ai 3 applications web. Comme elles sont installées à partir de leur dépôt, elle se mettent où elles veulent, d'où l'utilisation de alias dans les locations /app1 et /app2.
Le soucis que je rencontre c'est avec php. À la racine ça marche, par contre pour app1 et app2 j'ai juste droit à un joli "file not found" avec au niveau du log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 # /etc/nginx/sites-available/default upstream php-handler { #server 127.0.0.1:9000; server unix:/var/run/php5-fpm.sock; } server{ listen 80; server_name exemple.com www.exemple.com; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; access_log /var/log/nginx/exp.access.log specialLog; location / { root /usr/share/nginx/html; } location /app1 { alias /usr/share/app1/html; index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location /app2 { alias /var/www/app2; } location ~* \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_index index.php; } }
Une solution consisterait à faire des blocs serveur séparés, mais j'aimerai autant l'éviter. le site est en ssl derrière un proxy et avec let's encrypt, j'ai pas la wildcard.
Code : Sélectionner tout - Visualiser dans une fenêtre à part FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.1.1, server: exemple.com, request: "GET /app1/index.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "exemple.com"
Ma question est donc comment je peux configurer les fastcgi_param pour que ça fonctionne ? Parce que je pense que mon problème vient de là, mais je sèche.
Merci
Édit :
J'avance dans mes recherches, "location ~* \.php$" peut être inclus dans location/ puis dans location/app1 and so on.
Php fonctionne mais maintenant Nginx me renvoie un beau 403 sur exemple.com/app1 que je ne comprends pas mais pas sur exemple.com. J'ai les mêmes droits et propriétaires sur /usr/share/nginx et sur /usr/share/app1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 server{ listen 80; ... location / { root /usr/share/nginx/html; location ~* \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_index index.php; } } location /app1 { alias /usr/share/app1/html; location ~* \.php$ { try_files $uri =404; ... fastcgi_index index.php; } } location /app2 { alias /var/www/app2; location ~* \.php$ { try_files $uri =404; ... fastcgi_index index.php; } } }
Edit 2 :
Bon, je commence à comprendre un peu location, alias et root.
Quand on fait
Alors $document_root vaut /usr/share/app1/app1, donc alias doit être /usr/share et j'ai mis toutes les déclarations fastcgi_param directement dans cette location.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 location /app1 { alias /usr/share/app1; .... }
Mon problème n'est pas encore résolu car mon application tierce est structurée comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 location ^~ /app1/ { alias /usr/share; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice fastcgi_pass php-handler; fastcgi_intercept_errors on; }
Et là pas encore trouvé. Une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 /usr --/share ----/app1 ------/html --------/index.php --------/js --------/img --------.... ------/exthtml ------...
Merci
Édit : le dernier
un rewrite et hop ça marche
Bon c'est presque fini reste plus qu'à rajouter un try_file ou peut être un if même si c'est le diable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 location /app1/ { alias /usr/share; rewrite ^(/app1)/(.*)$ $1/html/$2 break; ...
Partager