我正在安装一个网站在一个液滴(数字海洋)。我有一个问题安装NGINX与PHP正确。我做了一个教程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,它会下载index.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

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
            }

...

其他“地点”被评论为……

.


当前回答

对我来说,它有助于在/index.php的末尾添加?$query_string,如下所示:

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

其他回答

对于任何与php7有同样问题的人,这是我所做的让nginx在CentOS 7中正确执行PHP文件,张贴在这里,以防任何人有同样的问题:

按照这个数字海洋的文件一步一步。 打开/etc/nginx/conf.d/default.conf(默认情况下我没有站点启用或站点可用,你可以相应地编辑)。 编辑位置参数如下:

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 -fpm和sudo systemctl Restart Nginx。 最后但最重要的是,清除浏览器缓存或运行在隐身(Chrome)或私人浏览(Firefox)等…

希望这有助于和快乐的编码

对我来说,它有助于在/index.php的末尾添加?$query_string,如下所示:

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

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

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

然后重新加载Nginx:

$ sudo systemctl reload nginx

如果你提出的任何答案都不管用,试试这个:

1.修复etc/php5/fpm/pool.d中的www.conf:

Listen = 127.0.0.1:9000;(删除所有包含Listen =的行)

2.修复usr/local/nginx/conf中的nginx.conf

删除块html{}中的服务器块server{}(如果存在),因为我们默认使用server{}(配置文件etc/nginx/site-available),它包含在nginx.conf中。

3.修复etc/nginx/site-available中的默认文件

位置~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index . php。 包括fastcgi_params; }

4.重新启动nginx服务

Sudo服务nginx重启

5.重启PHP服务

Service php5-fpm restart

6.享受

在/usr/share/nginx/html目录下创建任意php文件,然后运行server_name/file_name.php (server_name取决于你的配置,通常是localhost, file_name.php是在/usr/share/nginx/html中创建的文件名)。

我使用的是Ubuntu 14.04

我看到了上面的很多解决方案,其中许多对我来说是正确的,但我不明白他们在做什么,担心只是复制粘贴代码,特别是fastcgi。这是我的2美分,

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.

对于某些服务器,如Apache,有内置的支持来解释PHP,因此不需要CGI。

这个数字海洋链接,很好地解释了安装FPM的步骤,我没有写解决php文件下载而不是渲染问题所需的步骤,因为其他答案IMHO很好。