我在按照我想要的方式设置nginx时遇到了一些问题。我有一个网站example·localhost,它位于/warrant/frontend/www。我的配置是这样的:
server {
listen 80;
server_name example.localhost;
root /vagrant/frontend/www;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ .*.php$ {
include /etc/nginx/fastcgi.conf;
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
}
}
但是,我想添加一个管理站点,位于/farranget/backend/www,地址为example.localhost/admin。这是当事情出错时,我得到了一个404,下面的设置没有找到,基于这篇文章:
location /admin {
root /vagrant/backend/www;
}
location ~ /admin/.+.php$ {
include /etc/nginx/fastcgi.conf;
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
}
错误日志如下所示:
2014/04/23 12:30:10 [error] 15459#0: *1 "/vagrant/backend/www/admin/index.php" is not found (2: No such file or directory), client: 192.168.56.1, server: example.localhost, request: "GET /admin/ HTTP/1.1", host: "example.localhost"
我明白为什么我会得到404,但我该怎么做呢?非常感谢您的帮助!
更新
我已将我的管理位置更改为:
location /admin {
alias /vagrant/backend/www/;
try_files $uri $uri/ /index.php?$args;
location ~ .php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
我还删除了这个块:
location ~ /admin/.+.php$ {...}
现在,对example.localhost/admin的调用得到了正确的处理,但如果我将其更改为example.localhost/admin/site/index,则请求将由前端处理。/admin位置似乎不匹配。。。有什么想法吗?
location
块是完全独立的。您的请求最终出现在最后一个location
块中,并且永远看不到第一个块中的root
指令。将root
指令放入第二个块。
location ~ /admin/.+.php$ {
root /vagrant/backend/www;
include /etc/nginx/fastcgi.conf;
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
}
server {
listen 80;
server_name example.localhost;
root /vagrant/frontend/www;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
location ~ .php$ {
include fastcgi.conf;
}
}
location /admin {
return 301 /admin/;
}
location /admin/ {
alias /vagrant/backend/www/;
try_files $uri $uri/ @handler;
location ~ .php$ {
include fastcgi.conf;
}
}
location @handler {
rewrite / /admin/index.php?$args;
}
}