9

繰り返しがほとんどないnginxconfファイルを作成しようとしています。私は静的ファイルを提供するためにnginxを使用しています、そしてそれは404sまたはphpコンテンツを指定された場所@varnishにプロキシします:

location @varnish {
    proxy_redirect off;
    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_header Set-Cookie;
    proxy_pass http://localhost:6081;
    proxy_set_header Request-URI $request_uri;
}

nginxがファイルを持っているかどうかを確認してからバックエンドにパススルーする「標準」の状況では、次のように正常に機能します。

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    access_log        off;
    add_header      Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    expires           max;
    open_file_cache_valid 120m;
    try_files $uri @varnish;
}

ただし、PHPの場合、ファイルを試してほしくありません。すぐにリクエストを@varnishにリダイレクトする必要があります。

location ~ \.php$ {
    rewrite . @varnish last;
}

ただし、これは機能していないようです。2つの別々のほぼ同一のブロック(1つは@backend用、もう1つはphp用)が両方とも同じプロキシを参照するのは苦痛のようです。これは、人間が一方に何かを入れ、もう一方に何かを入れるのを忘れることができる一種の問題です。

4

1 に答える 1

12

プロキシ設定をサーバーコンテキストに配置し、場所にそれらを継承させる場合、複製することはそれほど多くありません。また、アップストリームブロックを設定して、必要に応じてプロキシターゲットを簡単に変更できるようにすることもできます。

upstream _varnish {
  server localhost:6081;
}

server {
  proxy_redirect off;
  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_set_header Request-URI $request_uri;
  proxy_pass_header Set-Cookie;

  location @varnish {
    proxy_pass http://_varnish;
  }

  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    access_log off;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    expires max;
    open_file_cache_valid 120m;
    try_files $uri @varnish;
  }

  location ~ \.php$ {
    proxy_pass http://_varnish;
  }
}
于 2012-06-14T12:54:51.297 に答える