web-dev-qa-db-ja.com

バックエンドがダウンしている場合、nginxはプロキシキャッシュを使用します

バックエンドサーバーがダウンしている場合は、nginxプロキシでキャッシュを使用する必要があります。

これは私の設定です。しかし、チェックバックエンドサーバーなしのnginx use cacheのようです。

http {

  # ...

  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_cache_path /tmp/nginx levels=1:2 keys_zone=tmpzone:10m inactive=60m;
  proxy_cache_key "$scheme$request_method$Host$request_uri";


  server {
    server_name _;

    location / {
      proxy_connect_timeout 5s;
      proxy_read_timeout 5s;
      proxy_cache tmpzone;
      proxy_cache_valid      200 304 1d;
      proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host 'www.example.com';
      proxy_pass http://www.example.com;
    }
  }
}

質問は、バックエンドサーバーが起動している場合、プロキシキャッシュをバイパスするにはどうすればよいですか?また、バックエンドサーバーが稼働している場合、プロキシサーバーはキャッシュをまったく使用しません。

11
sweb

これの複製のようです:

https://stackoverflow.com/questions/16756271/how-to-configure-nginx-to-serve-cached-content-only-when-backend-is-down-5xx-re

つまり、 proxy_cache_use_stale を使用します

更新として、私はこれをテストしましたが、うまくいきます。私は自分のワークステーションでテストを行いました(完全を期すため)。

Fedora 23 nginx 1.8.1はsslターミネーター+キャッシュ+リバースプロキシとして構成され、ポート80でリッスンするように構成されたApache 2.4.18

アップストリームとして機能するApacheを使用して、静的ファイルのみを提供するこのテストを行いました。

  1. Apache up、nginx up、ブラウザにnginxによって提供されるリバースプロキシURLを指定します。Apacheのプロキシコンテンツが表示されます。この時点で、nginxはこれをキャッシュに保持します。
  2. Apacheを停止しました
  3. nginxに接続すると、Apacheによって以前提供されたキャッシュファイルが表示されます。

私が使用したnginx設定は(興味深い部分のみ)です:

nginx.conf:

http {
[...]
location
    proxy_cache_path        /var/lib/nginx/tmp/proxy/ levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/local.conf:

upstream localhost {
    server 127.0.0.1:80;
[...]
}


server {
    listen       127.0.0.1:443 ssl;

[...]

    location /be/ {
        proxy_pass              http://localhost;
        proxy_cache             STATIC;
        proxy_cache_valid       200 1d;
        proxy_cache_use_stale   error;
}
8
Fredi

キャッシュが有効になっているサーバーに対して、proxy_intercept_errorsおよびproxy 500sを使用します。

0
chugadie