0

作为 Mojolicious 的新手,我无法让我的应用程序正常工作。我在远程服务器上运行所有东西,但我能找到的所有教程都只想展示 localhost 的部署方式。正如标题所示,我收到 500 个内部服务器错误,而不是正在加载/运行的应用程序,并且不知道为什么。有人可以解释一下对于那些不使用本地机器来运行他们的应用程序的人是如何做到的吗?

这是生成的演示应用程序,一切都很漂亮:

#!/usr/bin/env perl
use Mojolicious::Lite;

# Documentation browser under "/perldoc"
plugin 'PODRenderer';

get '/test' => sub {
  my $c = shift;
  $c->render(template => 'index');
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
% title 'Welcome';
<h1>Welcome to the Mojolicious real-time web framework!</h1>
To learn more, you can browse through the documentation
<%= link_to 'here' => '/perldoc' %>.

@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body><%= content %></body>
</html>

一切正常,hypnotoad 命令返回:

Listening at "http://*:8080"
Server available at http://127.0.0.1:8080

需要做什么才能让这个应用程序通过网站 url 而不是 localhost 加载?

抱歉,如果这似乎是一个愚蠢的问题,但似乎没有任何明显的教程或关于从远程服务器运行 mojo 应用程序的太多讨论,所以任何帮助都是 appriciated,因为我确信其他新手以前也遇到过类似的问题,而且更多来。

4

1 回答 1

1

您需要做什么取决于您运行它的机器的设置,以及该服务器与您要从中访问它的计算机之间的网络。

一般来说,http: //127.0.0.1 :8080 上的可用文本只是默认文本。如果您的服务器允许从外部访问端口 8080,那么您已经可以通过服务器的 IP 地址或主机名以及端口 8080 访问它。

$ curl 192.168.0.4:8080/
$ curl myserver.local:8080/

这些显然是人为的例子。

如果您想让它在您购买的域上可用,您需要hypnotoad在端口 80 上侦听并确保盒子上没有运行其他网络服务器(如 Apache),或者您需要在正在运行的网络服务器,它将请求转发到例如/端口 8080。

在 github 上的 Mojo wiki 中有很多关于部署的信息,其中列出的页面之一详细讨论hypnotoad,例如与 Apache 一起列出代理解决方案:

通过代理服务器访问

在生产部署中,一般使用代理服务器来访问 hypnotoad 服务器。以下是使用虚拟主机的 apache/mod_proxy 配置文件示例。

<VirtualHost *:80>
   ServerName app1.somehost.com
   ProxyPass / http://localhost:8080/
   ProxyPassReverse / http://localhost:8080/
</VirtualHost>

请参阅Mojolicious::Guides::Cookbook 中“部署”下的各种网络服务器部分,以获取有关反向代理到您的应用程序的详细信息,以及有关获取X-Forwarded-ForMojo 设置和尊重的标头的指针。

于 2017-10-10T18:03:31.847 回答