如何将不同的子域请求重定向到不同的端口

时间:2009-02-26 06:29:31

标签: apache

我有两个应用程序,一个是www.myexample.com,另一个是blog.myexample.com。我正在使用PHP和Apache。

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

编辑:感谢所有回复的人,但我担心我不明白这个问题 - 我的不好!

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

怎么做?谢谢。

5 个答案:

答案 0 :(得分:35)

我将假设您有自己的理由希望这两个站点(wwwblog)在不同的端口上运行 - 并且在不同的进程中运行。如果这不是您的意图,例如您不希望有两个不同的进程,然后拥有不同的端口可能不是您想要的:改为使用VirtualHost,在端口80上的同一个apache + php实例中共同托管两个域。否则,请继续阅读。

假设您的两个apache + php进程分别在localhost:82和localhost:83上进行侦听,请启动第三个仅使用apache的进程作为反向代理。让反向代理apache实例侦听来自Internet的端口80上的请求,具有两个虚拟主机定义。第一个虚拟主机定义www将请求转发到localhost: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>

答案 1 :(得分:5)

我使用代理来处理这类事情。

在我的示例中,我在端口80上运行了apache 1.3,但是我需要svn存储库在apache 2.2上运行,而且我不想每次都在域的末尾键入:82。所以我在apache 1.3(端口80)上进行了代理重定向:

<VirtualHost *:80>
  ServerName svn.mydomain.com
  ServerAlias svn
  ServerAdmin my@email.com

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

答案 2 :(得分:3)

在终端上运行以下行(正确指定您的域名和子域名)

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

粘贴以下代码并根据您的要求进行更改

<VirtualHost *:80>
        ServerAdmin admin@domain.com
        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

答案 3 :(得分: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>

答案 4 :(得分:0)

对此更完整的答案是做一些这样的事情,允许你设置一个代理网关,这是上面所说的。

    ServerName localhost

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

ProxyRequests           Off
ProxyPreserveHost       On      

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