2009-02-26 18 views
17

Tengo dos aplicaciones, una es la www.myexample.com, otra es la blog.myexample.com. Estoy usando PHP y Apache.Cómo redirigir las diferentes solicitudes de subdominios al puerto diferente

Ahora, quiero que www.myexample.com se ejecute en el puerto 82 de mi máquina, y blog.myexample.com en el puerto 83, en la misma máquina. ¿Cómo configurar apache y/o los scripts PHP para que las solicitudes de solicitudes se atiendan correctamente?

Edit: Gracias por todos los que responden, pero me temo que no entiendo la pregunta claramente - ¡está mal!

Lo que realmente quiero es simular una condición por la cual el www.myexample.com y el blog.myexample.com están ubicados en máquinas diferentes. Por lo tanto, cuando se recibe una solicitud, el servidor de la puerta de enlace (el que también hospeda www.myexample.com) verificará si se trata de una solicitud de www.myexample.com o de blog.myexample.com y realiza los redireccionamientos necesarios.

¿Cómo hacer esto? Gracias.

+0

Ummmm ... ¿Por qué? ¿Conoces el hosting virtual basado en nombre? – derobert

+0

Seconded @ derobert's "why". Por favor explique. – matpie

+0

He actualizado la pregunta, perdón por no haber publicado una buena pregunta en primer lugar – Graviton

Respuesta

35

voy a suponer que usted tiene su propia razón para querer los dos sitios (www y blog) para funcionar en diferentes puertos - y en diferentes procesos. Si esto no es lo que pretendía, p. no deseaba tener dos procesos distintos, entonces tener puertos diferentes puede no ser lo que pretendía: use VirtualHost en su lugar, para co-hospedar los dos dominios dentro de la misma instancia apache + php en el puerto 80. De lo contrario, siga leyendo.

Asumiendo que usted tiene sus dos procesos de Apache + PHP escucha en localhost: 82 y localhost: 83, respectivamente, que aparezca un tercer proceso, Apache, sólo para actuar como un proxy inverso. Haga que la instancia apache del proxy inverso escuche las solicitudes provenientes de Internet desde el puerto 80, con dos definiciones de host virtual. La primera definición de host virtual, www, sería reenviar solicitudes a localhost: 82, mientras que la segunda definición del host virtual, blog, sería reenviar solicitudes a locahost: 83, por ejemplo:

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

FYI, esto es ideal para el trabajo de desarrollo con múltiples sitios. Uso Visual Studio y está configurado para funcionar con el servidor incorporado, que requiere números de puerto. Si configura sus proyectos para usar puertos estáticos, puede instalar Apache y usar esta configuración para apuntar un dominio a esos puertos, introducir los dominios en su archivo de hosts y, voila, los sitios que apuntan a diferentes puertos en su localidad. máquina, pero tienen nombres legibles Muy útil. – jvenema

+1

En Windows, también tuve que habilitar mod_proxy_http antes de que esto funcionara. – Kato

+0

Linux usan 'sudo a2enmod proxy_http' Y ser conscientes de la advertencia de seguridad en relación con los proxies hacia adelante en el sitio http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#access Apache – Lex

0

De la parte superior de mi sombrero:

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

utilizo proxy para este tipo de cosas .

En mi ejemplo, tengo apache 1.3 ejecutándose en el puerto 80, pero necesitaba el repositorio svn para ejecutar en apache 2.2, y no quería escribir: 82 en el extremo del dominio cada vez. Así que hice la redirección de proxy en Apache 1.3 (puerto 80):

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

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

Una respuesta más completa a este habría que hacer algo como esto, que le permiten configurar un proxy de pasarela, que es lo que se ha descrito anteriormente loosly.

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/ 

+0

¿Qué es "ProxyPassReverseCookiePath " ¿bueno para? –

2

Ejecutar la siguiente línea en el terminal (especificar su dominio y el nombre de dominio sub correctamente)

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

pega el siguiente código y el cambio como su requisito

<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> 

ejecute las siguientes líneas en el terminal (especificar su dominio y el nombre de dominio sub correctamente)

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod subdomain.domain.com.conf 
sudo service apache2 restart 
+0

Supongo que "sudo a2enmod subdomain.domain.com.conf" debería ser "sudo a2ensite subdomain.domain.com.conf" aquí, ya que necesitamos habilitar el sitio subdomain.domain.com.conf (no es un módulo). –

Cuestiones relacionadas