如何正確代理 nginx?

如何正確代理 nginx?

// 編輯:這是我的本機開發伺服器

我有 PHP 內建伺服器在主機的連接埠 8000 上運行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;

相關內容