NginX 不执行 PHP
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/37305230/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
NginX not executing PHP
提问by Shahid Ahmad
I've been through dozens of potential solutions to this problem but cannot find anything that works. Basically, PHP files are not executing on my NginX + PHP_fpm + Ubuntu 14 server. I have all the packages, and they are running. I've cleared browser cache etc., but nothing has worked yet. I appreciate all the help!
我已经解决了这个问题的数十种潜在解决方案,但找不到任何有效的方法。基本上,PHP 文件不会在我的 NginX + PHP_fpm + Ubuntu 14 服务器上执行。我有所有的包,它们正在运行。我已经清除了浏览器缓存等,但还没有任何效果。我感谢所有的帮助!
As of right now, if I try accessing the PHP file, the GET will return it as an HTML file but will not execute the script.
截至目前,如果我尝试访问 PHP 文件,GET 会将其作为 HTML 文件返回,但不会执行脚本。
Here is my nginx.conf file:
这是我的 nginx.conf 文件:
worker_processes 1;
worker_rlimit_nofile 8192;
events {
worker_connections 3000;
}
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
http {
include /etc/nginx/mime.types;
#default_type application/octet-stream;
default_type text/html;
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;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Here is my /sites-available/default file:
这是我的 /sites-available/default 文件:
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /usr/share/nginx/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
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;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-php.conf;
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
#fastcgi_index index.php;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
Here is my server conf file:
这是我的服务器配置文件:
server {
listen 8000 default_server;
listen [::]:8000 default_server ipv6only=on;
root /var/www/html;
#index index.php index.html index.htm;
#location / {
#index index.php index.html index.htm;
#}
}
As you can see, I've been playing around with these files. But to no avail.
如您所见,我一直在处理这些文件。但无济于事。
采纳答案by Sean
Ok, so based on our comments back and forth you need to add this section to your nginx config for the server config listening on :8000.
好的,所以根据我们反复的评论,您需要将此部分添加到您的 nginx 配置中,以便在 :8000 上侦听服务器配置。
That regex tells nginx that whenever it gets a request for a URL with a file ending in .php to send that to the fastcgi process. Otherwise it's going to default to returning the raw file that matches in /var/www/html.
该正则表达式告诉 nginx,每当它收到一个以 .php 结尾的文件的 URL 请求时,将其发送到 fastcgi 进程。否则,它将默认返回与 /var/www/html 中匹配的原始文件。
Hope that helps.
希望有帮助。
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-php.conf;
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
#fastcgi_index index.php;
include fastcgi_params;
}