在Ubuntu 12.04上安装Yaws服务器(使用云服务)

时间:2012-09-16 17:35:30

标签: amazon-ec2 erlang yaws

我正在努力让Yaws网络服务器在云服务(亚马逊AWS)上工作。我已在服务器上编译并安装了本地副本。我的问题是,在端口8000或端口80上运行时,我无法让Yaws运行。

我在yaws.conf中有以下配置:

   port = 8000
   listen = 0.0.0.0
   docroot = /home/ubuntu/yaws/www/test
   dir_listings = true

这会产生以下成功的启动/结果:

  

Eshell V5.8.5(用^ G中止)

     

= INFO REPORT ==== 2012年9月16日:: 17:21:06 ===      雅司:使用配置文件/home/ubuntu/yaws.conf

     

= INFO REPORT ==== 2012年9月16日:: 17:21:06 ===      Ctlfile:/home/ubuntu/.yaws/yaws/default/CTL

     

= INFO REPORT ==== 2012年9月16日:: 17:21:06 ===      雅司病:听取0.0.0.0:8000的< 3>虚拟服务器:       - http:// domU-12-31-39-0B-1A-F6:8000 / home / ubuntu / yaws / www / trial       -      

= INFO REPORT ==== 2012年9月16日:: 17:21:06 ===      雅司病:听取0.0.0.0:4443的< 1>虚拟服务器:       -

当我尝试访问网址(http://ec2-72-44-47-235.compute-1.amazonaws.com)时,它从未连接。我尝试使用paping来检查端口80或8000是否打开(http://code.google.com/p/paping/)并且我收到“主机无法解析”错误,所以显然有些事情不是工作

我也尝试过将yaws.conf设置为80端口,如下所示:

   port = 8000
   listen = 0.0.0.0
   docroot = /home/ubuntu/yaws/www/test
   dir_listings = true

我收到以下错误:

  

=错误报告==== 2012年9月16日:: 17:24:47 ===      雅司:无法收听0.0.0.0:80: {错误,eacces}

     

=错误报告==== 2012年9月16日:: 17:24:47 ===      无法收听套接字:{error,eacces}      =错误报告==== 2012年9月16日:: 17:24:47 ===      Top proc死了,终止了gserv      =错误报告==== 2012年9月16日:: 17:24:47 ===      Top proc死了,终止了gserv      = INFO REPORT ==== 2012年9月16日:: 17:24:47 ===      应用:雅司病      退出:{shutdown,{yaws_app,start,[normal,[]]}}      类型:永久      {“内核pid终止”,application_controller,“      {application_start_failure,雅司病,>>>>>> {关机,> {yaws_app,启动,[正常,[]]}}}“}

我还使用iptables打开了端口80。运行sudo iptables -L给出了这个输出:

  

Chain INPUT(政策接受)      目标prot opt源目的地
     接受tcp - ip-192-168-2-0.ec2.internal ip-192-168-2-16.ec2.internal tcp dpt:http      接受tcp - 0.0.0.0任何地方tcp dpt:http      接受所有 - 任何地方ctstate相关,ESTABLISHED      接受tcp - tcp dpt:http      接受tcp - tcp dpt:http

的任何地方      

Chain FORWARD(政策接受)      目标prot opt源目的地

     

Chain OUTPUT(政策接受)   目标prot opt源目的地

感谢您的耐心

6 个答案:

答案 0 :(得分:3)

实际上,我通过这个论坛帖子(http://www.trapexit.org/forum/viewtopic.php?p=42923)找到了为什么我无法让它工作的答案。

它声明:

2a. I run yaws on 8080 and have nginx reverse proxying 
from http://mydomain:80 to 8080. Yaws won't run as a 
low-privilege user if you want it to listen on port 
80.

2b. nginx.conf needs the following directives: 
server { 
listen 80; 
server_name yourdomain.com; 
access_log /path/to/access/log.log 
location / { 
proxy_pass http://127.0.0.1:8080; 
proxy_redirect default; 
} 
} 

基本上,我安装了nginx,并将其配置为作为代理服务器运行。

我使用相同的解决方案来运行芝加哥Boss框架,唯一的区别是我将nginx proxy_pass设置为> http://127.0.0:8001,因为Chicago Boss默认运行在8001 。任何人都知道如果有人使用nginx作为代理服务器,这对erlang服务器的并发性有何影响,或者它对以前没有任何影响?

答案 1 :(得分:1)

您粘贴的其中一个错误报告显示了无法在端口80上启动服务器的原因:权限({error,eaccess})。

=ERROR REPORT==== 16-Sep-2012::17:24:47
=== Yaws: Failed to listen 0.0.0.0:80 : {error,eacces}

关于在端口8000上的启动,您是否尝试通过SSH连接到计算机并在本地连接到服务器(例如通过telnet)?如果可行,那么您的问题必须像其他人所建议的那样,与Ubuntu防火墙没有打开端口8000或者EC2实例的安全组不包含允许该端口上的入站流量的路由有关。

说,这个问题应该移到ServerFaultAskUbuntu

答案 2 :(得分:1)

有两件事需要注意:

  • 检查您的实例的安全组设置,并确保端口80或8000已打开(可从0.0.0.0/32访问)。
  • 尝试将服务器绑定到计算机的内部IP地址。有些服务器需要监听此界面而不是0.0.0.0.您可以在控制台中或使用ifconfig
  • 查找内部IP

答案 3 :(得分:1)

值得注意的是,交互式命令行需要root权限:

sudo su
yaws -i --id whatever

如果yaws守护程序同时运行,您还必须指定一个ID。

答案 4 :(得分:1)

http://hyber.org/privbind.yaws

绑定到特权端口

在UN * X操作系统上发现的一个常见错误是限制只有root才能绑定到1024以下的端口。许多一美元浪费在变通办法上 - 并且 - 结果是安全漏洞。

$ setcap 'cap_net_bind_service=+ep' /usr/lib/erlang/erts-5.7.4/bin/beam

答案 5 :(得分:0)

@Bernard是正确的,EC2实例有防火墙来保护它。您需要修改实例的EC2 Security Group(您可以在管理控制台Web界面的左侧找到它),以允许入站TCP流量到您要使用的端口。对于端口80,您可以从组合框中选择HTTP。对于端口8080,选择Custom TCP Rule并输入端口号。