为什么基于端口的VirtualHost不起作用?

时间:2014-04-06 03:28:59

标签: apache virtualhost

我正在尝试在两个不同的端口上提供两个不同的Django应用程序。我在端口80上有app1,在端口8080上有app2。所以我期待的是当我将example.com:80放入浏览器时,我的请求应该从app1提供,当我放入example.com:8080时在我的浏览器中,我的请求应该从app2提供。但是,有时它会从错误的应用程序提供我的请求。然后,经过几次刷新后,它有时会切换。更重要的是,有时它会从正确的应用程序提供,然后,在几次刷新后,切换到错误的应用程序。我知道这不是因为浏览器端缓存,因为我也尝试从机器发送curl请求,我得到了同样的行为。我无法理解为什么我会得到这种意想不到的,不确定的行为。

这是我的VirtualHost配置:

<VirtualHost *:80>                                                                                                                                                              
  ServerAlias *
  ServerPath /app1/
  WSGIScriptAlias /app1 /home/eyuelt/app1/app1/wsgi.py
  Alias /app1/static /home/eyuelt/app1/staticfiles

  <Directory /home/eyuelt/app1/app1>
    <Files wsgi.py>
      Order deny,allow
      Require all granted
    </Files>
  </Directory>

  <Directory /home/eyuelt/app1/staticfiles>
    AllowOverride None
    Order Deny,Allow
    Require all granted
  </Directory>
</VirtualHost>

Listen 8080
<VirtualHost *:8080>
  ServerAlias *
  ServerPath /app2/
  WSGIScriptAlias /app2 /home/eyuelt/app2/app2/wsgi.py
  Alias /app2/static /home/eyuelt/app2/staticfiles

  <Directory /home/eyuelt/app2/app2>
    <Files wsgi.py>
      Order deny,allow
      Require all granted
    </Files>
  </Directory>

  <Directory /home/eyuelt/app2/staticfiles>
    AllowOverride None
    Order Deny,Allow
    Require all granted
  </Directory>
</VirtualHost>

1 个答案:

答案 0 :(得分:0)

我怀疑这可能是问题所在:

http://httpd.apache.org/docs/2.2/vhosts/examples.html

  

这就是您想要的:您有多个域转到同一个IP   并且还想服务多个端口。通过定义中的端口   &#34;&了NameVirtualHost#34;标签,你可以允许这个工作。

     

其中一个或两个可能是问题:如果您尝试使用    没有NameVirtualHost名称:port或者你   尝试使用Listen指令,您的配置将无法正常工作。

服务器示例:

Listen 80
Listen 8080

NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080

<VirtualHost 172.20.30.40:80>
ServerName www.example.com
DocumentRoot /www/domain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example.com
DocumentRoot /www/domain-8080
</VirtualHost>

<VirtualHost 172.20.30.40:80>
ServerName www.example.org
DocumentRoot /www/otherdomain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>