我已经使用 homebrew 在我的 Mac 上安装了 nginx + php-fpm + mysql 堆栈。
MacOsX:10.9.2
Nginx 版本:1.6.1
文档根目录:/Users/raj/Sites/
项目目录:/Users/raj/Sites/projects/newproject
Url:127.0.0.1/projects/newproject
我的 /usr/local/etc/nginx/nginx.conf 配置如下:
user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
events {
worker_connections 1024;
}
http {
include mime.types;
#include /usr/local/etc/nginx/conf.d/*.conf;
sendfile on;
keepalive_timeout 65;
gzip on;
# gzip_disable "MSIE [1-6]\.(?!.*SV1)";
server {
listen 80;
server_name localhost;
root /Users/raj/Sites;
location / {
try_files $uri $uri/ /index.php;
index index.php;
autoindex on;
}
# configure *.PHP requests
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
如果我打开 url:127.0.0.1/projects/newproject
或者127.0.0.1/projects/newproject/index.php
它可以正常工作。
但如果我打开任何其他 url http://127.0.0.1/projects/newproject/users/login
,甚至127.0.0.1/projects/newproject/index.php/users/login
都会出现以下错误:
File not found.
并且 error.log 显示:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
[编辑]
如果我在'location〜.php$ {'块中添加以下几行:
try_files $uri /index.php;
给出错误:
rewrite or internal redirection cycle while internally redirecting to "/index.php"
[编辑2] 此外,当我尝试重新启动 FPM 时,我发现以下错误日志:
[pool www] 'user' directive is ignored when FPM is not running as root
[pool www] 'group' directive is ignored when FPM is not running as root
答案1
您的配置有两个明显的问题:
您的
location @handler
完全不必要且多余。这已包含在您现有的index
和try_files
指令中。将其location
完全删除并修复try_files
。try_files $uri $uri/ /index.php;
您将
root
指令放在了错误的地方。root
应该在块中定义server
,而不是在每个location
块中定义。这是最常见的 nginx 配置错误。root
从每个块中删除所有指令location
,并将正确的root
指令放在server
块内,而不是任何内location
。
一旦您的配置达到这个基线,您就会发现一切又开始工作了,或者您可能会遇到一个更容易处理的其他问题。
答案2
我终于搞明白了。修复起来非常简单。
更改行:
try_files $uri $uri/ /index.php;
到
try_files $uri $uri/ /projects/newproject/index.php;