¿Cómo hago que el servidor web Apache escuche en dos puertos diferentes?


45

Me gustaría un servidor web Apache que haya instalado en casa para escuchar en el puerto 80 y el puerto 8080.

He agregado Listen 8080a httpd.conf y reinicié los servicios de Apache, pero el servidor no parece estar escuchando en 8080. Perforando en http: // localhost: 8080 agota el tiempo de espera y no muestra mi index.html pero http: / / localhost mostrará mi index.html.

¿Cómo hago para que escuche 80 y 8080?


¿Por qué crees que no está escuchando en el puerto 8080? También podría ser útil publicar fragmentos de su configuración.
David Z

1
¿Reinició Apache después de editar http.conf?
Dana the Sane

@David He actualizado mi pregunta para mostrar por qué creo que no está escuchando en 8080. No tengo acceso a httpd.conf en este momento. @Dana: sí.
Owen

Respuestas:


63

Una instalación estándar de Debian de Apache tendrá el siguiente fragmento de configuración:

Escuchar 80

<IfModule mod_ssl.c>
    # Todavía no se admiten hosts virtuales basados ​​en nombre SSL, por lo tanto, no
    # NameVirtualHost declaración aquí
    Escucha 443
</IfModule>

Esto le dice a Apache que escuche en el puerto 80 y que escuche el puerto 443 si mod_ssl está configurado. En tu caso te gustaría:

Listen 80
Listen 8080

Debe asegurarse de ejecutar un reinicio, no una operación de recarga en apache para que preste atención a las nuevas directivas de Listen. Lo más seguro es detener el apache, asegurarse de que esté muerto y comenzar de nuevo.

Si esta configuración no funciona, revise los archivos de registro para ver si hay algún mensaje de error. Puede usar "netstat -lep --tcp" para ver si hay algo escuchando en el puerto 8080. Finalmente, si todo lo demás no funciona, intente ejecutar apache bajo strace para ver si está intentando unirse a ese puerto y falla, pero no registrando el problema.


1
En Apache 2.4, ¿dónde se puede encontrar este fragmento de configuración? Gracias.
Luís de Sousa

2
Responder a mi propia pregunta: /etc/apache2/ports.conf.
Luís de Sousa

7

Estas respuestas son geniales, pero dejan de lado la posibilidad de que Owen ya haya hecho esto ("He agregado Listen 8080") puede significar exactamente lo que parece (es decir, lo que David ha sugerido).

Si ya ha hecho esto y todavía no funciona, asegúrese de haber configurado correctamente sus directivas para cada subdominio que pueda tener, incluido el predeterminado (si se configuró manualmente para escuchar: 80 justo después del nombre).

Probablemente tenga una directiva como esta:

<VirtualHost *:80>
 ServerName michaelsanford.com
 etc…
</VirtualHost>

Necesitas cambiar eso a <VirtualHost *:8080>o <VirtualHost *:*>.


Sospecho que este es mi problema. Creo que tengo una directiva <VirtualHost *: 80>. Tendré que comprobar esto.
Owen

1
Si no tiene un host virtual, recibirá contenido del DocumentRoot global, que probablemente le dará un index.html estándar, una página de índice de directorio, un error 404 o 403. No se agotaría el tiempo.
David Pashley

2
Parece que tiene un firewall en su lugar que está dejando caer paquetes en silencio.
msanford

Como resultado, fue un problema de firewall.
Owen

5

Paso 1

#vi httpd.conf
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>

httpd (apache) para escuchar en el puerto 80 y para escuchar el puerto 443 si mod_ssl está configurado.

Listen 80
Listen 8080

Paso 2

#su - service httpd restart

Paso 3

$ netstat -lntp

(No se pudieron identificar todos los procesos, no se mostrará la información del proceso que no es de su propiedad, tendría que ser root para verlo todo).

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:47027               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:80              0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:8080            0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 ::ffff:127.0.0.1:45100      :::*                        LISTEN      3149/java           
tcp        0      0 :::111                      :::*                        LISTEN      -                   
tcp        0      0 :::80                       :::*                        LISTEN      -                   
tcp        0      0 :::57173                    :::*                        LISTEN      3149/java           
tcp        0      0 :::18197                    :::*                        LISTEN      3149/java           
tcp        0      0 :::22                       :::*                        LISTEN      -                   
tcp        0      0 ::1:631                     :::*                        LISTEN      -                   
tcp        0      0 :::40832                    :::*                        LISTEN      3149/java           
tcp        0      0 ::ffff:127.0.0.1:6880       :::*                        LISTEN      3149/java       

0

Es posible que también desee verificar si tiene habilitado SELinux. La configuración predeterminada de SELinux puede no permitirle ejecutar Apache en puertos no estándar. Aquí hay un sitio que le muestra si está ejecutando SELinux y cómo deshabilitarlo, si no desea o no usa sus funciones. http://www.crypt.gen.nz/selinux/disable_selinux.html


O puede dejar SELinux encendido, si está en un sistema SELinux moderno, vea cómo los puertos están etiquetados con un puerto semanage -l. vea danwalsh.livejournal.com/9275.html que se titula "Quiero que mi demonio apache escuche en un puerto diferente pero SELinux lo impide, ¿qué debo hacer?"
rev

0

Es posible que deba configurar un sitio con un puerto 8080 para que esto funcione. Leer a través de la documentación de Apache de máquinas virtuales . Cada 'sitio' se puede configurar para aceptar conexiones en puertos específicos (e ip, etc.). ¿Tiene un host virtual en su http.conf que solo está configurado para el puerto 80?

Además, puede confirmar que el servidor está escuchando en 8080 usando netstat -nlpy buscando una entrada en ese puerto.


1
No, esto no está bien. Si desea que apache escuche en un puerto, debe usar la directiva Listen.
David Pashley


1
Bueno, podría ser algo correcto: muchas personas crean vhosts como <VirtualHost *: 80>, y en ese caso necesitaría cambiarlo a <VirtualHost *: *> o crear otro vhost para el puerto 8080. (Por supuesto, el La directiva de escucha también es obligatoria)
David Z

@David Pashley, el autor declaró que la directiva Listen ya se había agregado.
Dana the Sane

0

Suponiendo que Linux se ejecute netstat -lntpcomo root como puede ver si Apache está escuchando en 8080 o no. Esto lo ayudará a identificar si el problema es que apache no escucha o si hay factores externos (por ejemplo, firewall, selinux, etc.) a apache que hacen que la conexión se agote.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.