Nginx的供应.php文件的下载,而不是执行它们Nginx的供应.php文件的下载,而不是执行它们

2019-05-09 09:22发布

我在液滴(数字海洋)安装一个网站。 我有一个用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的/网站可用/默认

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
            }

......其他“位置”的注释(#)

Answer 1:

试试这个:

  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. 离开server_name单独

     # Make site accessible (...) server_name localhost; 
  4. 添加index.phpindex线

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

  7. 重启nginx的和PHP5-FPM sudo service nginx restart && sudo service php5-fpm restart


使用Linux我刚开始一个星期前,所以我真的希望能帮助你在这。 我使用的纳米文本编辑器来编辑文件。 运行apt-get安装纳米,如果你不拥有它。 谷歌在它知道更多。



Answer 2:

你需要把它添加到/ etc / nginx的/ /默认的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;
    }
}


Answer 3:

我有类似的问题,这是通过清空浏览器缓存解决(也工作得很好用不同的浏览器)。



Answer 4:

更新nginx的配置在/ etc / nginx的/网站可用/默认或您的配置文件

如果你正在使用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;
    }

点击这里查看完整的细节在这里详细



Answer 5:

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

我跑:

sudo nginx -t

测试在在/ etc / nginx的/网站可用/默认的配置文件。

它给了我这些错误:

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

于是我走进了配置文件,在最后一行有

#}

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



Answer 6:

这workded我。

1)MyApp的文件

VI的/ etc / nginx的/网站可用/对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)配置cgi.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


Answer 7:

如果有任何建议的答案不工作,试试这个:

1.fix www.conf在等/ PHP5 / FPM / pool.d:

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

在USR /本地/ nginx的/ conf目录2.fix 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.修复默认的文件/ nginx的/站点可用

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

4.restart nginx的服务

须藤服务nginx的重启

5.重新启动PHP服务

服务PHP5-FPM重启

6.enjoy

创建在/ usr /共享/ nginx的/ HTML任何PHP文件,并在“服务器名称/ file_name.php”(服务器名上你的配置运行取决于normaly为localhost,file_name.php是建立在/ usr /共享/ nginx的文件名/ HTML)。

我使用Ubuntu 14.04



Answer 8:

对我来说,它有助于增加?$query_string在的index.php的结束,象下面这样:

location / {
        try_files $uri $uri/ /index.php?$query_string;
}


Answer 9:

我看到很多上述解决方案和许多正确的工作对我来说,但我不明白他们在做什么,担心只是复制粘贴代码,具体的fastcgi。 因此,这里是我的2美分,

  1. nginx的是一个网络浏览器 (而不是应用程序的浏览器 ),因此,它只能提供静态页面。
  2. 无论何时,我们试图渲染/返回PHP文件,例如index.php文件,nginx的不知道该怎么办,因为它只是不明白一个PHP文件(或与此有关的任何除了延长从少数喜欢的.html,.js文件等,这些静态文件)
  3. 因此,为了运行其他类型的文件,我们需要的东西,nginx的和应用程序(这里的PHP应用程序)之间坐镇。 这是通用网关接口(CGI)的用武之地。它是一个软件管理该通信。 的CGI可以在任何可能的Python语言(uWSGI),PHP(FPM),甚至C. FastCGI的基本上是CGI的升级版本,它比CGI多更快实现。

对于一些人,如Apache服务器,有内置支持来解释PHP,因此无需使用CGI。

这个数字海洋链接 ,介绍了步骤来安装FPM非常好,我不写解决的PHP文件的问题所需要的步骤下载得到的,而不是因为其他的答案恕我直言相当不错的渲染。



Answer 10:

上面的答案似乎注释掉太多我到了解决方案。 这是我的文件看起来像:

在/ 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:



Answer 11:

我的解决办法是添加

    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;

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

添加到/etc/nginx/sites-available/default并没有为我工作。



Answer 12:

我没有使用我我的情况下/etc/nginx/sites-available/default我使用的是不同的服务器模块的配置文件(例如:example.com),我是能够解决这个问题的唯一途径是通过删除默认的服务器块配置文件符号链接:

$ rm /etc/nginx/sites-enabled/default

然后重装Nginx的:

$ sudo systemctl reload nginx


Answer 13:

什么工作对我来说与Ubuntu 16.04和PHP7删除此行

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

它停止后下载PHP文件。



Answer 14:

另外,具有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

  • 最后,但最重要的,要清除浏览器缓存或运行incognito (Chrome)Private Browsing (Firefox)等...

希望这会有所帮助和快乐编码



Answer 15:

取消注释在/ etc / nginx的/网站可用/默认的.PHP位置

sudo的VI的/ etc / nginx的/网站可用/默认:

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


Answer 16:

如果什么都没有帮你。 也许你前面安装了info.php的测试文件的Apache2。 只需清除应用数据(高速缓存,饼干)本地主机。



Answer 17:

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

我得到了同样的情况。 之后,我从myfoo重命名我的配置文件,以myfoo.conf,它修好。 不要忘记重启nginx的后重命名。



Answer 18:

首先,你必须Remove cache在浏览器

然后打开终端,运行下面的命令:

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

须藤systemctl重启nginx的

然后去到浏览器和享受...



Answer 19:

对我来说,这是行:fastcgi_pass UNIX:/var/run/php5-fpm.sock;

这必须是刚:fastcgi_pass UNIX:/run/php5-fpm.sock;



Answer 20:

我正要去找心理试图解决这一问题,对我来说,问题是,CloudFlare的缓存了php文件,并保持让我下载。

对我来说,修复就是清除上CloudFlare的缓存。



Answer 21:

我一直有什么解决的正是这种服务块同样的问题也有上述其他位置的块该块,如果你有CSS不加载的问题。 这是我加入到我的网站,提供的conf文件。

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


Answer 22:

因此,这是最后在我的情况下担任重写规则,其中的罪魁祸首
我改变了nginx的重写规则如下..

   location /vendors { rewrite ^/vendors/?$ /vendors.php break; } 

成为...

  location /vendors { rewrite ^/vendors/?$ /vendors.php last; }

显然,没有最后的关键字,请求没有得到重新启动,所以它永远不会打.php位置段,并简单地理解为下载-



文章来源: Nginx serves .php files as downloads, instead of executing them