nginx を正しくプロキシするにはどうすればよいですか?

nginx を正しくプロキシするにはどうすればよいですか?

// 編集: これは私のローカル開発サーバーです

ホストのポート 8000 で PHP 組み込みサーバーを実行しています。nginx をポート 80 から 8000 にsomehost.devプロキシするようにします。私の設定:somehost.dev

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 パラメータを指定できます。

名前を IPv6 アドレスに解決する機能は、バージョン 1.5.8 以降でサポートされています。

デフォルトでは、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;

関連情報