これは、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;
}
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はこのサイトで応答します。
これは少し推測ですが、nginxでまだ定義されているデフォルトの仮想ホストがあり、ポート80でリッスンするように定義されているため、Varnishはそのポートにバインドできません。
したがって、nginx構成を確認し、デフォルトの仮想ホストを削除します。
これで問題が解決しない場合は、nginxとVarnishの完全な構成を質問に入れ、netstat -lnp
の出力を入力してください。