你怎么能让一个EC2微型实例从lighthttpd提供CGI脚本? 例如Python CGI?
那么,它花了半天时间,但是我已经使用lighttpd服务器获得了在免费的Amazon AWS EC2微型实例上运行的Python CGI。 我认为这会帮助我的同伴把所有的步骤放在一个地方。 用下面的简单步骤武装起来,只需要15分钟就能完成!
我有更多有经验的用户阅读这个问题的问题是:我所做的是否存在安全漏洞? (请参阅文件和目录权限。)
[显然,您需要注册Amazon EC2并将密钥对保存到* .pem文件。 亚马逊会告诉你如何去做,我不会这样做。]
login您的AWS账户并启动您的EC2实例。 networking上有这样做的教程。 请注意,Amazon向您呈现的默认实例大小“很小”。 这不是“微”,所以它会花费你的钱。 一定要手动select“微”。 (微型实例仅在第一年免费…)
find正在运行的实例的公共DNS代码。 为此,请单击仪表板顶部窗格中的实例,最终将在底部窗格中看到“公用DNS”字段。 (你可能需要小心一点。)Public DNS看起来像这样:
ec2-174-129-110-23.compute-1.amazonaws.com
启动你的Unix控制台程序。 (在Max OS X上,它被称为terminal,并位于应用程序 – >实用工具文件夹中。)
cd到您的桌面系统上具有包含您的AWS密钥对的* .pem文件的目录。
ssh到你的EC2实例,使用如下命令:
ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>
所以,对我来说,这是:
ssh -i amzn_ec2_keypair.pem [email protected]
你的EC2实例应该让你进入。
要安装lighttpd,您需要在您的EC2实例上进行root访问。 问题是:亚马逊不会让你以root身份login。 (不是直截了当,至less)。但是有一个解决方法。 input这个命令:
sudo /bin/bash
系统提示字符将从$更改为#。 直到整个过程的最后一步,我们才会退出“sudo”。
安装lighttpd应用程序(版本1.4.28-1.3.amzn1):
yum install lighttpd
为lighttpd安装FastCGI库(不需要,但为什么不?):
yum install lighttpd-fastcgi
testing你的服务器正在工作:
/etc/init.d/lighttpd start
如果您现在尝试从桌面上的浏览器启动服务器,则会失败。 原因:默认情况下,Amazon AWS不会打开任何端口到您的EC2实例。 所以,你必须手动打开端口。
在桌面浏览器中转到您的EC2仪表板。 点击左侧窗格中的“安全组”。 一个或多个安全组将出现在右上方的窗格中。 select启动实例时分配给EC2实例的那个实例。
名为“允许的连接”的表格将出现在右下方的窗格中。 popup式菜单将让您select“HTTP”作为连接方法。
表中那行的其他值应该是:tcp,80,80,0.0.0.0/0
现在从浏览器的桌面上打你的EC2实例的服务器。 使用之前用于SSH的公有DNS地址。您应该看到lighttpd通用网页。 如果你不这样做,我不能帮你,因为我是一个小菜鸟。 🙁
回到控制台程序,cd到lighttpd的configuration目录:
cd /etc/lighttpd
要启用CGI,您需要取消注释<modules.conf>文件中的一行。 (我可以启用Fast CGI,但是最好的步骤是最好的!)你可以使用“ed”编辑器来做到这一点,如下所示:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
创buildCGI程序所在的目录。 (/etc/lighttpd/lighttpd.conf文件决定了它的位置。)我们将在默认位置创build我们的目录,所以我们不必做任何configuration文件的编辑:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
差不多了! 当然你需要把一个testingCGI程序放到cgi-bin目录下。 这里是一个:
cd cgi-bin
ed
a
#!/usr/bin/python
print "Content-type: text/html\n\n"
print "<html><body>Hello, pyworld.</body></html>"
.
w hellopyworld.py
q
chmod 655 hellopyworld.py
重新启动你的lighttpd服务器:
/etc/init.d/lighttpd restart
testing你的CGI程序。 在您的桌面浏览器中,点击此URL,replace您的EC2实例的公有DNS地址:
http://<<Public DNS>>/cgi-bin/hellopyworld.py
对我来说,这是:
http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py
要从前面给出的“sudo / bin / bash”命令中退出,请input:
exit
致谢:感谢:
wiki.vpslink.com/Install_and_Configure_lighttpd
www.cyberciti.biz/tips/lighttpd-howto-setup-cgi-bin-access-for-perl-programs.html
aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html
祝你好运,伙计! 我对这个“问题”的非传统性质表示歉意,但是我从Stackoverflow得到了很多帮助,所以我急于回馈。
(奇怪的post,所以希望这不会是一个奇怪的答复)。
关于安全缺陷:在web服务器的文档根目录中存储cgi-bin脚本被认为是一种不好的做法。 甚至连W3C都没有在他们的万维网安全常见问题解答中的 “C:更安全的编译语言”
考虑以下情况。 为方便起见,您已决定使用.cgi扩展名将CGI脚本识别到服务器。 稍后,您需要对解释的CGI脚本进行一些小改动。 用Emacs文本编辑器打开它并修改脚本。 不幸的是,编辑留下了文档树中的脚本源代码的备份副本。 尽pipe远程用户不能通过获取脚本本身来获取源代码,但他现在可以通过盲目地请求URL来获得备份副本:
http://your-site/a/path/your_script.cgi~
(这是将CGI脚本限制到cgi-bin并确保cgi-bin与文档根目录是分开的另一个很好的理由。)
这不像在文档根目录中写入文件的能力那么重要。 然而,攻击者可以获取cgi的源代码,并对其进行定向攻击,并将其用作服务器的垫脚石。
为了缓解这个问题,你可以在lighttpd.conf(或其中的一些变体)中添加以下几行,将cgi-bin指向与/ var / www / lighttpd文档根目录不同的目录。
$HTTP["url"] =~ "/cgi-bin/" { cgi.assign = ( "" => "" ) } alias.url = ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )
这需要lighttpd的cgi和别名模块。