如果我拥有x.x.x.x
网络服务器,我可以在上面创建两个独立的网站x.x.x.x/one
并x.x.x.x/two
给它们两个不同的域名吗?
在这种情况下它将如何处理内部链接x.x.x.x/one/foo/page.html
?
我使用 CentOS 7 和 LAMP,一些网站使用 WordPress
答案1
一台服务器可以关联多个域名吗?
是的。这可以通过 DNS 将这些域名指向您的 Web 服务器来实现。
如果我拥有“xxxx”网络服务器,我可以在“xxxx/one”和“xxxx/two”上创建两个独立的站点并给它们两个不同的域名吗?
这取决于您的 Web 服务器软件。您当然可以将两个域都指向您的服务器,但服务器软件将负责区分哪些流量是发往哪个域的。
一些较小的 Web 服务器项目不支持这种功能。但是,较大的项目通常支持。对于 Apache 和 Nginx,这种支持通过以下方式实现基于名称的虚拟主机和服务器块这两个项目还支持服务器名称指示(SNI)也用于 TLS(HTTPS)连接。
在这种情况下它将如何处理内部链接
x.x.x.x/one/foo/page.html
?
通常,您会将文件夹的完整路径设置one
为虚拟主机或服务器块配置中的文档根目录(即“主”域的起始位置)。引用 eg 的页面example.com/foo/page.html
将引用 eg x.x.x.x/one/foo/page.html
。如果您只想使用 eg example.com/page.html
,则应将文档根目录设置为 的完整路径foo
。
WordPress
WordPress 有自己的处理域名的方法。在您的示例中,假设您希望 WordPress 处理两个域名,您将:
在 DNS 中指定两个域。
创建两个与这些域相对应的虚拟主机(在 Apache 中)。
设置每个文档根目录以指向您的 WordPress 安装。
配置 WordPress 来为这两个域提供服务。
否则,您只需将一个文档根目录指向您的 WordPress 安装(并在 WordPress 中仅配置一个域)并将另一个文档根目录指向您的非 WordPress 文件。
笔记
对于上述解释,我假设您已经在 处设置了 Web 服务器,
x.x.x.x
并且one
并且foo
是您为服务器设置的默认文档根目录下的目录。值得一提的是,DNS 仅指向 IP 地址(例如
1.2.3.4
)或(在 CNAME 记录的情况下)整个域(例如example.com
)。您不能将 DNS 指向例如http://1.2.3.4/one
。有些域名提供商可能会提供网页重定向(例如
http://1.2.3.4/one
),但这些不是 DNS 的一部分。在这种情况下如何处理页面请求(再次)完全取决于您的服务器。
最小 Apache 虚拟主机示例
例如常规域名
<VirtualHost *:80>
ServerName example1.com
# ServerAlias www.example1.com, *.example1.com
DocumentRoot "/path/to/www/Wordpress_Site"
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
# ServerAlias www.example2.com, *.example2.com
DocumentRoot "/path/to/www/Non-Wordpress_Site"
</VirtualHost>
例如子域名
<VirtualHost *:80>
ServerName sub1.example.com
# ServerAlias www.sub1.example.com, *.sub1.example.com
DocumentRoot "/path/to/www/Wordpress_Site"
</VirtualHost>
<VirtualHost *:80>
ServerName sub2.example.com
# ServerAlias www.sub2.example2.com, *.sub2.example.com
DocumentRoot "/path/to/www/Non-Wordpress_Site"
</VirtualHost>
答案2
如果您使用 HTTPS(HTTP+TLS),请注意以下几点:交易开始时,操作有特定的顺序:
- 使用服务器的 IP 地址建立传入连接。
- TLS 会话已协商。
- 设置 TLS 后,HTTP 请求将传递到 HTTP 服务器。
如果您有多个指向同一 IP 地址的 DNS 主机名,则需要确保站点的 TLS 证书涵盖全部服务器提供的主机名。客户端在 HTTP 请求通过之前不会告诉服务器它试图获取的主机名(步骤 3),但客户端在步骤 1 之前就知道所需的主机名,并期望在步骤 2 中发送给它的服务器证书具有匹配的主机名,否则浏览器可能会显示“此服务器可能被冒充”警告屏幕。
如果您拥有通配符证书并且所有主机名都位于该证书所涵盖的域中,那么这非常简单。如果您需要向证书提供商提供主机名列表(也称为“主题备用名称”)以便将它们全部包括在内,那么情况会变得更加棘手。
在步骤 3 之前,存在一个 TLS 重新协商机制,该机制可能能够根据主机名提供不同的证书,但该机制并不完善,而且大多数服务器都没有配置它。配置 Web 服务器以提供一份证书要容易得多。
答案3
这是可能的,具体配置取决于您的 Web 服务器。例如,对于 Apache,请参阅这里。
您需要让两个域的 DNS 指向您服务器的 IP 地址 - 但只有其中一个可以设置为反向地址(IP 到域名解析)。