我正在努力让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:httpChain FORWARD(政策接受) 目标prot opt源目的地
Chain OUTPUT(政策接受) 目标prot opt源目的地
感谢您的耐心
答案 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实例的安全组不包含允许该端口上的入站流量的路由有关。
说,这个问题应该移到ServerFault或AskUbuntu。
答案 2 :(得分:1)
有两件事需要注意:
0.0.0.0/32
访问)。0.0.0.0.
您可以在控制台中或使用ifconfig
答案 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
并输入端口号。