第一次发布海报,很久以前潜伏在这里。
我在plackup中使用了一个小的PSGI应用程序,但是想要切换到子域的Apache2。我使用' plackup /home/ath88/work/kolle/script/dir.psgi -port 80 '运行应用程序。它在plackup上完美运行。该应用程序非常简单,可以在https://github.com/ath88/Kolletilmelding/blob/master/script/dir.psgi
找到但是,出于显而易见的原因,我想运行Apache2而不是plackup。为此,我想使用Plack :: Handler :: Apache2。我的VirtualHost看起来如下:
<VirtualHost *:80>
ServerName aths.dk
ServerAdmin asbjoern@gmail.com
<Location />
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /home/ath88/work/kolle/script/dir.psgi
</Location>
</VirtualHost>
Apache2重启没问题。但是当我试图访问aths.dk时,我只得到一个404未找到。应用程序的目录是正确的,因为它会导致500内部错误。在apache2 / error.log中查看我得到的结果: [不相关,请参阅编辑]
[Wed Oct 05 21:32:16 2011] [notice] caught SIGTERM, shutting down
[Wed Oct 05 21:32:17 2011] [notice] Apache/2.2.12 (Ubuntu) mod_perl/2.0.4 Perl/v5.10.0 configured -- resuming normal operations
每次重启Apache2都会发生这种情况。
我花了4个小时试图调试它。我完全沉浸其中。
编辑:原来SIGTERM停止Apache2重启。当我开始它时它不会发生。傻我。
答案 0 :(得分:2)
也许您的设置将受益于反向HTTP代理设置。
您可以手动启动Plack应用程序,并且可以将其绑定到127.0.0.1:9001
而不是127.0.0.1:80
,在这种情况下,您需要特权用户(TCP端口低于1024)。
然后应该工作的反向HTTP代理配置可能就像这样:
<VirtualHost *:80>
ServerName aths.dk
ServerAdmin asbjoern@gmail.com
ErrorLog /var/log/apache2/aths.dk-error.log
TransferLog /var/log/apache2/aths.dk.log
DocumentRoot /var/www/aths.dk
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:9001/
ProxyPassReverse / http://127.0.0.1:9001/
</VirtualHost>