2009-02-26 169 views
17

我有两个应用程序,一个是www.myexample.com,另一个是blog.myexample.com。我正在使用PHP和Apache。如何将不同的子域请求重定向到不同的端口

现在,我想让www.myexample.com在我的机器的端口82上运行,而端口83上的blog.myexample.com在同一台机器上运行。如何配置apache和/或PHP脚本,以便正确处理请求的请求时?

编辑:感谢所有回复的人,但我害怕我不明白这个问题 - 我的坏!

我真正想要的是模拟一个条件,即www.myexample.com和blog.myexample.com位于不同的机器上。因此,当请求进入时,网关服务器(也是托管www.myexample.com的服务器)将检查这是对www.myexample.com还是对blog.myexample.com的请求,并进行必要的重新路由。

如何做到这一点?谢谢。

+0

Ummmm ......为什么以下行?你知道基于名称的虚拟主机吗? – derobert 2009-02-26 06:48:07

+0

借调@ derobert的“为什么”。请解释。 – matpie 2009-02-26 07:23:36

+0

我更新了这个问题,对不起,在第一时间没有发布好问题 – Graviton 2009-02-26 07:26:43

回答

35

我会假设你有你自己的原因,希望两个站点(wwwblog)在不同的端口上运行 - 在不同的进程。如果这不是你想要的,例如你不想有两个不同的进程,那么有不同的端口可能不是你想要的:使用VirtualHost来代替共同托管端口80上的同一个Apache + PHP实例内的两个域。否则,请继续阅读。

假设您有两个分别在localhost:82和localhost:83上监听的apache + php进程,请提供第三个仅用于apache的进程以充当反向代理。有反向代理apache实例侦听来自因特网的端口80上的请求,具有两个虚拟主机定义。第一虚拟主机定义,www,将请求转发到本地主机:82,而第二个虚拟主机定义,blog,将请求转发到的locahost:83,如:

NameVirtualHost *:80 

# www 
<VirtualHost *:80> 
    ServerName www.myexample.com 
    ProxyPass    /  http://localhost:82/ 
    ProxyPassReverse  /  http://localhost:82/ 
</VirtualHost> 

# blog 
<VirtualHost *:80> 
    ServerName blog.myexample.com 
    ProxyPass    /  http://localhost:83/ 
    ProxyPassReverse  /  http://localhost:83/ 
</VirtualHost> 
0

关我的帽子的顶部:

Listen 82 
Listen 83 
NameVirtualHost 1.2.3.4 # Use your server's IP here 

<VirtualHost www.myexample.com:82> 
# Configure www.myexample.com here 
</VirtualHost> 

<VirtualHost blog.myexample.com:83> 
# Configure blog.myexample.com here 
</VirtualHost> 
5

我使用代理这种类型的东西。

在我的例子中,我有apache 1.3在端口80上运行,但是我需要svn repository在apache 2.2上运行,而且我不想每次在域的末尾输入:82。所以,我提出在Apache 1.3代理重定向(80端口):

<VirtualHost *:80> 
    ServerName svn.mydomain.com 
    ServerAlias svn 
    ServerAdmin [email protected] 

    <IfModule mod_proxy.c> 
    ProxyPass/http://svn:82/ 
    </IfModule> 
</VirtualHost> 
0

更完整的答案,这将是做这样的事情,让你可以设置一个代理网关是什么松耦合如上所述。

服务器名本地主机

<Proxy *> 
    Order deny,allow 
    Allow from localhost 
</Proxy> 

ProxyRequests   Off 
ProxyPreserveHost  On  

ProxyPass    /  http://localhost:10081/ 
ProxyPassReverse  /  http://localhost:10081/ 
ProxyPassReverseCookiePath/ http://localhost:10081/ 

2

运行在端子下面的行(指定域和子域名正确地)

sudo nano /etc/apache2/sites-available/subdomain.domain.com.conf 

将以下代码粘贴和变化您的要求

<VirtualHost *:80> 
     ServerAdmin [email protected] 
     ServerName subdomain.domain.com 
     ServerAlias subdomain.domain.com 
     ProxyRequests Off 

     #ProxyPass/http://localhost:8080/ 
     <Location /> 
       ProxyPreserveHost On 
       ProxyPass http://domain.com:8080/ 
       ProxyPassReverse http://domain.com:8080/ 
     </Location> 
    # Uncomment the line below if your site uses SSL. 
    #SSLProxyEngine On 
</VirtualHost> 

运行在终端(指定域和子域名正确)

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod subdomain.domain.com.conf 
sudo service apache2 restart 
相关问题