我想把Nginx放在Varnish面前,同时它会回到Nginx来为PHP(Drupal)提供服务.
但我只得到空白页面(来自Varnish)200响应,但长度为0.只有重新启动清漆工作后的第一次访问,但随后是空白页面.
这是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执行后端设置为Apache PHP-fpm(而不是Nginx:Nginx-> varnish-> apache)它也可以正常工作(虽然如果PHP执行者是HHVM,但我可能会遇到同样的问题问题).
编辑:抱歉这是错误的,如果我使用apache它只有当我取消选中drupal的默认缓存(未经身份验证的用户的缓存页面)时才有效.使用Nginx无关紧要,无论使用此复选框,它都无法运行.
你们中的任何人都知道可以指导我的事情吗?
最佳答案
@H_502_42@所以我希望有人给出答案,但与此同时我做了它,所以我将解释如何:
Nginx配置在服务器部分端口80.用户将首先访问的那个,添加:
proxy_http_version 1.1;
看一下清漆日志,来自Nginx -blank page-的请求之间的一点差异:
ReqProtocol HTTP/1.0
一个直接从webbrowser访问清漆端口(例如:mypage:6081) – 正确地工作 – 是:
ReqProtocol HTTP/1.1
所以我强迫Nginx使用1.1,现在它可以工作了.