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

takahashi 著者:takahashi

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

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の負荷も少なくなりました。

  • この記事いいね! (0)

著者について

takahashi

takahashi administrator

Webエンジニア。 趣味で自宅サーバーを稼働中。 ファンタジーが好き。