Nginx提供.php文件作为下载,而不是执行它们

我在一个液滴(数字海洋)安装一个网站。 我有一个与PHP正确安装NGINX的问题。 我做了一个教程https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04但是当我尝试运行一些.php文件只是下载它…例如… http://5.101.99.123/info.php它的工作,但是…如果我去主要http://5.101.99.123它下载我的索引。 php:/

任何想法?

 -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 

我的/ 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 } 

…其他“位置”被评论(#)

尝试这个:

  1. 编辑/ etc / nginx / sites-available / default

  2. 取消两条监听线的注释,使nginx监听端口80的IPv4和IPv6。

     listen 80; ## listen for ipv4; this line is default and implied listen [::]:80 default_server ipv6only=on; ## listen for ipv6 
  3. 单独保留服务器名称

     # Make site accessible (...) server_name localhost; 
  4. 将index.php添加到索引行

     root /usr/share/nginx/www; index index.php index.html index.htm; 
  5. 取消注释位置〜.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; } 
  6. 编辑/etc/php5/fpm/php.ini并确保cgi.fix_pathinfo设置为0

  7. 重新启动nginx和php5-fpm(如果你不知道该怎么做,重启服务器)

我一个星期前刚刚开始使用Linux,所以我真的希望能在这方面为您提供帮助。 我正在使用纳米文本编辑器来编辑文件。 如果你没有,运行apt-get install nano。 谷歌就知道更多。

你需要编辑/ etc / nginx / sites-enabled / default,并在默认文件中添加这个代码以在Nginx服务器上执行php文件

 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; } } 

我有类似的问题,这是通过清空浏览器caching解决(也适用于不同的浏览器)。

我有同样的问题,没有答案解决了这个问题。

我跑了:

 sudo nginx -t 

在/ etc / nginx / sites-available / default下testingconfiguration文件。

它给了我这些错误:

 nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115 nginx: configuration file /etc/nginx/nginx.conf test failed 

所以我进入了configuration文件,最后一行是

 #} 

我取消注释,再次运行testing命令,它的工作

如果任何build议的答案不起作用,请尝试以下操作:

1.fix http://www.conf中的etc / php5 / fpm / pool.d:

listen = 127.0.0.1:9000;(delete all line contain listen= )

2.在usr / local / nginx / conf中修改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.修复etc / nginx / site-available中的默认文件

location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; }

4.重新启动nginx服务

sudo服务nginx重启

5.重新启动php服务

服务php5-fpm重启

6.enjoy

在/ usr / share / nginx / html中创build任何php文件并在“server_name / file_name.php”中运行(server_name取决于你的configuration,通常是localhost,file_name.php是在/ usr / share / nginx中创build的文件的名称/ html)。

我正在使用Ubuntu 14.04

更新nginx config / etc / nginx / sites-available / default或你的configuration文件

如果你正在使用php7使用这个

  location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } 

如果你使用php5使用这个

  location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } 

访问这里获取完整的详细信息

上面的答案似乎对我所达成的解决scheme有太多的评论。 这是我的文件看起来像:

在/ etc / nginx的/网站可用/默认

 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; } 

希望这可以帮助一些在星期天下午感到沮丧的人(c:

我的解决scheme是添加

  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; 

到我的自定义configuration文件,例如etc/nginx/sites-available/example.com.conf

添加到/etc/nginx/sites-available/default对我不起作用。

Ubuntu 16.04对我来说有效,而php7正在删除这一行

fastcgi_split_path_info ^(.+\.php)(/.+)$;

之后停止下载php文件。

对于任何人有与PHP 7相同的问题,这是我做了让nginx在CentOS 7中正确执行php文件,在这里发布,以便任何人遇到同样的问题:

  • 按照数字海洋上的这个文件逐步进行。

  • 打开/etc/nginx/conf.d/default.conf (默认情况下,我没有启用网站,也没有网站可用,您可以相应地进行编辑)。

  • 编辑location参数如下:

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; } 
  • 重新启动Nginx和PHP服务sudo systemctl restart php-fpmsudo systemctl restart nginx

  • 最后但也是最重要的是,清除浏览器caching或运行在incognito (Chrome)Private Browsing (Firefox)等…

希望这个有用和快乐的编码

取消/ etc / nginx / sites-available / default中的.php位置注释

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; } 

如果还有什么不能帮助你。 也许以前你用info.phptesting文件安装了apache2。 只需清除本地主机的应用程序数据(caching,cookie)即可。

检查你的nginxconfiguration文件扩展名是* .conf。
例如:/etc/nginx/conf.d/myfoo.conf

我得到了同样的情况。 在将我的configuration文件从myfoo重命名为myfoo.conf之后,它被修复了。 重命名后不要忘记重新启动nginx。

首先,您必须在浏览器中Remove cache

然后打开terminal并运行以下命令:

 sudo apt-get install php-gettext sudo nano /etc/nginx/sites-available/default 

然后将下面的代码添加到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; } } 

如果出现任何不匹配的情况,请通过以下命令修改并重新启动Nginx

sudo systemctl重启nginx

然后去浏览器和享受…

这为我工作。

1)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用户

更改

 fastcgi_pass unix:/run/php/php7.0-fpm.sock; 

 fastcgi_pass unix:/var/run/php5-fpm.sock; 

2)configurationcgi.fix_pathinfo

将cgi.fix_pathinfo设置为0

位置:

PHP5 /etc/php5/fpm/php.ini

PHP7 /etc/php/7.0/fpm/php.ini


3)重新启动服务

FPM

php5 sudo service php5-fpm restart

php7 sudo service php7.0-fpm restart

NGINX

 sudo service nginx restart