Por favor, pergunte se você precisar de mais informações. Estou apenas tentando descobrir o que está acontecendo. Então eu tenho um servidor com nginx como front-end e depois passando para o Apache (2.4.18) . No meu arquivo de configuração do Apache para o domínio eu tenho:
<VirtualHost *:8181>
CustomLog /home/steampunkcom/web/uk.site.com/logs/uk.site.com.apache.log combined
ErrorLog /home/steampunkcom/web/uk.site.com/logs/uk.site.com.apache.error.log
LogLevel error
RemoteIPHeader X-Forwarded-For
# MOD_PERL
LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
ServerName uk.site.com
ServerAlias www.uk.site.com
ServerAdmin [email protected]
DocumentRoot /home/steampunkcom/web/uk.site.com/public_html
# MOD_PERL
PerlRequire /home/steampunkcom/web/uk.site.com/startup.pl
ScriptAlias /cgi-bin/ /home/steampunkcom/web/uk.site.com/public_html/cgi-bin/
Alias /vstats/ /home/steampunkcom/web/uk.site.com/stats/
Alias /error/ /home/steampunkcom/web/uk.site.com/document_errors/
# Uncomment this part to make run as mod_perl - comment out above as well!
<Directory "/home/steampunkcom/web/uk.site.com/*">
Options +ExecCGI +FollowSymLinks +MultiViews
AllowOverride AuthConfig
PerlResponseHandler ModPerl::Registry
AddHandler perl-script .cgi .pl
Options +ExecCGI
PerlOptions +ParseHeaders
AllowOverride All
Require all granted
</Directory>
<Directory /home/steampunkcom/web/uk.site.com/stats>
AllowOverride All
Require all granted
</Directory>
<IfModule mod_ruid2.c>
RMode config
RUidGid steampunkcom steampunkcom
RGroups www-data
</IfModule>
<IfModule itk.c>
AssignUserID steampunkcom steampunkcom
</IfModule>
IncludeOptional /home/steampunkcom/conf/web/apache2.uk.site.com.conf*
</VirtualHost>
Isso funciona bem. Ele roda bem no mod_perl. O problema surge quando tento ativar o mod_perl em outra conta de usuário:
<VirtualHost *:8181>
CustomLog /home/willr/web/anothersite.co.uk/logs/anothersite.co.uk.apache.log combined
ErrorLog /home/willr/web/anothersite.co.uk/logs/anothersite.co.uk.apache.error.log
LogLevel error
RemoteIPHeader X-Forwarded-For
LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
PerlRequire /home/willr/web/anothersite.co.uk/startup.pl
ServerName anothersite.co.uk
ServerAlias www.anothersite.co.uk
ServerAdmin [email protected]
DocumentRoot /home/willr/web/anothersite.co.uk/public_html
#####
ScriptAlias /cgi-bin/ /home/willr/web/anothersite.co.uk/public_html/cgi-bin/
#####
Alias /vstats/ /home/willr/web/anothersite.co.uk/stats/
Alias /error/ /home/willr/web/anothersite.co.uk/document_errors/
<Directory "/home/willr/web/anothersite.co.uk/*">
Options +ExecCGI +FollowSymLinks +MultiViews
AllowOverride AuthConfig
PerlResponseHandler ModPerl::Registry
AddHandler perl-script .cgi .pl
Options +ExecCGI
PerlOptions +ParseHeaders
AllowOverride All
Require all granted
</Directory>
<IfModule mod_ruid2.c>
RMode config
RUidGid willr willr
RGroups www-data
</IfModule>
<IfModule itk.c>
AssignUserID willr willr
</IfModule>
</VirtualHost>
No começo eu pensei que estava tudo funcionando bem, mas depois comecei a receber e-mails de pessoas me dizendo que não conseguiam entrar no site. Ao examiná-lo, descobri que ele estava compartilhando um módulo entre as contas de usuário. Estou tentando descobrir por que, e o que posso fazer sobre isso. Eu sei que o mod_perl pode ser executado em várias contas de usuário sem compartilhar os módulos (como fiz em outros servidores que foram gerenciados por mim), mas não tenho certeza de como / por que está fazendo isso aqui.
Quaisquer ideias são muito apreciadas! Enquanto isso, tive que desabilitar o mod_perl para um dos sites, pois estava causando muitos problemas para o outro site :(
Acabei de encontrar algo sobre como usar o +Parent
and PerlSwitches
config:
<VirtualHost ...>
ServerName dev1
PerlOptions +Parent
PerlSwitches -I/home/dev1/lib/perl
</VirtualHost>
https://perl.apache.org/docs/2.0/user/config/config.html#C_Parent_
O problema é que ainda parece fazer com que os módulos sejam "compartilhados" entre outras contas de usuário. Então eu tenho:
PerlOptions +ParseHeaders +Parent
PerlSwitches -Mlib=/home/steampunkcom/web/foo.co.uk/lib
Quando olho para o conteúdo de @INC, posso ver:
@INC =
/home/steampunkcom/web/foo.com/public_html/cgi-bin/admin
/home/steampunkcom/web/foo.com/lib
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.22.1
/usr/local/share/perl/5.22.1
/usr/lib/x86_64-linux-gnu/perl5/5.22
/usr/share/perl5
/usr/lib/x86_64-linux-gnu/perl/5.22
/usr/share/perl/5.22
/usr/local/lib/site_perl
.
/etc/apache2
Eu realmente pensei que tinha uma solução lá, mas talvez não :(
OK, então isso parece funcionar.
Parece que a ordem também é importante. Não tenho certeza se isso também fazia parte da solução, mas reiniciei o servidor. Eu estou querendo saber se talvez algo tenha "travado" quando eu estava brincando com as configurações, e não importa quantas vezes eu reiniciei o Apache, isso não resolveria o problema.
De qualquer forma - acho que isso resolveu! Pelo menos não estou mais recebendo módulos conflitantes.