nginxでリバースプロキシするとバックエンド側への通信がHTTP/1.0になる件

  • 2019年10月2日
  • 2019年10月2日
  • 未分類

Nginx経由でPHP製のWebアプリにつないだ際、なぜかWebアプリを稼働させているバックエンドのApacheのプロセスが無数に増えてしまい、RAMを食いつぶしてしまう問題に遭遇しました。

Apacheへ直つなぎした場合はそういった問題が起きないため、Apacheとnginxのアクセスログを見比べてみたところ、Apacheへ通信した際はHTTP/1.1が使われていたのに対し、nginx経由でアクセスした際は何故かApacheとの通信が”HTTP/1.0″になってしまっていました。

色々調べたところ、どうやらNginxでリバースプロキシを行う場合、何も指定しない場合、バックエンドのサーバーとはデフォルトでHTTP/1.0で通信してしまうとのこと。

HTTP/1.1で通信させたい場合は

server {}

ディレクティブに、下記の1行を追加すればOKです。

proxy_http_version 1.1;

記述例:

server {
  server_name  .example.com;

  listen          80;
  listen          443 ssl;

 ssl_certificate       /path/to/fullchain.pem;
  ssl_certificate_key   /path/to/privkey.pem;

  client_max_body_size 1g;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Fowarded-Proto \$scheme;
  proxy_max_temp_file_size 0;
  proxy_http_version 1.1; #HTTP1.1に固定
  location / {
    proxy_pass https://localhost:8081;
  }
}

これでHTTPの通信が1.1となり、Apacheの負荷も少なくなりました。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG