// 编辑:这是我的本地开发服务器
我在主机的 8000 端口上运行了内置 PHP 服务器somehost.dev
。我想让 nginxsomehost.dev
从 80 端口代理到 8000。我的配置:
server {
listen 80;
server_name *.dev;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://$host:8000$uri;
proxy_redirect off;
}
}
收到错误:
[error] 30106#0: *1 no resolver defined to resolve somehost.dev, client: 127.0.0.1, server: *.dev, request: "GET /favicon.ico HTTP/1.1", host: "somehost.dev", referrer: "http://somehost.dev/admin"
我做错了什么?
答案1
添加resolver 127.0.0.1;
到您的配置中,如果您没有在本地运行 DNS,请将 127.0.0.1 替换为您的 DNS 服务器。
Nginx 解析器信息:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location
配置用于将上游服务器的名称解析为地址的名称服务器,例如:
resolver 127.0.0.1 [::1]:5353;
地址可以指定为域名或 IP 地址,以及可选端口(1.3.1、1.2.2)。如果未指定端口,则使用端口 53。名称服务器以循环方式查询。
在 1.1.7 版本之前,只能配置单个名称服务器。从 1.3.1 和 1.2.2 版本开始支持使用 IPv6 地址指定名称服务器。
默认情况下,nginx 在解析时会同时查找 IPv4 和 IPv6 地址。如果不希望查找 IPv6 地址,可以指定 ipv6=off 参数。
从 1.5.8 版本开始支持将名称解析为 IPv6 地址。
默认情况下,nginx 使用响应的 TTL 值来缓存答案。可选valid
参数允许覆盖它:
resolver 127.0.0.1 [::1]:5353 valid=30s;
在 1.1.9 版本之前,无法调整缓存时间,并且 nginx 总是将答案缓存 5 分钟。
Syntax: resolver_timeout time;
Default: resolver_timeout 30s;
Context: http, server, location
设置名称解析的超时时间,例如:
resolver_timeout 5s;