I am installing a website in a droplet [Digital Ocean]. I have an issue for install NGINX with PHP properly. I did a tutorial
//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 files it's just downloading it... for example... //5.101.99.123/info.php
it's working but... If I go to the main //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 //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
}
...
Other "locations" are commented on...
.
Jai Chauhan
3,6623 gold badges34 silver badges55 bronze badges
asked Aug 31, 2014 at 10:24
9
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 theindex
lineroot /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 surecgi.fix_pathinfo
is set to0
Restart Nginx and php5-fpm
sudo service nginx restart && sudo service php5-fpm restart
I just started using Linux a week ago, so I really hope to help you with this. I am using a nano text editor to edit the files. run apt-get install nano if you don't have it. Google it to know more.
Jai Chauhan
3,6623 gold badges34 silver badges55 bronze badges
answered Oct 31, 2014 at 6:05
Jack M.Jack M.
3,5184 gold badges23 silver badges36 bronze badges
15
I had similar problem which was resolved by emptying the browser cache [also worked fine with different browser].
answered Jan 24, 2017 at 20:51
np8np8
23.1k10 gold badges79 silver badges89 bronze badges
7
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;
}
}
Jai Chauhan
3,6623 gold badges34 silver badges55 bronze badges
answered Feb 21, 2015 at 9:38
rootxrootx
7376 silver badges11 bronze badges
9
I see a lot of solutions above and many worked correctly for me, but I didn't understand what they were doing and was worried of just copy pasting the code, specifically, fastcgi. So here are my 2 cents,
- nginx is a web server [and not an application server] and thus, it can only serve static pages.
- whenever, we try rendering/returning a .php file, for example index.php, nginx doesn't know what to do, since it just can't understand a .php file [or for that matter any extension apart from a select few like .html, .js etc. which are static files]
- Thus in order to run other kinds of files we need something that sits between nginx and the application [here the php application]. This is where common gateway interface [CGI] comes in. It's a piece of software that manages this communication. CGIs can be implemented in any possible language Python [uWSGI], PHP [FPM] and even C. FastCGI is basically an upgraded version of CGI which is much much faster than CGI.
For some, servers like Apache, there is built in support to interpret PHP and thus no need for a CGI.
This digital ocean link, explains the steps to install FPM pretty well and I am not writing the steps needed to solve the issue of php files getting downloaded instead of rendering since the other answers IMHO pretty good.
answered Feb 11, 2019 at 17:19
codacoda
1,9022 gold badges20 silver badges24 bronze badges
3
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
answered Mar 14, 2017 at 11:58
M ArfanM Arfan
4,1574 gold badges27 silver badges44 bronze badges
3
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
answered Jul 1, 2017 at 18:05
1
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
answered Aug 20, 2017 at 19:46
SlimxSlimx
851 silver badge4 bronze badges
1
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;
}
answered Nov 21, 2017 at 23:35
TomegTomeg
5,3992 gold badges12 silver badges9 bronze badges
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.php index.html index.htm;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
The above snippets worked for me in case of php7.2
answered Oct 13, 2019 at 4:03
Avnee.AngelAvnee.Angel
1071 gold badge3 silver badges16 bronze badges
1
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
answered Aug 31, 2015 at 19:19
huuthanghuuthang
4461 gold badge4 silver badges11 bronze badges
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:
answered May 17, 2015 at 23:24
0
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
andsudo systemctl restart nginx
.Last but most important, clear browser cache or running in
incognito [Chrome]
orPrivate Browsing [Firefox]
etc...
Hope this helpful and happy coding
answered Feb 11, 2017 at 7:43
SonDangSonDang
1,4191 gold badge15 silver badges20 bronze badges
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.
answered Jun 9, 2017 at 9:33
Kelvin LowKelvin Low
6349 silver badges22 bronze badges
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
answered Aug 8, 2018 at 19:25
WaqlehWaqleh
9,3508 gold badges64 silver badges100 bronze badges
0
So this is what finally worked in my case as rewrite rules where the culprit
I changed the nginx rewrite rules as follows..
location /vendors { rewrite ^/vendors/?$ /vendors.php break; }
becomes...
location /vendors { rewrite ^/vendors/?$ /vendors.php last; }
Apparently without the last keyword, the request didn't get restarted, so it never hit the .php
location segment, and was simply interpreted as a download –
answered Mar 19, 2019 at 21:51
I solved my problem now with this code [change your IP]:
location / {
access_log off;
log_not_found off;
client_max_body_size 2000m;
client_body_buffer_size 512k;
proxy_buffering on;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_buffer_size 64k;
proxy_buffers 32 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_connect_timeout 300s;
proxy_http_version 1.1;
proxy_set_header Range "";
proxy_pass //123.123.123.123:444;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
answered Aug 31, 2019 at 6:05
AndréAndré
214 bronze badges
For the record, I found that my php-fpm was not running and I fixed it with service php7.2-fpm start
.
answered Jul 23, 2019 at 15:00
IslamTahaIslamTaha
8767 silver badges15 bronze badges
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.
answered May 26, 2016 at 10:04
briankipbriankip
2,4062 gold badges22 silver badges26 bronze badges
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;
}
answered Mar 16, 2017 at 9:11
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.
answered Jul 10, 2017 at 13:51
Al CheAl Che
691 gold badge1 silver badge5 bronze badges
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.
answered Jul 18, 2017 at 8:48
IvanIvan
212 bronze badges
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 ...
answered Aug 8, 2017 at 8:56
SanaullaSanaulla
1,10911 silver badges11 bronze badges
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;
answered May 26, 2018 at 14:18
I was about to go mental trying to fix this, for me the issue was that Cloudflare had cached the php file and kept making me download it.
The fix for me was to purge the cache on Cloudflare.
answered Feb 4, 2019 at 2:23
1
I had been having the same problem what solved it was this server block also have this block above other location blocks if you have css not loading issues. Which I added to my sites-available conf file.
location ~ [^/]\.php[/|$] {
fastcgi_split_path_info ^[.+\.php][/.+]$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
answered Mar 1, 2019 at 9:51
One more thing to check: if you've set up HTTPS access before setting up PHP -- I used certbot -- you'll need to make the changes in /etc/nginx/sites-available/default twice because there will be two server blocks [one listening on port 80 and one listening on port 443].
[I was setting up this server primarily for email and didn't have any use for PHP when I first installed nginx just as a way to run certbot more easily.]
answered Jul 11, 2020 at 20:19
I was struggling with the issue for long time, and these steps worked for me.
Step 1: Location block config for all PHP files
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Step 2: Add the fastcgi_param in the config file We just have to open the /etc/nginx/fastcgi_params file and add the below line at the end of the file.
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
And then restart the services,
systemctl restart php7.3-fpm
systemctl restart nginx
answered Apr 17, 2021 at 13:47
I installed PHP with homebrew on Mac, in my case php-fpm service was not running.
brew services list
Started the service and php scripts begin to execute.
brew services start php
My fastcgi settings in nginx server location block
location ~ \.php$ {
...
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
...
}
answered Sep 19, 2021 at 19:46
AamirRAamirR
10.9k4 gold badges52 silver badges69 bronze badges
Emptying the browser cache worked for me.
answered Mar 29 at 13:18
1