'apache2ctl restart' faz o apache esquecer o cgi-bin

6

Na minha máquina Debian (rodando o apache como empacotado pela Debian, pacote 2.4.7-1), toda vez que o apache reinicia através de apache2ctl restart ou apache2ctl graceful , ele esquece do meu diretório cgi-bin:

me@aram:~$ sudo apache2ctl graceful-stop
me@aram:~$ sudo apache2ctl graceful
httpd not running, trying to start
me@aram:~$ curl -s http://localhost/cgi-bin/hello
Hello world, from a cgi script.
me@aram:~$ sudo apache2ctl graceful
me@aram:~$ curl -s http://localhost/cgi-bin/hello
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /cgi-bin/hello was not found on this server.</p>
<hr>
<address>Apache/2.4.7 (Debian) Server at localhost Port 80</address>
</body></html>
me@aram:~$ sudo apache2ctl graceful
me@aram:~$ curl -s http://localhost/cgi-bin/hello
Hello world, from a cgi script.
me@aram:~$ sudo apache2ctl graceful; sudo apache2ctl graceful
me@aram:~$ curl -s http://localhost/cgi-bin/hello
Hello world, from a cgi script.
me@aram:~$ sudo apache2ctl graceful
me@aram:~$ curl -s http://localhost/cgi-bin/hello
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /cgi-bin/hello was not found on this server.</p>
<hr>
<address>Apache/2.4.7 (Debian) Server at localhost Port 80</address>
</body></html>
me@aram:~$ sudo apache2ctl graceful
me@aram:~$ curl -s http://localhost/cgi-bin/hello
Hello world, from a cgi script.

Isso é perfeitamente repetível; se eu parar completamente o servidor e reiniciá-lo, tudo bem. Depois disso, um reinício (gracioso ou não) muda de comportamento. Infelizmente, a tarefa regular logrotate emite uma reinicialização normal, por isso preciso fazer com que o Apache sempre saiba sobre cgi-bin .

Não há nada no log de acesso ou erro para marcar uma reinicialização "saberá sobre cgi" de uma reinicialização "não sei sobre cgi". Se as pessoas comentarem com sugestões sobre como tornar os logs mais detalhados, tentarei e atualizarei isso.

Eu estou usando a configuração que o pacote Debian vem com (por isso é configurado através da associação simbólica de vários arquivos em -enabled diretórios a arquivos existentes em -available diretórios). Aqui, para referência, estão os meus diretórios -enabled :

me@aram:/etc/apache2$ ls *-enabled
conf-enabled:
000-local-routerblock.conf  charset.conf  javascript-common.conf      other-vhosts-access-log.conf  serve-cgi-bin.conf
apache2-doc.conf            dwww.conf     localized-error-pages.conf  security.conf

mods-enabled:
access_compat.load  authn_core.load       authz_host.load  cgi.load      dir.load    filter.load       mpm_prefork.load  reqtimeout.load  status.load
alias.conf          authn_file.load       authz_user.load  deflate.conf  dnssd.conf  mime.conf         negotiation.conf  setenvif.conf    userdir.conf
alias.load          authz_core.load       autoindex.conf   deflate.load  dnssd.load  mime.load         negotiation.load  setenvif.load    userdir.load
auth_basic.load     authz_groupfile.load  autoindex.load   dir.conf      env.load    mpm_prefork.conf  reqtimeout.conf   status.conf

sites-enabled:
000-default.conf

Todos esses, exceto 000-local-routerblock.conf , são enviados pelo Debian. Eu verifiquei que a remoção desse arquivo de configuração corrige o problema, então suspeito que seja uma interação estranha entre esse arquivo e o arquivo serve-cgi-bin.conf padrão. Mais uma vez, porém, nenhuma evidência nos registros.

Conteúdo de 000-local-routerblock.conf :

Redirect /router /cgi-bin/router
<Location "/cgi-bin/router">
  AuthUserFile /usr/lib/cgi-bin/routerblock/htpasswd
  AuthGroupFile /dev/null
  AuthName ByPassword
  AuthType Basic
  Require user router
</Location>

Conteúdo de serve-cgi-bin.conf :

<IfModule mod_alias.c>
    <IfModule mod_cgi.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfModule mod_cgid.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfDefine ENABLE_USR_LIB_CGI_BIN>
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Require all granted
        </Directory>
    </IfDefine>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

EDIT: Eu resolvi isso agora, em termos de "eu fiz isso funcionar". Eu não tenho idéia do porque isso funciona, e isso quase certamente indica um bug nesta versão do Apache. Estou deixando a recompensa por alguém para responder sobre o que está acontecendo.

Em qualquer caso, a solução não estava em nenhuma das configurações. arquivos que citei. Lembre-se, o resto desta configuração é exatamente do Debian, nada personalizado sobre a configuração. O Debian /etc/apache2/apache2.conf inclui a linha:

LogLevel warn

Na configuração de estoque, não há outras instruções LogLevel , exceto uma comentada no arquivo /etc/apache2/sites-available/000-default.conf . (esse arquivo inteiro está dentro de uma tag <VirtualHost *:80> ; configura DocumentRoot e o log de acesso, mas nada mais)

Eu estava brincando com LogLevel configurações tentando obter mais informações em meus registros quando me deparei com isso: se eu tiver uma instrução LogLevel dentro dessa tag VirtualHost , ela funciona. Então agora, além do LogLevel warn que está na configuração principal do apache, eu também tenho um LogLevel warn dentro da tag <VirtualHost *:80> em 000-default.conf . Isso funciona. Se eu tiver tempo extra neste final de semana, acho que vou tentar configurar uma máquina virtual para reproduzir isso em um ambiente o mais limpo possível e, em seguida, arquivar um bug do Debian.

    
por Daniel Martin 30.03.2014 / 21:41

1 resposta

1

Com base nos comentários e no link para um relatório de bug acima, isso parece ter sido um bug válido que foi resolvido recentemente; do link :

From: Jean-Michel Vourgère
To: [email protected]
Subject: Re: apache2: Apache forgets about /cgi-bin on restart
Date: Mon, 08 Jun 2015 00:12:12 +0000

Source: apache2 Source-Version: 2.4.10-1

Hello

We believe that the bug you reported is fixed.

Thank you for reporting the bug, which will now be closed. If you have further comments please address them to [email protected], and a maintainer will reopen the bug report if appropriate.

    
por 09.06.2015 / 14:11