在端口 80 上托管多个网站

Posted

技术标签:

【中文标题】在端口 80 上托管多个网站【英文标题】:Host multiple web sites on port 80 【发布时间】:2013-02-17 23:28:45 【问题描述】:

所以我可能对这里发生的事情有一些基本的了解,但我无法让它发挥作用。我有两个 django 网站,我希望能够将它们都托管在同一个盒子上,都在端口 80 上。有什么魔法可以让它正常工作吗?这是我的站点可用/默认文件的样子:

<VirtualHost *:80>
    WSGIScriptAlias / /path/to/proj/apache/django.wsgi
    AliasMatch ^/([^/]*\.css) /path/to/proj/static/
    Alias /media /path/to/proj/static/
    Alias /static/ /path/to/proj/static/

    ErrorLog $APACHE_LOG_DIR/error.log
    LogLevel warn
    CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

<VirtualHost *:80>
    WSGIScriptAlias / /path/to/otherproj/apache/django.wsgi

    ErrorLog $APACHE_LOG_DIR/error2.log
    LogLevel warn
    CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

显然这不起作用,因为导航到该站点会命中第一个站点,而它永远不会转到第二个站点。所以我的问题是,我如何设置它,以便我可以在端口 80 上托管 2 个网站。也许我可以像 localhost/site1 和 localhost/site2 那样做,但无论我尝试什么,我都可以似乎无法让它发挥作用。

我玩过 ServerName 属性,但我真的不明白它是如何工作的,设置它似乎并没有改变点击那台机器的 ip 只显示第一个网站,我不知道使用 ServerName 会影响任何事情。

任何建议,或者如果我需要提供更多信息,请告诉我。

还请注意,如果我将第二个更改为端口 8080,它们都可以工作,但是这样做时,我似乎无法将域名放在 myip:8080 之上。

【问题讨论】:

它应该如何知道服务于哪个网站? 【参考方案1】:

我认为这里没有什么可以解释的。您只需要实际指定每个虚拟域的名称。

注意:NameVirtualHost 已弃用

<VirtualHost *:80>
    ServerName site1.ltd
    WSGIScriptAlias / /path/to/proj/apache/django.wsgi
    AliasMatch ^/([^/]*\.css) /path/to/proj/static/
    Alias /media /path/to/proj/static/
    Alias /static/ /path/to/proj/static/

    ErrorLog $APACHE_LOG_DIR/error.log
    LogLevel warn
    CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.ltd
    WSGIScriptAlias / /path/to/otherproj/apache/django.wsgi

    ErrorLog $APACHE_LOG_DIR/error2.log
    LogLevel warn
    CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

【讨论】:

假设我的 ip 是 1.2.3.4,如何让我以不同的方式访问每个站点? 您必须将 site1.ltd 和 site2.ltd 都注册为指向 ip 1.2.3.4。然后访问 site2.ltd 的人将被路由到您的服务器,您的服务器将知道(通过 HTTP 请求标头)仅向他们提供第二个站点。 好的,所以一旦我将域名指向该地址,它就会知道根据使用的域名解析哪个,但如果我直接访问该地址,它只会是第一个?我想这是有道理的,我会看看它是否有效(尽管更改我的域名指向的位置最多需要一个小时) 几乎太简单了,我没有意识到 apache 会知道使用什么域来到达那里,我试图找出一种方法让它只通过访问 ip 地址来工作,但是这个容易得多。谢谢。 看看这个:en.wikipedia.org/wiki/HTTP_headers(特别是Host头域)

以上是关于在端口 80 上托管多个网站的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS 上托管多个网站 - Amazon Linux EC2

如何在支持ssl的aws ec2单实例上托管多个网站?

在具有多个域的同一服务器上托管 PHP 和 Node.js 应用程序

在 Azure Blob 存储上托管多个静态网站

我无法让 Vhost 在 centos 6.8 上托管多个 wordpress 网站

在一个 IP 上托管多个 Golang 站点并根据域请求提供服务?