web-dev-qa-db-ja.com

NginX->ワニス-> PHP-FPM空白ページ

ワニスの前にnginxを配置したいのですが、同時にnginxに戻ってPHP(Drupal)を提供します。

しかし、応答が200で、長さが0の空白ページ(Varnishから)しか取得していません。Varnishを再起動した後の最初のアクセスのみが機能しますが、その後は常に空白ページになります。

これはNginxの構成です:

server{
  listen 80; 
  server_name myserver

  access_log  /var/log/nginx/ssl_access.log main;
  error_log   /var/log/nginx/ssl_error.log warn;

  location / { 
    proxy_pass http://127.0.0.1:6081;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $Host;
    proxy_redirect off;
  } 

次に、ワニスの構成はデフォルトにすぎず、デバッグを試みます。

backend default {
  .Host = "127.0.0.1";
  .port = "8080";
}

また、8080のnginx構成は次のとおりです。

server{
  listen       8080; 
  access_log  /var/log/nginx/fromvarnish.log main;
  error_log   /var/log/nginx/fromvarnisherror.log warn;

  server_name myserver

  location / { 
    try_files $uri /index.php?$query_string; 
  }
  location ~ '\.php$|^/update.php' {
     include fastcgi_params;
     fastcgi_pass 127.0.0.1:9001;
     fastcgi_index index.php;
  }
}

私のウェブページにアクセスすると、空のhtmlのみが返されますが、200の応答が返されます。いいえPHPエラーなど。Nginxのアクセスログは単なるアクセスであり、エラーはありません。

Varnishから直接アクセスする場合(ポートmywbpage.com:6081経由でアクセスする場合)、またはポート80に設定する場合は機能します。

Php実行バックエンドを(Nginx:nginx-> varnish-> Apacheではなく)Apache + php-fpmに設定すると、正しく機能します(php実行者がHHVMの場合でも同じ問題が発生しますが、別の問題になる可能性があります) )。

編集:申し訳ありませんが、それは間違っていました。Apacheを使用する場合、drupalのデフォルトキャッシュ(認証されていないユーザーのキャッシュページ)のチェックを外した場合にのみ機能します。 nginxでは、これは問題ではなく、このチェックボックスに関係なく機能することはありません。

私を導くことができる何かを知っている人はいますか?

3
Cesc

だから誰かが答えてくれることを願っていますが、それまでの間、私はそれを機能させたので、その方法を説明します:

サーバー部分のポート80のnginxconfig。ユーザーが最初にアクセスするものに、次を追加します。

proxy_http_version 1.1;

ワニスのログを見てみましょう。nginxからのリクエストの小さな違いの1つ-空白のページ-:

ReqProtocol HTTP/1.0

そして、ワニスのポート(例:mypage:6081)にアクセスしているWebブラウザから直接来たものは次のとおりです。

ReqProtocol HTTP/1.1

だから私はnginxに1.1を使用するように強制しました、そして今それは動作します。

3
Cesc