我正在尝试配置nginx以在根域上提供静态html页面,并将其他所有内容代理到uwsgi。作为一个快速测试,我试图转向两个不同的静态页面:
server {
server_name *.example.dev;
index index.html index.htm;
listen 80;
charset utf-8;
location = / {
root /www/src/;
}
location / {
root /www/test/;
}
}
这似乎是http://nginx.org/en/docs/http/ngx_http_core_module.html#location所说的。但是我总是被发送到测试网站,即使是在/
请求中,也可以访问我的浏览器中的http://www.example.dev
。
卷曲输出:
$ curl http://www.example.dev -v
* Rebuilt URL to: http://www.example.dev/
* Hostname was NOT found in DNS cache
* Trying 192.168.50.51...
* Connected to www.example.dev (192.168.50.51) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.37.1
> Host: www.example.dev
> Accept: */*
>
< HTTP/1.1 200 OK
* Server nginx/1.8.0 is not blacklisted
< Server: nginx/1.8.0
< Date: Tue, 19 May 2015 01:11:10 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 415
< Last-Modified: Wed, 15 Apr 2015 02:53:27 GMT
< Connection: keep-alive
< ETag: "552dd2a7-19f"
< Accept-Ranges: bytes
<
<!DOCTYPE html>
<html>
...
来自nginx访问日志的输出:
192.168.50.1 - - [19/May/2015:01:17:05 +0000] "GET / HTTP/1.1" 200 415 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36" "-"
所以我决定将测试位置注释掉。所以我只有location = / { ...
块。 Nginx现在404s并记录以下错误:
2015/05/19 01:24:12 [error] 3116#0: *6 open() "/etc/nginx/html/index.html" failed (2: No such file or directory), client: 192.168.50.1, server: *.example.dev, request: "GET / HTTP/1.1", host: "www.example.dev"
原始nginx conf文件中的默认根目录是什么?我想这证实我的location = /
模式不匹配。
我在访问日志中添加了$uri
并看到它显示/index.html
,我猜这意味着第一个位置模式 匹配,但后来进入第二个位置块?所以现在我只需要弄清楚如何从/
块中提供index.html,或者只添加另一个块,如:location =/index.html
答案 0 :(得分:0)
根据@Alexey Ten评论,在ngx_http_index doc中:
应该注意,使用索引文件会导致内部重定向,并且可以在不同的位置处理请求。例如,使用以下配置:
location = / {
index index.html;
}
location / {
...
}
“/”请求实际上将在第二个位置处理为“/index.html”。
在您的情况下,请求“/”不会获得/www/src/index.html,但/www/test/index.html。