我第一次使用Nginx,但我对Apache和Linux非常熟悉。我正在使用现有的项目,当我试图看到index.php时,我找不到404文件。
这是access.log条目:
2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.ordercloud.lh"
以下是网站可用文件:
server {
# Listening on port 80 without an IP address is only recommended if you are not running multiple v-hosts
listen 80;
# Bind to the public IP bound to your domain
#listen 127.0.0.11:80;
# Specify this vhost's domain name
server_name www.ordercloud.lh;
root /home/willem/git/console/frontend/www;
index index.php index.html index.htm;
# Specify log locations for current site
access_log /var/log/access.log;
error_log /var/log/error.log warn;
# Typically I create a restrictions.conf file that I then include across all of my vhosts
#include conf.d/restrictions.conf;
# I've included the content of my restrictions.conf in-line for this example
# BEGIN restrictions.conf
# Disable logging for favicon
location = /favicon.ico {
log_not_found off;
access_log off;
}
# Disable logging for robots.txt
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# END restrictions.conf
# Typically I create a yiiframework.conf file that I then include across all of my yii vhosts
#include conf.d/yiiframework.conf;
# I've included the content of my yiiframework.conf in-line for this example
# BEGIN yiiframework.conf
# Block access to protected, framework, and nbproject (artifact from Netbeans)
location ~ /(protected|framework|nbproject) {
deny all;
access_log off;
log_not_found off;
}
# Block access to theme-folder views directories
location ~ /themes/\w+/views {
deny all;
access_log off;
log_not_found off;
}
# Attempt the uri, uri+/, then fall back to yii's index.php with args included
# Note: old examples use IF statements, which nginx considers evil, this approach is more widely supported
location / {
try_files $uri $uri/ /index.php?$args;
}
# END yiiframework.conf
# Tell browser to cache image files for 24 hours, do not log missing images
# I typically keep this after the yii rules, so that there is no conflict with content served by Yii
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 24h;
log_not_found off;
}
# Block for processing PHP files
# Specifically matches URIs ending in .php
location ~ \.php$ {
try_files $uri =404;
fastcgi_intercept_errors on;
# Fix for server variables that behave differently under nginx/php-fpm than typically expected
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Include the standard fastcgi_params file included with nginx
include fastcgi_params;
#fastcgi_param PATH_INFO $fastcgi_path_info;
#fastcgi_index index.php;
# Override the SCRIPT_FILENAME variable set by fastcgi_params
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Pass to upstream PHP-FPM; This must match whatever you name your upstream connection
fastcgi_pass 127.0.0.1:9000;
}
}
我的/home/willem/git/console
由www-data拥有:www-data(我的网站用户运行php等),我已经挫败了777权限...
有人可以提供建议吗?
答案 0 :(得分:8)
来自fastcgi服务器的那条消息通常意味着它所提供的SCRIPT_FILENAME未被发现或作为其文件系统上的文件无法访问。
在/home/willem/git/console/frontend/www/index.php上查看文件权限
是644吗?
和/ home / willem / git / console / frontend / www /
是755吗?
答案 1 :(得分:6)
好的,经过一天的挣扎后我发现了3件事
希望这可以节省一些人的麻烦!
以下是服务器故障中更详细的链接:https://serverfault.com/questions/517190/nginx-1-fastcgi-sent-in-stderr-primary-script-unknown/517207#517207
答案 2 :(得分:6)
如果有人有同样的错误:在我的情况下,问题是nginx.conf中位置块内缺少的根指令,as explained in the Arch wiki
答案 3 :(得分:3)
"主要脚本未知" 是由 SELinux安全上下文引起的。
客户获得回复
找不到档案。
nginx error.log有以下错误消息
* 19在stderr发送的FastCGI:"主要脚本未知"从上游读取响应头
所以只需将Web根文件夹的安全上下文类型更改为 httpd_sys_content_t
chcon -R -t httpd_sys_content_t / var / www / show
nginx / php-fpm config有3个用户
<强> /etc/nginx/nginx.conf 强>
user nobody nobody; ### `user-1`, this is the user run nginx woker process
...
include servers/*.conf;
<强> /etc/nginx/servers/www.conf 强>
location ~ \.php$ {
# fastcgi_pass 127.0.0.1:9000; # tcp socket
fastcgi_pass unix:/var/run/php-fpm/fpm-www.sock; # unix socket
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
<强> /etc/php-fpm.d/www.conf 强>
[www]
user = apache ### `user-2`, this is the user run php-fpm pool process
user = apache
;listen = 127.0.0.1:9000 # tcp socket
listen = /var/run/php-fpm/fpm-www.sock # unix socket
listen.onwer = nobody ### `user-3`, this is the user for unix socket, like /var/run/php-fpm/fpm-www.sock
listen.group = nobody # for tcp socket, these lines can be commented
listen.mode = 0660
user-1和user-2不一定相同。
对于unix套接字,user-1需要与user-3相同, 因为nginx fastcgi_pass必须具有对unix套接字的读/写权限。
否则nginx将获得 502 Bad Gateway ,而nginx error.log会出现以下错误消息
* 36 connect()到unix:/var/run/php-fpm/fpm-www.sock连接到上游时失败(13:权限被拒绝)