可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am installing a website in a droplet (Digital Ocean). I have a issue for install NGINX with PHP properly. I did a tutorial https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04 but when I try to run some .php file it's just downloading it...
for example... http://5.101.99.123/info.php
it's working but... If I go to the main http://5.101.99.123
it's downloading my index.php :/
Any idea?
-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
My /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
}
...
Others "location" are commented (#)
回答1:
Try this:
Edit /etc/nginx/sites-available/default
Uncomment both listen lines to make nginx listen on port 80 IPv4 and IPv6.
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6
Leave server_name
alone
# Make site accessible (...)
server_name localhost;
Add index.php
to the index
line
root /usr/share/nginx/www;
index index.php index.html index.htm;
Uncomment 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;
}
Edit /etc/php5/fpm/php.ini
and make sure cgi.fix_pathinfo
is set to 0
Restart nginx and php5-fpm (if you don't know how to do it, restart the server)
I have just started using Linux a week ago, so I really hope to help you on this. I am using nano text editor to edit the files. run apt-get install nano if you don't have it. Google on it to know more.
回答2:
You need to add this to /etc/nginx/sites-enabled/default to execute php files on Nginx Server:
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;
}
}
回答3:
I had similar problem which was resolved by emptying the browser cache (also worked fine with different browser).
回答4:
Update nginx config /etc/nginx/sites-available/default or your config file
if you are using php7 use this
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
if you are using php5 use this
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Visit here for complete detail Detail here
回答5:
I had the same issue and none of the answers solved the problem.
I ran:
sudo nginx -t
to test the config file at /etc/nginx/sites-available/default.
It gave me these errors:
nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed
So I went into the config file and on the last line there was
#}
I uncommented, ran the test command again and it worked
回答6:
This workded for me.
1) MyApp file
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 users
Change
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
to
fastcgi_pass unix:/var/run/php5-fpm.sock;
2) Configure cgi.fix_pathinfo
Set cgi.fix_pathinfo to 0
Location:
PHP5
/etc/php5/fpm/php.ini
PHP7
/etc/php/7.0/fpm/php.ini
3) Restart services
FPM
php5 sudo service php5-fpm restart
php7 sudo service php7.0-fpm restart
NGINX
sudo service nginx restart
回答7:
If any of the proposed answers is not working, try this:
1.fix www.conf in etc/php5/fpm/pool.d:
listen = 127.0.0.1:9000;(delete all line contain listen= )
2.fix nginx.conf in 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. fix default file in etc/nginx/site-available
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
4.restart nginx service
sudo service nginx restart
5.restart php service
service php5-fpm restart
6.enjoy
Create any php file in /usr/share/nginx/html and run in "server_name/file_name.php"
(server_name depend on your config,normaly is localhost, file_name.php is name of file which created in /usr/share/nginx/html ).
I am using Ubuntu 14.04
回答8:
For me it helped to add ?$query_string
at the end of /index.php, like below:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
回答9:
The answer above seemed to comment out too much for the solution I reached. This is what my file looked like:
/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;
}
Hope this helps some folks who are frustrated on a sunday afternoon (c:
回答10:
My solution was to add
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;
to my custom configuration file, for example etc/nginx/sites-available/example.com.conf
Adding to /etc/nginx/sites-available/default
didn't work for me.
回答11:
I my case I was not using /etc/nginx/sites-available/default
I was using a different server block configuration file (e.g. example.com), and the only way I was able to fix this problem is by removing the default server block configuration file symbolic link:
$ rm /etc/nginx/sites-enabled/default
then reloading Nginx:
$ sudo systemctl reload nginx
回答12:
What worked for me with Ubuntu 16.04, and php7 was deleting this line
fastcgi_split_path_info ^(.+\.php)(/.+)$;
It stopped downloading php files after that.
回答13:
For anyone having same issue with PHP 7, this is what I done to make nginx execute php files properly in CentOS 7, posted here so in case of anyone having same problem:
Follow step by step this document on Digital Ocean.
Open the /etc/nginx/conf.d/default.conf
(by default I don't have sites-enabled nor sites-available, you can edit accordingly).
Edit the location
parameter as below:
default.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;
}
Restart Nginx and PHP services sudo systemctl restart php-fpm
and sudo systemctl restart nginx
.
Last but most important, clear browser cache or running in incognito (Chrome)
or Private Browsing (Firefox)
etc...
Hope this helpful and happy coding
回答14:
Uncomment the .php location in /etc/nginx/sites-available/default
sudo vi /etc/nginx/sites-available/default:
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;
}
回答15:
If anything else doesn't help you. And maybe earlier you installed apache2 with info.php test file. Just clear App Data (cache,cookie) for localhost.
回答16:
check your nginx config file extension is *.conf.
for example: /etc/nginx/conf.d/myfoo.conf
I got the same situation. After I rename the my config file from myfoo to myfoo.conf, it fixed.
Do not forget to restart nginx after rename it.
回答17:
First you have to Remove cache
in your browser
Then open terminal and run the following command:
sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default
Then add the following code in the default
file:
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;
}
}
If any mismatch just correction and restart Nginx from terminal by the following command
sudo systemctl restart nginx
Then go to browser and Enjoy ...
回答18:
For me it was the line:
fastcgi_pass unix:/var/run/php5-fpm.sock;
which had to be just:
fastcgi_pass unix:/run/php5-fpm.sock;