今天有幸学习了文件转发这一块了
好久以前, 刚毕业的时候, 我就有想过这个问题, 最后还是不了了之
也确实如此, 文本, 数据传输这块在Web服务器是强项
由应用程序来实现对资源的控制 (权限, 积分规则等等)
应用程序内部对Web服务器通信 (发送特殊Header头)
Web服务器接收后进行特殊处理
然而Apache
和Nginx
的请求头是不相同的, 如下有一张关于sendfile的表:
SENDFILE 头 | Web服务器 |
---|---|
X-Sendfile | Apache , Lighttpd v1.5 , Cherokee |
X-LIGHTTPD-send-file | Lighttpd v1.4 |
X-Accel-Redirect | Nginx , Cherokee |
话不多说, 看看在Apache
和Nginx
下, 各自是如何配置的吧
Apache
Apache
需要 mod_xsendfile
的支持.
打开模块后, 发送header头时, 以文件真实路径发送过去即可
应用程序(PHP)则是发送Header头如下:
1 | $filePath = '/mnt/d/somewhere/004.png'; |
Nginx
Nginx
下多加了一步映射, 首先PHP
代码如下:
1 | header("X-Accel-Redirect: /customPath/$filePath"); |
Nginx
里默认是支持 sendfile 的
配置如下:
1 | location /customPath/ { |