Nginx exécute tous les fichiers PHP, sauf index.php

Donc, sur mon serveur, j’ai un fichier info.php, que je peux utiliser très bien et dont la lecture semble bonne. Je peux également exécuter plusieurs autres fichiers, sans poser de questions. Buuuuut, index.php me parvient sous la forme d’un fichier contenant tout le code brut PHP, ce qui est très mauvais. En plus de cela, allez à la page de base, ne pas utiliser un seul fichier, surtout pas index.php.

Voici ma configuration nginx:

server { server_name somedamnserver; root /var/www; index index.php index.html; location / { # This is cool because no php is touched for static content try_files $uri $uri/ /index.php; } location ~ \.php$ { #fastcgi_split_path_info ^(.+\.php)(/.+)$; #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_intercept_errors on; include fastcgi_params; } } 

Mes fichiers php.ini et fpm / pool.d / www.conf semblent être correctement configurés, mais je peux également les lier ici.

Je suis à mes esprits fin ici, je ne peux tout simplement pas comprendre pourquoi ce tyran d’un serveur ferait cela à moi peu. 🙁

Il est causé par deux problèmes.

Tout d’abord, lorsque vous try_files $uri $uri/ /index.php; parce que index.php est le dernier élément, nginx traite tout le bloc de serveur.

Deuxièmement, parce que le premier bloc de localisation est / qui correspond à /index.php , sur le second retraité en tant que fichier brut.

Vous n’avez certainement pas envie d’écrire vos blocs comme vous l’avez fait. Vous devriez indiquer explicitement quels sont vos types de contenu statique, qui sont affichés sous forme de fichiers bruts sur le serveur. Tout le rest devrait être transmis au backend PHP. par exemple

 location ~* ^[^\?\&]+\.(html|jpg|jpeg|json|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|svg|woff|ttf)$ { try_files $uri /index.php?file=$1; #access_log off; expires 24h; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } location / { #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini set $originalURI $uri; try_files $uri /index.php /50x_static.html; fastcgi_param QUERY_STRING q=$originalURI&$query_ssortingng; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_intercept_errors on; include fastcgi_params; } 

S’il vous plaît noter dans le dernier bloc, il y a un petit pokery jiggery pour préserver la chaîne de requête, dont vous pouvez ou non avoir besoin.

btw permettant d’activer rewrite_log on; peut vous aider à résoudre des problèmes similaires comme ceux-ci.

Après avoir étudié les journaux, j’ai découvert le problème réel, grâce à Danack pour avoir suggéré l’option de réécriture du journal. Le problème était donc principalement lié aux dépendances PHP, comme php5-json et php5-mysql pour être plus précis (ne sachant pas comment les désinstallés) et pour finir avec un problème d’installation du serveur mysql, cela signifie apparemment que 127.0. 0.1 et localhost ne sont pas les mêmes choses.

Apparemment, la raison pour laquelle la page était vide ou inexistante est que la page d’erreur 500 est manquante ou vide dans mon installation.

J’espère que cela aide d’autres personnes, j’ai lutté avec cela pendant une petite semaine maintenant.

Mise à jour: Encore une fois cudos à Danack qui a essentiellement écrit cette configuration. C’est la configuration de travail que j’utilise actuellement, même si elle n’est pas très sûre, elle fonctionne. Les deux types de solutions de type de fichier sont nécessaires ou vous ne pourrez pas accéder à ce contenu statique. La compression automatique est activée, mais il est conseillé d’y append des ressortingctions et même de définir le contenu à inclure.

 server { server_name somedamnserver; root /var/www; rewrite_log on; gzip_static on; # This is file type association solution 1 # location ~ \.css { # add_header Content-Type text/css; # } # location ~ \.js { # add_header Content-Type application/x-javascript; # } # This is file type association solution 2 location ~* ^[^\?\&]+\.(html|jpg|jpeg|json|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|svg|woff|ttf)$ { try_files $uri /index.php?file=$1; #access_log off; expires 24h; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } # This will make PHP files run as intended, I have uncommented a few options as I do not need them. location / { #set $originalURI $uri; try_files $uri /index.php /50x_static.html; #fastcgi_param QUERY_STRING q=$originalURI&$query_ssortingng; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; #fastcgi_intercept_errors on; include fastcgi_params; } }