我正在尝试让 nginx 与 php-cgi 配合使用,但它并没有像我希望的那样工作。我正在使用一些设置变量来允许动态主机名——基本上是任何.local。我知道这些东西是可以工作的,因为我可以正确访问静态文件,但是 php 文件不起作用。我得到了标准的“未指定输入文件。”错误,这通常在文件不存在时发生,但它肯定存在并且路径是正确的,因为我可以访问同一路径中的静态文件。这可能是权限问题,但我不确定这怎么会成为问题。我在 Windows 上使用我自己的用户帐户运行它,所以我认为它应该有权限,除非 php-cgi 在没有我的指示的情况下以不同的用户身份运行。>.>
这是我的配置;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
# Listen for HTTP
listen 80;
# Match to local host names.
server_name *.local;
# We need to store a "cleaned" host.
set $no_www $host;
set $no_local $host;
# Strip out www.
if ($host ~* www\.(.*)) {
set $no_www $1;
rewrite ^(.*)$ $scheme://$no_www$1 permanent;
}
# Strip local for directory names.
if ($no_www ~* (.*)\.local) {
set $no_local $1;
}
# Define default path handler.
location / {
root ../Users/Stephen/Documents/Work/$no_local.com/hosts/main/docs;
index index.php index.html index.htm;
# Route non-existent paths through Kohana system router.
try_files $uri $uri/ /index.php?kohana_uri=$request_uri;
}
# pass PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root ../Users/Stephen/Documents/Work/$no_local.com/hosts/main/docs;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
# Prevent access to system files.
location ~ /\. {
return 404;
}
location ~* ^/(modules|application|system) {
return 404;
}
}
}
答案1
没关系,我已经知道了。
Windows 版本的 nginx 将根路径附加到可执行路径,因此如果它位于 C:\nginx 并且您想要将文件存储在 C:\www 中,则需要对根路径执行 ../www。Nginx 将其奇怪的转换路径传递给 PHP,但 PHP 无法理解它,因此我对其进行了调整以使用绝对路径。