Como impedir que outro processo ouça na mesma porta que o Apache

1

Tenho o Apache executando o Solaris usando o módulo mpm e ele escuta na porta 8080. De vez em quando, alguém inicia uma instância do Tomcat no mesmo host. O tem o efeito de direcionar todo o tráfego para o Tomcat. Depois que o Tomcat é encerrado, o tráfego é retomado para o Apache. Eu gostaria que o Apache vinculasse esse soquete exclusivamente, para que outros processos obtenham um erro. Isso é possível?

Observe que essa é uma caixa de desenvolvimento, portanto, não é possível restringir quem faz o logon ou quais programas são executados. Sim, é possível e muito fácil alterar a porta do Tomcat. O problema é que esta é a porta tomcat padrão . Então, o Tomcat de um desenvolvedor untar, inicia-o e depois percebo que estou recebendo erros do Tomcat 404 em vez do conteúdo do Apache. Isso me leva a rastrear o desenvolvedor e dizer-lhes para alterar sua porta padrão. Idealmente, o Tomcat falharia apenas.

Quando o Java liga uma porta, ele o liga no modo exclusivo e outro processo não pode escutar na mesma porta. O Apache parece ligar a porta no modo compartilhado. Eu não acho que isso seria necessário com o módulo mpm, mas parece ser o padrão. Eu estou procurando uma opção de compilador ou opção de configuração que irá ligar a porta no modo exclusivo.

    
por brianegge 26.11.2009 / 04:54

4 respostas

2

Os ouvintes não ligam apenas uma porta - eles se ligam a um endereço e uma porta. Pode ser que o apache esteja vinculado a 0.0.0.0:8080 (às vezes escrito *: 8080), enquanto o tomcat é vinculado à porta 8080 em uma interface específica. Nesse caso, ambas as ligações poderiam coexistir e a ligação específica da interface teria precedência sobre a ligação de caractere curinga. Isso pode ser o que está acontecendo com você.

A correção mais simples seria fazer com que o apache fizesse uma ligação específica da interface, em vez de (ou além de) fazer uma ligação de caractere curinga.

Em suma, procure as linhas Listen na configuração do seu apache. Se você vir uma linha como:

Listen 8080

ou

Listen 0.0.0.0:8080

Adicione outra linha como:

Listen 1.2.3.4:8080

onde 1.2.3.4 é o endereço IP do host.

    
por 30.11.2009 / 22:20
4

Você pode transformar a porta 8080 em uma porta privilegiada executando este comando:

ndd -set /dev/tcp tcp_extra_priv_ports_add 8080

Isso exigirá que qualquer pessoa que queira usar a porta 8080 tenha o privilégio net_privaddr (que você pode atribuir ao seu método smf(5) service start ou a um perfil rbac(5) atribuído a você mesmo.

Observe que o comando ndd não persiste durante as reinicializações, portanto, você precisa criar seu próprio serviço smf(5) ou usar um script rc legado.

    
por 27.11.2009 / 17:15
0

Você deve abrir essa porta para ouvir por algum pequeno aplicativo. O script de inicialização do Apache eliminará esse aplicativo e iniciará normalmente:))

    
por 26.11.2009 / 19:31
-1

Normalmente, quando uma instância do Tomcat é iniciada ou reiniciada, ela também reinicia o Apache, o que fará com que o Apache perca todas as portas que ele havia ligado anteriormente se o Tomcat as obtivesse primeiro. Nesse caso, você precisaria editar o arquivo tomcat.conf para escutar em uma porta que o Apache não estará usando. Isso provavelmente significará que você também precisa alterar sua configuração do Apache para que ele funcione corretamente com o Tomcat novamente.

    
por 26.11.2009 / 05:12