Я хочу поставить 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, и теперь он работает.