我读到浏览器有时会阻止等待来自同一主机的多幅图像,我正在尽一切努力加快页面加载时间。
一个警告:我需要通过 HTTPS 提供文件。
关于这是否可行的任何意见:
- 为 *.domain.com 设置通配符证书。
- 每当我需要一张图片时,就会根据文件名的哈希模 5 生成一个数字,并将其附加到“img”子域(例如 img1.domain.com、img4.domain.com、img3.domain.com 等);哈希将使任何文件名始终使用相同的子域,因此浏览器应该能够缓存图像
- 配置动态虚拟主机记录以将所有 img#. 子域指向 /var/www/img
我正在寻找有关此计划的反馈。我担心的是:
- 当我的页面有指向多个子域的 https:// 链接时,我会收到警告吗?
- 我所说的动态虚拟主机记录是否可行?
- 考虑到这需要的处理量,它是否可能产生任何形式的总体效益?我可能平均每页有六张图片,每次刷新页面时只有一半会更改。
提前感谢您的反馈。
答案1
如果您有一个指向 Web 服务器的通配符 DNS 条目,并且该条目配置为在所有可能的主机上应答,并且您有一个通配符 SSL 证书,则您的方案是可行的。不过我确实看到了一些问题:
- 通过将每个图像放在不同的主机名上,您可以增加加载页面所需的 DNS 查找次数。
- 通过将它们放在不同的主机名上,您就无法让浏览器为多个图像重用现有的 TCP 连接。建立 TCP 连接是“昂贵的”,现在必须为每个图像建立一个连接,而不是在图像位于同一主机名下时建立并重用的连接。
一般来说,服务图像的一些良好做法包括:
答案2
- 不,如果所有都是 SSL 和有效证书,您就不会遇到麻烦。
- 是的,至少在 apache 中,它就像设置一行一样简单
ServerAlias *.domain.com
- 目前的情况并非如此。
更合适的解决方案:
使用轻量级服务器(例如,在不同的域下使用 lighttpd,并且不加载任何重型模块(轻量级进程),并且每个服务器只使用一个具有适当设置的服务器。或者更好的是,使用 nginx 作为服务器,因为这样可以:
- 不需要不同的域/端口/证书。
- nginx 提供静态内容,并充当“动态”请求的反向代理服务器,这些请求发往你原来的、更重的服务器,该服务器可以在本地的另一个端口/ip 上运行,也可能是另一个服务器,由你选择
- 在 nginx 中设置适当的设置(如 keepalive、workers 等)
- 提供 HTTPS 服务没有问题