1

我正在尝试使用 Web 服务返回内容。如果因“操作不安全”而失败,则在 apache 代理后面。

我阅读了有关添加 apache 钩子的信息,但它对我不起作用。也不设置环境变量。这就是我尝试过的:如何让 Mojolicious 的 url_for()->to_abs() 在 nginx 后面返回正确的方案(http 或 https)

也许或网络服务我必须做其他事情?我也使用 mojolicious lite。

url_for 也是在模板文件 .html.ep 中完成的。我用它从 javascript 调用 web 服务。

我在 Ubuntu 18.04 上运行 Mojolicious 7.59。谢谢你的帮助

4

1 回答 1

1

我这样解决了: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上有更多文档

于 2019-12-10T10:03:31.890 回答