他のアプリケーションサーバーにリクエストを委任するロードバランサーとして機能するnginxサーバーがあります。
アセットをアプリケーションサーバーに直接リクエストしようとすると、アセットはgzip圧縮されたバージョンで提供されます。サンプル:
➜ ~ curl -IH 'Accept-Encoding: gzip, deflate' http://application/asset.css HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 15 Sep 2016 14:13:03 GMT Content-Type: text/css Content-Length: 35038 Connection: keep-alive Content-Encoding: gzip Expires: Thu, 31 Dec 2037 23:55:55 GMT Cache-Control: max-age=315360000 Cache-Control: public
ロードバランサーへの同じリクエスト中に、アセットの非圧縮バージョンを返します。 ➜ ~ curl -IH 'Accept-Encoding: gzip, deflate' https://load-balancer/asset.css HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 15 Sep 2016 14:16:15 GMT Content-Type: text/css Content-Length: 240442 Connection: keep-alive Expires: Thu, 31 Dec 2037 23:55:55 GMT Cache-Control: max-age=315360000 Cache-Control: public Accept-Ranges: bytes
ここにLBの私の構成があります:location / { client_max_body_size 10M; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_Host; proxy_set_header X-Forwarded-Proto https; # if use ssl proxy_redirect off; proxy_pass http://application; }
前もって感謝します
解決しました!
ロードバランサーからアップストリーム(アプリケーションサーバー)に送信されるリクエストはHTTP/1.0で行われるのに対し、アプリケーション側のnginxサーバーは、リクエストがHTTP> = 1.1の場合にのみファイルを圧縮することを理解しました。デフォルトのパラメータが原因です。
http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_http_version
これを解決する別の方法があります。アップストリームへの接続をプロキシするために、より高いHTTPプロトコルバージョンを設定できます。これは次のパラメータで実行できます:proxy_http_version 1.1;
このようにして、持続的接続や追加の新しいステータスコード。
たとえば、これは私自身の設定ブロックです。
server {
listen 80;
server_name domain.tld;
location / {
include proxy_params;
proxy_http_version 1.1;
proxy_pass http://my-up-stream;
}
}
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version