nginx를 올바르게 프록시하려면 어떻게 해야 하나요?

nginx를 올바르게 프록시하려면 어떻게 해야 하나요?

// 편집: 내 로컬 개발 서버입니다.

호스트의 포트 8000에서 실행되는 PHP 내장 서버가 있습니다 somehost.dev. nginx가 somehost.dev80 포트에서 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 이전에는 단일 네임서버만 구성할 수 있었습니다. IPv6 주소를 사용하여 이름 서버를 지정하는 것은 버전 1.3.1 및 1.2.2부터 지원됩니다.

기본적으로 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;

관련 정보