NGINX sert.fichiers php comme téléchargements, au lieu de les exécuter
J'installe un site Web dans une gouttelette (océan numérique). J'ai un problème pour installer NGINX avec PHP correctement. J'ai fait un tutoriel https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04 mais quand j'essaie d'exécuter certains .fichier php il est juste de le télécharger...
exemple... http://5.101.99.123/info.php
ça marche mais... Si je vais à la main http://5.101.99.123
il télécharge mon index.php: /
Une idée?
-rw-r--r-- 1 agitar_user www-data 418 Jul 31 18:27 index.php
-rw-r--r-- 1 agitar_user www-data 21 Aug 31 11:20 info.php
Mon /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.html index.htm index.php;
# Make site accessible from http://localhost/
server_name agitarycompartir.com;
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location / {
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
... D'autres "localisation" sont commentées (#)
18 réponses
, Essayez ceci:
Modifier
/etc/nginx/sites-available/default
-
Décommentez les deux lignes d'écoute pour faire écouter nginx sur le port 80 IPv4 et IPv6.
listen 80; ## listen for ipv4; this line is default and implied listen [::]:80 default_server ipv6only=on; ## listen for ipv6
-
Laissez
server_name
seul# Make site accessible (...) server_name localhost;
-
Ajouter
index.php
à la ligneindex
root /usr/share/nginx/www; index index.php index.html index.htm;
-
Décommenter
location ~ \.php$ {}
# pass the PHP scripts to FastCGI server listening on (...) # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
Modifiez
/etc/php5/fpm/php.ini
et assurez-vous quecgi.fix_pathinfo
est défini sur0
Redémarrer nginx et php5-fpm (si vous ne savez pas comment le faire, redémarrez l' serveur)
Je viens de commencer à utiliser Linux il y a une semaine, donc j'espère vraiment vous aider à ce sujet. J'utilise Nano text editor pour éditer les fichiers. exécuter apt-get install nano si vous ne l'avez pas. Google pour en savoir plus.
Vous devez ajouter ceci à /etc / nginx / sites-enabled / default pour exécuter des fichiers php sur le serveur Nginx:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
J'ai eu un problème similaire qui a été résolu en vidant le cache du navigateur (a également bien fonctionné avec un navigateur différent).
Mettez à jour nginx config / etc / nginx / sites-available / default ou votre fichier de configuration
Si vous utilisez php7 utilisez ceci
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
Si vous utilisez php5 utilisez ceci
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Visitez ici pour plus de détails détail ici
J'ai eu le même problème et aucune réponse n'a résolu le problème.
, j'ai couru:
sudo nginx -t
Pour tester le fichier de configuration dans /etc / nginx / sites-available / default.
, Il m'a donné ces erreurs:
nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed
Donc je suis allé dans le fichier de configuration et sur la dernière ligne il y avait
#}
J'ai décommenté, relancé la commande de test et cela a fonctionné
Ce workded pour moi.
1) Fichier MyApp
Vi / etc/nginx / sites-available / myApp
server {
listen 80;
listen [::]:80;
root /var/www/myApp;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP5 utilisateurs
Changer
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
À
fastcgi_pass unix:/var/run/php5-fpm.sock;
2) Configurer cgi.fix_pathinfo
Définir cgi.fix_pathinfo à 0
Emplacement:
PHP5 /etc/php5/fpm/php.ini
PHP7 /etc/php/7.0/fpm/php.ini
3) redémarrer les services
FPM
Php5 sudo service php5-fpm restart
Php7 sudo service php7.0-fpm restart
NGINX
sudo service nginx restart
Si aucune des réponses proposées ne fonctionne pas, essayez ceci:
1.fix www.conf dans etc/php5/fpm/pool.d:
listen = 127.0.0.1:9000;(delete all line contain listen= )
2.corrigé de nginx.conf dans/usr / local/nginx/conf:
remove server block server{} (if exist) in block html{} because we use server{} in default (config file in etc/nginx/site-available) which was included in nginx.conf.
3. correction du fichier par défaut dans etc/nginx/site-available
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
4.redémarrer le service nginx
Sudo service NGINX redémarrer
5.redémarrer le service php
Service php5-fpm redémarrer
6.profitez
Créer tout fichier php dans /usr/share/nginx/html et exécuter en "nom_serveur/nom_fichier.php" (server_name dépend de votre config, normalement est localhost, file_name.php est le nom du fichier créé dans / usr / share / nginx / html).
J'utilise Ubuntu 14.04
La réponse ci-dessus semblait trop commenter pour la solution que j'ai atteinte. Voici à quoi ressemblait mon fichier:
/etc/nginx/sites-available/default
location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
J'espère que cela aidera certaines personnes qui sont frustrées un dimanche après-midi (c:
Pour moi, il a aidé à ajouter ?$query_string
à la fin de /index.php, comme ci-dessous:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Ma solution était d'ajouter
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
Pour mon fichier de configuration personnalisé, par exemple etc/nginx/sites-available/example.com.conf
Ajouter à /etc/nginx/sites-available/default
n'a pas fonctionné pour moi.
Ce qui a fonctionné pour moi avec Ubuntu 16.04, et php7 supprimait cette ligne
fastcgi_split_path_info ^(.+\.php)(/.+)$;
Il a cessé de télécharger des fichiers php après cela.
Pour toute personne ayant le même problème avec PHP 7, c'est ce que j'ai fait pour que nginx exécute correctement les fichiers php dans CentOS 7, posté ici donc au cas où quelqu'un aurait le même problème:
Suivez, étape par étape, ce document sur Digital Ocean.
Ouvrez le
/etc/nginx/conf.d/default.conf
(par défaut, je n'ai pas de sites activés ni de sites disponibles, vous pouvez modifier en conséquence).Modifier les
location
paramètres comme ci-dessous:
par défaut.conf :
location ~ \.php$ {
try_files $uri =404;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
#instruct nginx execute php7 files instead download them :D
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Redémarrez les services Nginx et PHP
sudo systemctl restart php-fpm
etsudo systemctl restart nginx
.Dernier mais le plus important, effacer le cache du navigateur ou en cours d'exécution dans
incognito (Chrome)
ouPrivate Browsing (Firefox)
etc...
Espérons que ce codage utile et heureux
Décommenter le .emplacement php dans/etc/nginx / sites-available / default
Sudo vi / etc / nginx / sites-disponible / par défaut:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
Si quelque chose d'autre ne vous aide pas. Et peut-être plus tôt vous avez installé apache2 avec info.fichier de test php. Il suffit d'Effacer les données de L'application (cache,cookie) pour localhost.
Vérifiez que votre extension de fichier nginx config est *.conf.
par exemple: /etc/nginx/conf.d / myfoo.conf
J'ai la même situation. Après avoir renommé le fichier my config de myfoo à myfoo.conf, il fixe. N'oubliez pas de redémarrer nginx après l'avoir renommé.
Vous devez d'Abord
Remove cache
dans votre navigateur
Puis ouvrez terminal et exécutez la commande suivante:
sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default
Ajoutez ensuite le code suivant dans le fichier default
:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
En cas de non-concordance, il suffit de corriger et de redémarrer Nginx à partir du terminal par la commande suivante
Sudo systemctl redémarrer nginx
Ensuite, allez dans le navigateur et profitez-en ...
Pour moi, c'était la ligne: fastcgi_pass unix: / var / run / php5-fpm.chaussette;
, Qui devait être juste: fastcgi_pass unix: / run / php5-fpm.chaussette;
Dans mon cas, je n'utilisais pas /etc/nginx/sites-available/default
j'utilisais un fichier de configuration de bloc de serveur différent (par exemple example.com), et la seule façon de résoudre ce problème est de supprimer le lien symbolique du fichier de configuration du bloc de serveur par défaut:
$ rm /etc/nginx/sites-enabled/default
Puis recharger Nginx:
$ sudo systemctl reload nginx