Nginx反向代理服务器没有正确提供caching的主页

我最近为Web开发客户端configuration了一个新的服务器,并遇到了一个有趣的问题。 该网站的stream量相当高,但CMS在实时生成页面时相当繁重且效率低下。 当需要直接从CMS生成页面时,这会显着降低页面加载速度。 不幸的是CMS与Apache有许多关系,所以通过nginx提供页面并不是一个可行的select。 另外,CMS的Apache .htaccess文件必然有些复杂且涉及到,因此Apache提供的请求相对较慢。

由于这些因素,我将nginxconfiguration为反向代理服务器,并为CMS编写了一个插件,将页面呈现为静态HTML,并将其存储在特定的caching目录中。 我的意图是configurationnginx直接提供caching文件的请求,从而完全避免apache(更重要的是,避免CMS)。

到目前为止,这个过程已经顺利进行了,我有nginx成功地为CMS生成的caching文件提供服务(与CMS的500 + ms相比,响应时间很短,为25ms),如果caching文件没有传递到CMS存在,除了一个例外:主页。 出于某种原因,主页位置块似乎并没有被激活。

这是网站configuration(匿名):

# reverse proxy config for example.com, serves all non-dynamic files server { listen 80; server_name example.com www.example.com; root /var/www/example.com/; add_header "X-Index-0" "block-0"; location ^~ ^(index)?\.?(htm|html|php|asp|aspx)?$ { try_files /var/www/example.com/cache/index.html @apache; add_header "X-Index-1" "block-1"; } location / { try_files /var/www/example.com/cache/index.html @apache; add_header "X-Index-2" "block-2"; } location ~ ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|js|ttf|woff|svg|otf)$ { etag on; expires 30d; } location ~ ^(.+\.html)$ { root /var/www/example.com/static-cache; add_header "X-Cache-Hit" $uri; try_files $1 @apache; expires 7d; } location @apache { add_header 'X-Block-Apache' 'block'; proxy_set_header 'Host' $host; proxy_set_header 'X-Forwarded-From' $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; } } 

问题是,尽pipe存在/var/www/example.com/cache/index.html(通过打开它进行validation,每个对网站根目录(example.com)的请求都会被路由到@apache块具有相同用户nginx的文本编辑器运行)。 我将add_header行添加到每个位置块,试图了解正在激活的位置块以及按照什么顺序。 不幸的是,我得到的响应请求的唯一标题是“X-Block-Apache”,这表明针对站点根目录的位置块(以及索引文件的任何请求)都没有激活。

http://example.com/index.html给了我一个“X-Cache-Hit”头文件,而且非常明显地是由nginx提供的(大约是页面速度的15倍从CMS服务)。 但是,不应该在这种情况下第一个位置块触发? 如果访问example.com似乎没有触发“位置/”块,我能做些什么来从nginx获取索引文件?

感谢您的帮助!

您的try_files尝试加载您指定的文件/var/www/example.com/var/www/example.com/cache/index.html ,该文件不存在。

请记住,您需要指定相对于文档root的path。

 try_files /cache/index.html @apache;