我花了好几天的时间阅读有关这个问题的资料,诚然,我是 Nginx 新手。我阅读了官方和非官方文档,但似乎无法解决我的问题。希望这里有人能帮助我。
我可以为我的 html 页面(例如 403、404 和 50x.html)提供服务,所以我知道 nginx 在某种程度上正在工作。我的 https 重定向也有效。
我可以通过 telnet 连接到 9001 上的 PHP FPM。
我的所有权限看起来都是正确的,至少对我来说是这样。
我在下面包含了相关的配置文件和输出:
站点可用/默认:
server
{
listen [::]:80;
server_name domain.com;
return 301 https://domain.com$request_uri;
#rewrite ^ https://domain.com$request_uri? permanent;
}
server
{
listen 443 default ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/ss-certificates/ss-domain.com.crt;
ssl_certificate_key /etc/ss-certificates/ss-domain.com.key;
root /var/www/domain.com/wwwroot;
index index.php;
access_log /var/www/domain.com/logs/access.log combined;
error_log /var/www/domain.com/logs/error.log debug;
error_page 404 /404.html;
error_page 403 /403.html;
error_page 500 502 503 504 /50x.html;
location /
{
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$
{
try_files $uri =404;
include fastcgi_params;
fastcgi_param HTTPS on;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_pass 127.0.0.1:9001;
}
location ~ /\.ht
{
deny all;
}
location = /favicon.ico
{
log_not_found off;
access_log off;
}
}
pool.d/domain.com.conf:
[domain]
listen = 127.0.0.1:9001
user = www-data
group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
chroot = /var/www/domain.com/wwwroot/
chdir = /
网站目录:
ll -s -R /var/www/domain.com/
/var/www/domain.com/:
total 16
4 drwxr-xr-x 4 www-data www-data 4096 Jul 23 22:48 ./
4 drwxr-xr-x 3 root root 4096 Jul 22 22:49 ../
4 drwxr-xr-x 2 www-data www-data 4096 Jul 25 22:59 logs/
4 drwxr-xr-x 2 www-data www-data 4096 Jul 28 15:00 wwwroot/
/var/www/domain.com/logs:
total 516
4 drwxr-xr-x 2 www-data www-data 4096 Jul 25 22:59 ./
4 drwxr-xr-x 4 www-data www-data 4096 Jul 23 22:48 ../
24 -rw-r--r-- 1 www-data www-data 18128 Jul 28 15:19 access.log
484 -rw-r--r-- 1 www-data www-data 490826 Jul 28 15:20 error.log
/var/www/domain.com/wwwroot:
total 28
4 drwxr-xr-x 2 www-data www-data 4096 Jul 28 15:00 ./
4 drwxr-xr-x 4 www-data www-data 4096 Jul 23 22:48 ../
4 -rw-r--r-- 1 www-data www-data 53 Jul 26 22:56 403.html
4 -rw-r--r-- 1 www-data www-data 53 Jul 26 22:55 404.html
4 -rw-r--r-- 1 www-data www-data 383 Jul 23 22:42 50x.html
4 -rw-r--r-- 1 www-data www-data 1406 Jul 25 21:46 favicon.ico
4 -rwxr-xr-x 1 www-data www-data 88 Jul 22 22:58 index.php*
nginx.conf:
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
##
# nginx-naxsi config
##
# Uncomment it if you installed nginx-naxsi
##
#include /etc/nginx/naxsi_core.rules;
##
# nginx-passenger config
##
# Uncomment it if you installed nginx-passenger
##
#passenger_root /usr;
#passenger_ruby /usr/bin/ruby;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
提前感谢大家的帮助。
问候,
杰高
答案1
您的访问/错误日志中有什么内容吗?
另外,为什么要包含 fastcgi_params 然后几乎定义它们全部?
这是我的位置块在带有 php-fpm 的 nginx 中的样子:
location ~ \.php$ {
try_files $uri =404;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/to/site.com/public$fastcgi_script_name$
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
尝试将 fastcgi_pass 移至顶部。
答案2
这里的问题是您将 php-fpm 放在 chroot jail 中,但 nginx 将完整的 SCRIPT_FILENAME 路径传递给 PHP 脚本。
在您的 nginx conf 中您有(除其他外):
root /var/www/domain.com/wwwroot;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
对于/index.php
他的请求,将其翻译为/var/www/domain.com/wwwroot/index.php
。但是您已将 php-fpm 放入 chroot jail 中:
chroot = /var/www/domain.com/wwwroot/
因此 php-fpm 看到的是文件,/index.php
而不是/var/www/domain.com/wwwroot/index.php
。
因此,您必须调整 的路径,SCRIPT_FILENAME
使其与 php-fpm 在 chroot 中看到的路径相匹配。通过删除 来完成此操作$document_root
。
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
答案3
我猜你无法让 nginx 在你的浏览器中显示 .php 文件。
我发现很多东西你根本就不需要,只要让 php 工作就行。据我所知,你只能传递一个“fastcgi_param”参数。据我所知,这就是 FastCGI 的工作方式。如果你有多个 fastcgi_param”参数,nginx 会选择第一个。尝试只列出“fastcgi_pass 127.0.0.1:9001;”作为 fastcgi 参数,看看会发生什么。
您可以在此页面上阅读有关 fastcgi 的更多信息 http://michaelshadle.com/2011/02/11/setting-php-ini-parameters-from-nginx