2011-04-21 6 views
21

環境変数に応じて異なるターゲットにプロキシをプロキシしようとしています。私のアプローチは、カスタムURL $ targetにターゲットURLを置き、これをproxy_passに渡すことでした。

しかし、proxy_passで変数を使用しても動作しないようです。この単純な設定は、nginxからの "502 Bad Gateway"応答につながります。

server { 
    listen 8080; 
    server_name myhost.example.com; 
    access_log /var/log/nginx/myhost.access.log; 
    location /proxy { 
    set $target http://proxytarget.example.com; 
    proxy_pass $target; 
    } 
} 

は、変数作品なしで同じ設定:

server { 
    listen 8080; 
    server_name myhost.example.com; 
    access_log /var/log/nginx/myhost.access.log; 
    location /proxy { 
    proxy_pass http://proxytarget.example.com; 
    } 
} 

はproxy_passこの方法を使用するか、私は何か間違ったことをやって本当に可能ではないですか?

答えて

47

私は最近、自分を必要とし、このつまずいてきたとproxy_pass先の変数を使用するためには、あなたのerror.logではおそらくno resolver defined to resolve ...

ソリューションのようなものが含まれていると同じようにリゾルバを設定する必要があることを発見しましたあなたのケースでは

location ~ /proxy/(.*) { 
    resolver 8.8.8.8; 
    proxy_pass http://$1; 
} 

これは動作するはずです::

location /proxy { 
    resolver 8.8.8.8; 
    set $target http://proxytarget.example.com; 
    proxy_pass $target; 
} 
私の場合、DNS解決のためにグーグルを使用して、以下の設定にしましたここINGのnginxのとダイナミック proxy_pass

詳しい情報:http://www.nginx-discovery.com/2011/05/day-51-proxypass-and-resolver.html

+1

FYI、nginxのはとか、リゾルバなし/ etc/hostsファイルを、使用しないことで、このCMDで確認om/questions/357719/nginx-domain-resolver – richardkmiller

+3

私のためには機能しません。変数を設定しましたが、nginxはproxy_pass指示文で使用されていると解決できないようです。 proxy_redirectでは、同じ変数が期待どおりに機能します。 – shylynx

+1

**「8.8.8.8」のような公的にアクセス可能なDNSサーバーを使用しないでください。 [DNSのなりすましを防ぐには、適切に保護された信頼できるローカルネットワーク内にDNSサーバーを構成することをお勧めします。](http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver) – Tim

0

は私達が私達のDNSサーバが

をすることができ、問題があった見つけたまで

proxy_passは、私の変数を解決していなかった、まったく同じ問題につまずいます。http://serverfault.c方法

nslookup your-domain your-dns-ip 
-1
location/{ 
    if ($args ~ "^url=(.+)") { #gets the "url" get parameter 
     set $key1 $1; 
    proxy_pass $key1;#use the parameter as proxy address 
} 
} 
+3

あなたの答えをいくつかの説明で更新してください。 –

関連する問題