我在 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
}