请询问您是否需要更多信息。我只是想弄清楚发生了什么。所以我有一个以nginx为前端的服务器,然后传递给 Apache (2.4.18)。在我的域的 Apache 配置文件中,我有:
<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>
这工作正常。它在 mod_perl 下运行良好。当我尝试在另一个用户帐户上启用 mod_perl 时出现问题:
<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>
起初我以为一切正常,但后来我开始收到人们的电子邮件,告诉我他们无法登录该网站。在查看它时,我发现它正在跨用户帐户共享一个模块。我试图找出原因,以及我能做些什么。我知道 mod_perl 可以跨多个用户帐户运行而无需共享模块(正如我在为我管理的其他服务器上所做的那样),但我不确定它如何/为什么在这里这样做。
任何想法都非常感谢!与此同时,我不得不为其中一个站点禁用 mod_perl,因为它给另一个站点造成了太多问题:(
我刚刚发现了一些关于使用+Parent
和PerlSwitches
配置的信息:
<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_
但问题是它似乎仍然会导致模块在其他用户帐户之间“共享”。所以我有:
PerlOptions +ParseHeaders +Parent
PerlSwitches -Mlib=/home/steampunkcom/web/foo.co.uk/lib
当我查看@INC 的内容时,我可以看到:
@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
我真的以为我在那里有解决方案,但也许没有:(
好的,所以这似乎有效。
似乎顺序也很重要。我不确定这是否也是解决方案的一部分,但我重新启动了服务器。我想知道当我在玩设置时是否有什么东西“卡住”了,无论我重新启动 Apache 多少次,它都无法解决问题。
无论如何-我认为这已经解决了!至少我似乎不再遇到冲突的模块了。