Назад | Перейти на главную страницу

NginX-> Varnish-> PHP-FPM Пустые страницы

Я хочу поставить nginx перед Varnish, который в то же время вернется к nginx для обслуживания некоторого PHP (Drupal).

Но я получаю только пустые страницы (от Varnish) с ответом 200, но длиной 0. Работает только первый доступ после перезапуска 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";
}

И снова конфигурация nginx для 8080:

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 на Apache + php-fpm (вместо Nginx: nginx-> varnish-> apache), он также будет работать правильно (у меня такая же проблема, хотя если php-исполнитель HHVM, но это может быть другая проблема ).

РЕДАКТИРОВАТЬ: извините, что это было неправильно, если я использую apache, он работает, только если я сниму отметку с кеша по умолчанию drupal (страницы кеша для неаутентифицированных пользователей). С nginx это не имеет значения, он никогда не работает независимо от этого флажка.

Кто-нибудь из вас знает что-нибудь, что может направить меня?

Я надеюсь, что кто-нибудь ответит, но пока что я заставил его работать, поэтому я объясню, как:

nginx config в порт 80 серверной части. Ту, к которой пользователь получит доступ первым, добавьте следующее:

proxy_http_version 1.1;

Взглянем на журналы varnish, одно из небольших различий между запросом, исходящим от nginx -blank page-:

ReqProtocol HTTP/1.0

и один, приходящий непосредственно из веб-браузера, посещающего порт varnish (например, mypage: 6081), работающий правильно, был таким:

ReqProtocol HTTP/1.1

Поэтому я заставил nginx использовать 1.1, и теперь он работает.