使用通配符域名来提供图像,避免 http 阻塞

使用通配符域名来提供图像,避免 http 阻塞

我读到浏览器有时会阻止等待来自同一主机的多幅图像,我正在尽一切努力加快页面加载时间。

一个警告:我需要通过 HTTPS 提供文件。

关于这是否可行的任何意见:

  1. 为 *.domain.com 设置通配符证书。
  2. 每当我需要一张图片时,就会根据文件名的哈希模 5 生成一个数字,并将其附加到“img”子域(例如 img1.domain.com、img4.domain.com、img3.domain.com 等);哈希将使任何文件名始终使用相同的子域,因此浏览器应该能够缓存图像
  3. 配置动态虚拟主机记录以将所有 img#. 子域指向 /var/www/img

我正在寻找有关此计划的反馈。我担心的是:

  1. 当我的页面有指向多个子域的 https:// 链接时,我会收到警告吗?
  2. 我所说的动态虚拟主机记录是否可行?
  3. 考虑到这需要的处理量,它是否可能产生任何形式的总体效益?我可能平均每页有六张图片,每次刷新页面时只有一半会更改。

提前感谢您的反馈。

答案1

如果您有一个指向 Web 服务器的通配符 DNS 条目,并且该条目配置为在所有可能的主机上应答,并且您有一个通配符 SSL 证书,则您的方案是可行的。不过我确实看到了一些问题:

  1. 通过将每个图像放在不同的主机名上,您可以增加加载页面所需的 DNS 查找次数。
  2. 通过将它们放在不同的主机名上,您就无法让浏览器为多个图像重用现有的 TCP 连接。建立 TCP 连接是“昂贵的”,现在必须为每个图像建立一个连接,而不是在图像位于同一主机名下时建立并重用的连接。

一般来说,服务图像的一些良好做法包括:

  1. 从与主域不同的主机名加载图像,但将它们限制为一个或两个其他主机名(出于上述原因)。
  2. 确保这些主机名上没有使用 cookie(无需浏览器随请求一起发送 cookie)。
  3. 确保为这些主机名上提供的内容启用缓存(但通常不适用于 SSL)。
  4. 合并图像并尽可能使用 CSS 精灵。
  5. 还有很多其他情况良好记录 别处

答案2

  1. 不,如果所有都是 SSL 和有效证书,您就不会遇到麻烦。
  2. 是的,至少在 apache 中,它就像设置一行一样简单ServerAlias *.domain.com
  3. 目前的情况并非如此。

更合适的解决方案:

使用轻量级服务器(例如,在不同的域下使用 lighttpd,并且不加载任何重型模块(轻量级进程),并且每个服务器只使用一个具有适当设置的服务器。或者更好的是,使用 nginx 作为服务器,因为这样可以:

  1. 不需要不同的域/端口/证书。
  2. nginx 提供静态内容,并充当“动态”请求的反向代理服务器,这些请求发往你原来的、更重的服务器,该服务器可以在本地的另一个端口/ip 上运行,也可能是另一个服务器,由你选择
  3. 在 nginx 中设置适当的设置(如 keepalive、workers 等)
  4. 提供 HTTPS 服务没有问题

相关内容