我这样解决了:apache 代理必须有一些特定的设置,而且mojo应用程序必须处于反向代理模式。
阿帕奇设置
Apache 必须知道如何代理 Web 服务,并且它必须告诉 mojo 转发协议。
- 我把我所有的网络服务放在/ws/下,并将它添加到ProxyPass
- 我的 mojo 应用程序位于端口 8080 的同一主机上,因此我代理到localhost:8080。
- 设置X-Forwarded-Proto非常重要
在/etc/apache2/sites-enabled/default-ssl.conf我改变了这种方式:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /ws/ ws://localhost:8080/ws/ keepalive=On
ProxyPass / http://localhost:8080/ keepalive=On
ProxyPassReverse / http://localhost:8081/
RequestHeader set X-Forwarded-Proto "https"
Mojo 代理
mojolicious 应用程序必须知道它在反向代理中。如果您使用的是hypnotoad,则可能没有必要。当我用morbo进行一些测试时,我必须以这种方式运行它:
MOJO_REVERSE_PROXY=1 morbo script.pl
在https://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Reverse-proxy上有更多文档