我们在 Ubuntu 10.04 上使用 Apache2 在 LAMP 堆栈上运行了超过一百个 Web 应用程序(每天都在增加)。
我们希望对静态内容的所有请求都是无 cookie 的。
我们在许多不同的域上托管应用程序,其中大多数是 SaSS 应用程序。许多域在子域上托管应用程序实例,即 myapp.example.com、myapp2.example.com myapp.otherexample.com 等。
目前,所有静态内容都是相对于请求它的(子)域的服务器。
据我了解,我需要设置一个新域名,例如staticexample.com。
在这种情况下是否需要在该域的虚拟主机中进行特殊配置以确保不提供 cookie?
另外,是否可以改用 static.example.com?
在这种情况下我需要在这个子域名的虚拟主机中进行哪些配置才能确保不提供任何 cookie?
答案1
当您设置不同的域(不是子域)来提供静态内容时,它将没有 cookies。cookie 由应用程序设置,而不是由网络服务器设置。
例如,yahoo 使用 yimg.com 提供静态内容。当 yahoo.com 上的页面引用 yimg.com 上的对象时,yahoo.com 的 cookie 不会随发送到 yimg.com 域的请求一起发送,因为一个域的 cookie 无法被另一个域访问。
我建议您使用 static-example.com 而不是 static.example.com 来提供静态内容。为此,您无需在 Web 服务器中为 Cookie 做任何特殊操作。像配置普通域一样配置静态域并开始使用它。
答案2
首先是简单的部分:DNS。您需要做的就是创建指向服务器的额外记录,无论您是将它们创建为现有主机名的 CNAME 记录,还是直接指向 IP 地址的 A 记录,都由您决定。
第二部分,中等部分:Apache。您无需说明托管的内容或是否已经有虚拟主机。最简单的解决方案是完全关闭虚拟托管(配置中根本没有 VirtualHost 或 NameVirtualHost 命令,只有全局级别的 DocumentRoot),这将使 apache 为完全相同的站点提供服务,无论客户端如何连接。否则,如果您想对DocumentRoot
不同的主机名使用不同的 s,则需要将其设置NameVirtualHost
为类似 的内容*:80
,然后创建<VirtualHost *:80>
(必须与 NameVirtualHost 的设置匹配)记录,例如
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example.com
</VirtualHost>
<VirtualHost *:80>
ServerName static.example.com
DoumentRoot /var/www/static
</VirtualHost>
最后,最难的部分:使其“无 cookie”。域级 cookie 会发送到该域中的每个站点,因此您必须购买一个完全独立的域(例如 staticexample.com),或者强制每个人都使用“www.example.com”,并在您的应用程序中发出仅在“www.example.com”上有效的 cookie。强制部分可以使用
<VirtualHost *:80>
ServerName example.com
RedirectPermanent / http://www.example.com/
</VirtualHost>
修复应用程序中的 cookie 由您决定。例如,查看 PHP 的 $domain 字段设置cookie()功能。
如果你使用单独的域名,那么除了上面的重定向之外,你还可以ServerAlias example.com
在www.example.com虚拟主机。