我想了解当 Nginx 在 Apache 前面配置为反向代理时会发生什么。以下是场景:Nginx 设置为处理 .jpg 文件 Apache 设置为处理 .php 文件
有一个 file.php,当被请求时也会调用 .jpg 文件。
当用户从此服务器请求 file.php 时会发生什么情况?请求是否传递给 Apache,然后 Apache 拾取连接并直接与用户通信,或者它通过 Nginx 发送处理后的信息,所有通信都通过 Nginx 进行?由于 .jpg 在 .php 文件中被提及,Apache 是否会提供 .php,然后 Nginx 拾取 .jpg 服务?
如果 Nginx 将提供由 Apache 处理的 .php,那么在 Nginx 提供该文件时,该文件是否会保存/缓存在某处?
众所周知,Nginx 容易受到 slowloris 之类的问题的影响,当请求 .php 时,它会忽略此类请求还是将其传递给 Apache?
有些基本问题很少得到解答。
答案1
当用户从该服务器请求 file.php 时会发生什么?请求是传递给 Apache,然后 Apache 获取连接并直接与用户通信,还是通过 Nginx 发送处理后的信息,并且所有通信都通过 Nginx 进行?
Apache 只会与 nginx 服务器通信,客户端也只会与 nginx 通信;就 Apache 服务器所知(并且您将在其日志中看到),nginx 代理就是“客户端”。
由于 .php 文件中提到了 .jpg,那么 Apache 是否会提供 .php 服务,然后 Nginx 会选择 .jpg 服务?
.jpg
即使文件请求可能发生在同一个连接中,它也将是单独的 HTTP 请求;nginx 服务器将按照配置为每个单独的资源提供服务(.jpg
本地、.php
Apache)。
如果 Nginx 将提供由 Apache 处理的 .php,那么在 Nginx 提供该文件时,该文件是否会保存/缓存在某处?
默认情况下,没有。proxy_cache
配置可以更改此设置;请参阅文档。
众所周知,Nginx 容易受到 slowloris 之类的问题的影响,当请求 .php 时,它会忽略此类请求还是将其传递给 Apache?
它会将它们传递给 Apache,因此两个服务器都会使用一个连接;在 nginx 上设置一个合理的低超时时间或者Apache 来缓解。