我该如何正确代理 nginx?

我该如何正确代理 nginx?

// 编辑:这是我的本地开发服务器

我在主机的 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;

相关内容