nginx+php-fpm下载php(CentOS 7)

nginx+php-fpm下载php(CentOS 7)

我在 Centos 7 上安装了 nginx 和 php-fpm,当我尝试转到测试 php 文件时,它会下载该文件而不是在浏览器中运行和呈现。所有其他 html、图像文件等均显示正常。

如果此问题已在网站上的其他地方得到解答,请原谅我发了此帖,我会删除,但我看到的所有其他帖子都是针对 Ubuntu 的,那里的建议不起作用。我也尝试过暂时禁用 selinux,但结果一样。

在我的 /usr/share/nginx/html/ 目录中,我有一个带有 phpinfo() 函数的 php 文件:

[root@www1 html]# ll /usr/share/nginx/html/
total 24
-rw-r--r--. 1 root root 3650 Oct  4 11:53 404.html
-rw-r--r--. 1 root root 3693 Oct  4 11:53 50x.html
-rw-r--r--. 1 root root 3700 Oct  4 11:53 index.html
-rw-r--r--. 1 root root   20 Jan  8 01:44 info.php
-rw-r--r--. 1 root root  368 Oct  4 11:53 nginx-logo.png
-rw-r--r--. 1 root root 2811 Oct  4 11:53 poweredby.png

我的配置如下:

[root@www1 nginx]# cat /etc/php-fpm.d/www.conf

;listen = 127.0.0.1:9000

listen = /var/run/php-fpm/php-fpm.sock
listen.allowed_clients = 127.0.0.1

listen.owner = nobody
listen.group = nobody
user = nginx
group = nginx
pm = dynamic

[root@www1 nginx]# cat /etc/nginx/nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

[root@www1 nginx]# cat /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  my_ip_here;

    # note that these lines are originally from the "location /" block
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    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_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

答案1

我最好的猜测是以下其中之一:- try_files 可能会影响某些事情 - 您的 fasscgi_pass URL 可能与 PHP 安装的位置相比不正确。您可以尝试切换到 /var/run 和 /var/run/php 目录以查看那里有什么。- PHP 可能存在其他问题。

尝试进行如下更改,删除多余的行(尤其是 PHP 块中的 try_files)。报告发生的情况。

location ~ \.php$ {
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

如果这不起作用,请尝试这个

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

您可以将其添加到任何位置块以帮助调试。使用 Firefox 和“实时 HTTP 标头”查看输出

add_header Z_LOCATION "(describe your location block)";
add_header URI $uri; 

如果两者都不起作用,您将必须发布有关 PHP 设置的更多详细信息以及一些日志。

以下是我的确切配置,但请注意,它是为与 HHVM 配合使用的,HHVM 是一种比标准 PHP 更快的 PHP 解释器

location ~ \.(hh|php)$ {
  fastcgi_keep_conn on;
  fastcgi_intercept_errors on;
  fastcgi_pass   php;
  include        fastcgi_params;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

  add_header Z_LOCATION "PHP MAIN"; add_header URI $uri; # DEBUG
}

相关内容