小编Col*_*inM的帖子

哪些反向代理支持 HTTP/1.1 ETag 和 If-None-Match 标头?

我正在为电子商务平台开发一个缓存系统,该系统将使用反向代理进行缓存。我计划通过使用正确的 HTTP/1.1 标头来处理失效。也就是说,我将在第一代内容上设置一个 ETag,并在应用程序中缓存该 ETag 值。Cache-Control 标头将指定“必须重新验证”,因此代理应在带有 ETag 的后续请求上设置 If-None-Match 标头。应用程序将查找缓存的 ETag 值,如果匹配将发送 304 响应,否则将生成完整的 200 响应。

我希望使用 nginx,但我不能确定它是否支持 ETag(文档表明它不支持,但也许它们已经过时了?)。清漆是另一种选择,但我在这里也不乐观..

哪些反向代理服务器完全支持 ETag?我希望它能够真正缓存多个版本,这样我就可以在不必禁用缓存的情况下进行拆分测试之类的操作。也就是说,HTTP/1.1 指定客户端可以发送带有多个 ETag 值的 If-None-Match,服务器应响应匹配的 ETag(如果有)。如果反向代理保留多个副本而不仅仅是最后看到的值,并让服务器在每个请求上指定要使用的值,那将是理想的。

http nginx varnish reverse-proxy etags

8
推荐指数
1
解决办法
7317
查看次数

带有 Apache 2.4 的 RFC 2616

我使用 Apache 2.4.3 作为反向代理,因为它宣传符合 RFC 2616。我的应用程序使用这样的标头来启用代理缓存:

Cache-Control: public, s-maxage=0
Expires: ... (+1 day)
X-Group: A
Vary: X-Group
ETag: W/"foo1"
Run Code Online (Sandbox Code Playgroud)

在第一个请求预热缓存后,如果我的应用程序更改为响应:

Cache-Control: public, s-maxage=0
Expires: ... (+1 day)
X-Group: B
Vary: X-Group
ETag: W/"foo2"
Run Code Online (Sandbox Code Playgroud)

如果来自 Apache 的 If-None-Match 标头与源生成的 ETag 匹配,则应用程序将响应 304 Not Modified。但是,Apache 然后缓存第二个 200 响应并新响应替换“foo1”记录,而不是缓存具有不同 ETag 的两个响应。因此,而不是If-None-Match: W/"foo1", W/"foo2"下一个重新验证请求只是If-None-Match: W/"foo2". 所以缓存不断地丢失而不是总是得到命中。

来自 RFC 2616 第 12.1 节:

然而,源服务器不限于这些维度,可以根据请求的任何方面改变响应,包括请求头字段之外的信息或本规范未定义的扩展头字段内的信息。

我为 Vary 尝试了以下组合:

Vary: X-Foo
Vary: *
Vary: User-Agent
Run Code Online (Sandbox Code Playgroud)

我还尝试了强和弱 ETag,无论我无法让 Apache 同时缓存两个响应,它 …

http reverse-proxy etags apache-2.4

6
推荐指数
1
解决办法
454
查看次数

为什么使用 php + fastcgi 将响应截断为 16k?

我已经从运行 Wordpress 博客的源代码编译了 PHP 5.3.3 和 nginx 0.8.47。Wordpress 生成的 RSS 提要在大约 16k 处被截断(包括标题为 16k+90b)。通过将以下内容添加到我的 nginx 配置中:

fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
Run Code Online (Sandbox Code Playgroud)

问题消失了.. 但是,从我在Nginx wiki 页面上阅读的内容来看,缓冲区仅确定缓冲何时会溢出到磁盘上。由于缓冲区太小,没有任何迹象表明响应可以被截断。

所以我的问题是,为什么在更改此设置之前响应会被截断?似乎请求不应该被截断,只是由于磁盘缓冲而变慢了一点。

附加信息:

  • Ubuntu 10.04.2 32 位
  • 页面大小 4k

nginx fastcgi php-fpm

5
推荐指数
1
解决办法
4115
查看次数

在哪里可以找到 exim 的“debug_print”的输出?

我正在尝试调试 exim 配置问题(Ubuntu),我在配置中看到很多行,例如:

remote_smtp:
   debug_print = "T: remote_smtp for $local_part@$domain"
   driver = smtp
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何获取这些语句的输出。我尝试编辑 /etc/default/exim4 并在那里添加各种 CLI 参数,例如 -v、-d、-d+all,虽然它们确实有效,但 debug_print 行却找不到(stderr、stdout、 /var/log/exim4/mainlog)。

如何启用以及在哪里找到“T:remote_smtp for ...”输出?

ubuntu exim

5
推荐指数
1
解决办法
5527
查看次数

如何让nginx反向代理让503错误页面传递给客户端?

我在 nginx 后面运行 Magento(电子商务 PHP 应用程序)作为运行 PHP 应用程序的 Apache 的反向代理。静态内容由 nginx 直接提供。Magento 有一个“维护模式”,它使用 503 HTTP 响应。使用我的配置,当启用维护模式时,nginx 返回一个带有 500 响应的空白页面,而不是带有 503 响应的 Magento 良好的维护模式页面。如何让nginx让503页面传递给客户端?

这是我的 nginx 配置:

上游 examplecluster { 服务器 1.2.3.4:80; }
服务器 {
  听 1.2.3.5:80;
  server_name www.example.com;
  根/var/www/example.com/www;

  # 安全
  位置 ~ (/(app/|includes/|lib/|pkginfo/|var/|report/config.xml|downloader/(pearlib|template|Maged)/)|/\.svn/|/\.ht.+ ){
    返回404;
  }

  位置 ~ \.php$ {
    proxy_pass http://examplecluster;
    proxy_redirect 默认;
  }

  # 静态内容
  地点 / {
    try_files $uri @apache;
    7d 到期;
  }

  #阿帕奇
  位置@apache {
    proxy_pass http://examplecluster;
    proxy_redirect 默认;
  }
}

nginx reverse-proxy magento

0
推荐指数
1
解决办法
4503
查看次数

标签 统计

nginx ×3

reverse-proxy ×3

etags ×2

http ×2

apache-2.4 ×1

exim ×1

fastcgi ×1

magento ×1

php-fpm ×1

ubuntu ×1

varnish ×1