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