如何将不同的子域请求重定向到不同的端口
我有两个应用程序,一个是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的请求,并进行必要的重新路由。
如何做到这一点?谢谢。
我会假设你有你自己的原因,希望两个站点(www
和blog
)在不同的端口上运行 - 在不同的进程。如果这不是你想要的,例如你不想有两个不同的进程,那么有不同的端口可能不是你想要的:使用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>
关我的帽子的顶部:
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>
我使用代理这种类型的东西。
在我的例子中,我有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>
更完整的答案,这将是做这样的事情,让你可以设置一个代理网关是什么松耦合如上所述。
服务器名本地主机
<Proxy *>
Order deny,allow
Allow from localhost
</Proxy>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:10081/
ProxyPassReverse / http://localhost:10081/
ProxyPassReverseCookiePath/ http://localhost:10081/
运行在端子下面的行(指定域和子域名正确地)
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
Ummmm ......为什么以下行?你知道基于名称的虚拟主机吗? – derobert 2009-02-26 06:48:07
借调@ derobert的“为什么”。请解释。 – matpie 2009-02-26 07:23:36
我更新了这个问题,对不起,在第一时间没有发布好问题 – Graviton 2009-02-26 07:26:43