我正在安装一个网站在一个液滴(数字海洋)。我有一个问题安装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
            }

...

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

.


当前回答

所以这就是最终在我的案例中起作用的重写规则,罪魁祸首 我修改nginx重写规则如下。

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

变得……

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

显然,如果没有last关键字,请求就不会重新启动,因此它永远不会到达.php位置段,而是简单地解释为下载-

其他回答

如果还有什么对你没用的话。也许之前你用info。php测试文件安装了apache2。只需清除本地主机的应用程序数据(缓存,cookie)。

上面的答案似乎超出了我的解决方案。这是我的文件:

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

希望这能帮助那些在周日下午感到沮丧的人(c:

还有一件事需要检查:如果你在设置PHP之前设置了HTTPS访问——我使用certbot——你需要在/etc/nginx/sites-available/default中进行两次更改,因为将有两个服务器块(一个在端口80上侦听,一个在端口443上侦听)。

(我设置这个服务器主要是为了电子邮件,当我第一次安装nginx时,我没有任何PHP的用途,只是为了更容易地运行certbot。)

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

上面的代码片段在php7.2的情况下对我有用

我在这个问题上挣扎了很长时间,这些步骤对我很有效。

步骤1:所有PHP文件的位置块配置

location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
}

步骤2:在配置文件中添加fastcgi_param 我们只需要打开/etc/nginx/fastcgi_params文件,并在文件末尾添加以下一行。

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

然后重新启动服务,

systemctl restart php7.3-fpm
systemctl restart nginx