在端口 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
在具有多个域的同一服务器上托管 PHP 和 Node.js 应用程序