Como faço para o Apache Web Server escutar em duas portas diferentes?

45

Gostaria de um servidor Web Apache que eu instalei em casa para escutar nas portas 80 e 8080.

Eu adicionei Listen 8080a httpd.conf e reiniciado os serviços Apache, mas o servidor não parece estar a ouvir em 8080. Perfuração em http: // localhost: 8080 vezes fora e não exibe o meu index.html mas http: / / localhost exibirá meu index.html.

Como faço para ouvir 80 e 8080?

Owen
fonte
Por que você acha que não está escutando na porta 8080? Também pode ser útil publicar trechos de sua configuração.
18760 David Z
1
Você reiniciou o Apache depois de editar o http.conf?
Dana the Sane
@ David Atualizei minha pergunta para mostrar por que acho que não está ouvindo no 8080. Não tenha acesso ao httpd.conf no momento. @Dana - sim.
Owen

Respostas:

63

Uma instalação padrão do Debian do apache terá o seguinte fragmento de configuração:

Listen 80

<IfModule mod_ssl.c>
    # Os hosts virtuais baseados em nome SSL ainda não são suportados, portanto, não há
    Declaração # NameVirtualHost aqui
    Listen 443
</IfModule>

Isso está dizendo ao apache para escutar na porta 80 e escutar na porta 443 se mod_ssl estiver configurado. No seu caso, você deseja:

Listen 80
Listen 8080

Você precisa certificar-se de executar uma reinicialização, não uma operação de recarga no apache, para prestar atenção às novas diretivas de escuta. A coisa mais segura a fazer é interromper o apache, verificar se está morto e iniciá-lo novamente.

Se essa configuração não funcionar, verifique se há mensagens de erro nos arquivos de log. Você pode usar "netstat -lep --tcp" para ver se há algo escutando na porta 8080. Por fim, se tudo o resto não funcionar, tente executar o apache sob strace para ver se está tentando se conectar a essa porta e falhar, mas não registrando o problema.

David Pashley
fonte
1
No Apache 2.4, onde esse fragmento de configuração pode ser encontrado? Obrigado.
Luís de Sousa
2
Respondendo a minha própria pergunta: /etc/apache2/ports.conf.
Luís de Sousa
7

Essas respostas são ótimas, mas deixam de fora a possibilidade de Owen realmente ter feito isso ("eu adicionei Listen 8080") pode significar exatamente o que parece (ou seja, o que David sugeriu).

Se você já fez isso e ainda acha que não está funcionando, verifique se configurou corretamente suas diretivas para cada subdomínio que possa ter, incluindo o padrão (se tiver sido configurado manualmente para ouvir: 80 logo após o nome).

Você provavelmente tem uma diretiva como esta:

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

Você precisa mudar isso para <VirtualHost *:8080>ou <VirtualHost *:*>.

msanford
fonte
Eu suspeito que este é o meu problema. Eu acho que tenho uma diretiva <VirtualHost *: 80>. Vou ter que verificar isso.
Owen
1
Se você não possui um host virtual, receberá o conteúdo do DocumentRoot global, que provavelmente fornecerá um index.html padrão, uma página de índice de diretório, um erro 404 ou 403. Não iria expirar.
18119 David Pashley
2
Parece que você possui um firewall que está descartando pacotes silenciosamente.
msanford
Como se viu, era um problema de firewall.
Owen
5

Passo 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 escutar na porta 80 e escutar na porta 443 se mod_ssl estiver configurado.

Listen 80
Listen 8080

Passo 2

#su - service httpd restart

etapa 3

$ netstat -lntp

(Nem todos os processos puderam ser identificados; as informações de processo não pertencentes a ele não serão mostradas; você precisaria ser root para ver tudo.)

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       
Rajat
fonte
0

Você também pode querer verificar se o SELinux está ativado. A configuração padrão do SELinux pode não permitir a execução do Apache em portas não padrão. Aqui está um site que mostra se você está executando o SELinux e como desabilitá-lo, se não quiser ou usar seus recursos. http://www.crypt.gen.nz/selinux/disable_selinux.html


fonte
Ou você pode deixar o SELinux ativado, se você estiver em um sistema SELinux moderno, veja como as portas são rotuladas com uma porta de semântica -l. consulte danwalsh.livejournal.com/9275.html, intitulado "Quero que meu daemon apache escute em uma porta diferente, mas o SELinux está impedindo, O que devo fazer?"
rev
0

Pode ser necessário configurar um site como uma porta 8080 para que isso funcione. Leia a documentação dos hosts virtuais Apache . Cada 'site' pode ser configurado para aceitar conexões em portas específicas (e ips, etc). Você tem um host virtual no seu http.conf configurado apenas para a porta 80?

Além disso, você pode confirmar que o servidor está escutando 8080 usando netstat -nlpe procurando uma entrada nessa porta.

Dana the Sane
fonte
1
Não, isso não está certo. Se você deseja que o apache escute em uma porta, é necessário usar a diretiva Listen.
David Pashley
1
Bem, pode estar certo - muitas pessoas criam vhosts como <VirtualHost *: 80> e, nesse caso, você precisa alterá-lo para <VirtualHost *: *> ou criar outro vhost para a porta 8080. (Claro, o A diretiva Listen também é necessária)
David Z
@ David Pashley, O autor afirmou que a diretiva Listen já havia sido adicionada.
Dana the Sane
0

Supondo que o linux seja executado netstat -lntpcomo root, como você pode ver se o apache está escutando no 8080 ou não. Isso o ajudará a identificar se o problema não está ouvindo o apache ou se há fatores externos (por exemplo, firewall, selinux etc.) ao apache, que fazem com que a conexão atinja o tempo limite.

Jason Tan
fonte