我有一个位置块,我为其定义了一个不同的别名,我希望它的index.php
文件是来自同一目录的服务器。问题是Nginx没有使用别名来提供索引文件,而是试图在根目录中找到该文件(并且它不存在)。
配置:
http {
sendfile on;
tcp_nopush on;
keepalive_timeout 15;
upstream php {
server unix:/run/php-fpm.sock;
}
server {
server_name my.domain.com;
root /var/www;
location / {
alias /var/www/site/;
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php;
}
location ~ /\.ht {
deny all;
}
}
}
因此root应该指向根目录(site/
)中的/var/www
目录,但尝试提供的文件是/var/www/index.php
:
2014/05/21 15:41:19 [error] 9591#0: *190 FastCGI sent in stderr: "Unable to open primary script: /var/www/index.php (No such file or directory)" while reading response header from upstream, client: 127.0.0.1, server: my.domain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm.sock:", host: "localhost:666"
相反,我希望该文件可以从/var/www/index.php
提供。
答案 0 :(得分:1)
Nginx location
是独家的。离开位置时,nginx会忘记所有上下文。在您的情况下,try_files
中的最后一项是内部重定向,因此nginx会忘记别名,并转到与/index.php
匹配的location ~ \.php$
,其中root /var/www
继承自服务器块。
我只需将root
指令更改为root /var/www/site
,但如果您真的想要这种繁琐的方式,只需将try_files
更改为try_files $uri $uri/ /site/index.php?$args
。