【问题标题】:Best practices for maintaining assets accross (sub)domains?跨(子域?
【发布时间】:2011-11-10 20:00:51
【问题描述】:

我的网络服务器文件系统相当于以下内容:

/master-domain.tld
/master-domain.tld/assets/js/foo.js
/master-domain.tld/assets/css/bar.css

/sub1.master-domain.tld
/sub1.master-domain.tld/assets/js/foo.js

/sub2.master-domain.tld
/sub1.master-domain.tld/assets/css/bar.css
...

我想知道的是如何将我的公共静态资产(托管在主域上)提供给我的子域——原因是我只需要维护一组“主”资产,而不是每次我编辑它们时,将任何文件更新/复制到所有其他子域。显然,这可以使用绝对 URL 来实现,但我的目标是避免这些,以便我的本地/开发系统在设计/调试时不需要进行任何远程调用。

目前,我为每个子域设置了 mod_rewrite + 符号链接 + php 脚本组合,将对不存在的本地资产的任何调用链接到主资产。例如调用“/sub1.master-domain.tld/assets/css/bar.css”将检索 master 域上托管的 bar.css 文件,因为 bar.css 的本地版本不存在。此外,调用“/sub1.master-domain.tld/assets/js/foo.js”将为 local 版本的 foo.js 提供服务,因为它确实存在。

但我目前的方法似乎阻碍了我的页面加载性能,我想知道是否有更好的(仍然是模块化的)方法来解决这个问题。

有什么建议吗?我是否以完全错误的方式处理这个问题?

【问题讨论】:

    标签: php html apache assets subdomain


    【解决方案1】:

    如果符号链接都在同一台服务器上,那么它们应该是所有必需的。这应该不会导致性能下降。例如。

    /sub1.master-domain.tld/assets -> /master-domain.tld/assets
    

    如果您的子域由多个服务器提供服务,我将设置一个 mod_rewrite 规则,将 302 重定向到主域上的完整 URL。在该主域服务器上,我将设置 mod_expires 以便缓存资产,避免大多数后续请求对子域上相同的“丢失”资产。

    【讨论】:

      【解决方案2】:

      如果它们在同一台机器上,为什么不将不同的虚拟主机别名指向同一个文档根目录?

      【讨论】:

      • 也许我理解错了,但我认为你的意思是做这样的事情?:<VirtualHost *:80> DocumentRoot "/path/to/master-domain.tld" ServerName master-domain.tld ServerAlias sub1.master-domain.tld </VirtualHost> 但这不允许我在子域上托管网站本身......(因为,AFAIK,我无法在 ServerAlias 语句中指定特定的文件路径)。除非您打算改用 mod_alias ——但这基本上等同于我现在设置的符号链接,不是吗?
      【解决方案3】:

      我会使用保留的静态。用于此目的的子域,并将所有请求都针对该子域。

      【讨论】:

      • 我相信这相当于使用绝对 URL;我必须按如下方式列出文件 src:<script src="http://assets-sub.master-domain.tld/assets/js/foo.js"></script>,这无法实现我独立于本地/远程主机的目标。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2013-05-14
      • 2018-05-04
      • 2014-07-13
      • 2011-06-26
      • 2017-09-13
      • 2015-08-09
      相关资源
      最近更新 更多