web-dev-qa-db-ja.com

ワニス+ Nginx +複数のIPアドレス

これは、2つの別々のIPアドレスを持つ2つのドメインをホストする専用サーバーでVarnishを機能させる最初のショットです。私の簡略化されたセットアップは次のとおりです。

Nginx conf

server {
    listen ip-address-1:8080;
}

server {
    listen ip-address-2:8080;
}

ワニスvcl

backend default {
    .Host = "127.0.0.1";
    .port = "80";
}

そして、私が定義したワニスのconfで

VARNISH_LISTEN_PORT=80

VarnishとNginx(およびphp-fpm)は正常に実行されていますが、自分のWebサイトにアクセスしようとすると、nginxページへようこそと表示されます。ヘッダーにはxニスが含まれていません。何らかの理由で、ワニスがポート80をリッスンしていないようです。これは、127.0.0.1ホストをリッスンしているvclファイルに関係していると思われます。 2つのwordpressサイトを実行しています。Varnishを正しく機能させるには、どこを探す必要がありますか?

乾杯、アドナン

編集:

Nginxは8080に正しく含まれているようですが、Varnishは正しいIPアドレスをリッスンしていません。 Jensの複数のニスIPアドレスを使用するnetstat -lnp収量:

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 46.105.40.241:8080          0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 5.135.166.39:8080           0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      2544/named          
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1195/vsftpd         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1184/sshd           
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      2544/named          
tcp        0      0 46.105.40.241:443           0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 5.135.166.39:443            0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 127.0.0.1:6082              0.0.0.0:*                   LISTEN      21350/varnishd      
tcp        0      0 :::80                       :::*                        LISTEN      21351/varnishd      
tcp        0      0 ::1:53                      :::*                        LISTEN      2544/named          
tcp        0      0 :::22                       :::*                        LISTEN      1184/sshd           
tcp        0      0 ::1:953                     :::*                        LISTEN      2544/named          
udp        0      0 127.0.0.1:53                0.0.0.0:*                               2544/named          
udp        0      0 ::1:53                      :::*                                    2544/named          

default.vcl

backend ikhebeenbril {
    .Host = "5.135.166.39";
    .port = "8080";
}

backend sunculture {
    .Host = "46.105.40.241";
    .port = "8080";
}
sub vcl_recv {

    if (server.ip == "5.135.166.39") {
        set req.backend = ikhebeenbril; 
    } else {
        set req.backend = sunculture;
    }
...
}

sub vcl_hash {
    hash_data(server.ip);
    if (req.http.Host) {
        hash_data(req.http.Host);
    }
    hash_data(req.url);
    if (req.http.Accept-Encoding) {
        hash_data(req.http.Accept-Encoding);
    }
    return (hash);
}

nginxサーバーブロック

server {
        listen 5.135.166.39:80;
        listen 5.135.166.39:443 default ssl spdy;
        server_name www.ikhebeenbril.nl;
}

server {
        listen 46.105.40.241:80;
        listen 46.105.40.241:443 default ssl spdy;
        server_name www.thesunculture.com;
}
1
adnan

2つのIPアドレスをリッスンするようにNginxを構成する場合は、VarnishでもこれらのIPアドレスを使用する必要があります。そのための最良の方法は、Varnishに2つの異なるバックエンドレコードを使用することです。

backend server1 {
    .Host = "IP-ADDRESS-1";
    .port = "8080";
}
backend server2 {
    .Host = "IP-ADDRESS-2";
    .port = "8080";
}

IP-ADDRESS-1およびIP-ADDRESS-2を正しいIPアドレスに置き換えてください。

着信要求にバックエンドを割り当てるには、次の例を使用するか、要件に応じて変更します。

sub vcl_recv {
    if (server.ip == "IP-ADDRESS-1") {
        set req.backend = server1; 
    } else {
        set req.backend = server2;
    }
    ...
}

キャッシュオブジェクトのハッシュIDを生成するためにIPアドレスを使用することが重要な場合があります。 Varnish構成に特定のvcl_hashメソッドを追加します。

sub vcl_hash {
    hash_data(server.ip);
    if (req.http.Host) {
        hash_data(req.http.Host);
    }
    hash_data(req.url);
    if (req.http.Accept-Encoding) {
        hash_data(req.http.Accept-Encoding);
    }
    return (hash);
}

Varnishのバックエンドが構成済みのWebサイトを指すように注意してください。与えられた例では、ポート8080でリッスンするようにNginxを構成しましたが、Varnishをポート80にアドレス指定しました。NginxのデフォルトのWebサイト構成を削除していない場合、Nginxはこのサイトで応答します。

1
Jens Bradler

これは少し推測ですが、nginxでまだ定義されているデフォルトの仮想ホストがあり、ポート80でリッスンするように定義されているため、Varnishはそのポートにバインドできません。

したがって、nginx構成を確認し、デフォルトの仮想ホストを削除します。

これで問題が解決しない場合は、nginxとVarnishの完全な構成を質問に入れ、netstat -lnpの出力を入力してください。

0
Tero Kilkanen