在端口80上运行Noir Web框架
[元注释:下列问题未得到解答,但问题涉及的问题被认为已解决。感谢@georgek]在端口80上运行Noir Web框架
我在运行Ubuntu linux的家用机器上试验Noir
web框架。我遵循Noir站点的"Getting started"
部分,并启动并运行了演示服务器。但是这个例子在测试port 8080
上运行。我想它在默认http端口(80端口)上运行,所以我编辑Clojure的文件my-website/src/my_website/server.clj
的"8080"
部分:
(ns my-website.server
(:require [noir.server :as server]))
(server/load-views "src/my_website/views/")
(defn -main [& m]
(let [mode (keyword (or (first m) :dev))
port (Integer. (get (System/getenv) "PORT" "80"))] ; <- I changed "8080" to "80"
(server/start port {:mode mode
:ns 'my-website})))
并试图再次运行演示,但我得到了以下几点:
$ lein run
Starting server...
2011-11-27 13:26:27.183:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2011-11-27 13:26:27.189:INFO::jetty-6.1.25
2011-11-27 13:26:27.242:WARN::failed [email protected]:80: java.net.BindException: Permission denied
2011-11-27 13:26:27.242:WARN::failed [email protected]: java.net.BindException: Permission denied
Exception in thread "main" java.lang.RuntimeException: java.net.BindException: Permission denied
at clojure.lang.Util.runtimeException(Util.java:165)
at clojure.lang.Compiler.eval(Compiler.java:6476)
at clojure.lang.Compiler.eval(Compiler.java:6455)
at clojure.lang.Compiler.eval(Compiler.java:6431)
at clojure.core$eval.invoke(core.clj:2795)
at clojure.main$eval_opt.invoke(main.clj:296)
...
...
我有机器的根访问权限,我只是不知道从哪里开始解决这个问题。任何人都可以帮忙吗?
我曾尝试:
我试图运行lein run
为su
,但它也不能工作。
我停止开放口80 Apache2的服务器(这是做的正确方法?):
$ sudo /etc/init.d/apache2 stop
还不行。
我遍布再次做到了在MacBook上,它的工作端口80(“sudo”时需要)。不知道为什么它不适用于Ubuntu。
,我花了
一个实际的解决问题的方法(而不是回答这个问题)的解决方案:
我跟着this
网页,并使用8080端口的服务,然后配置Apache2服务器的“httpd.conf”文件,让端口8080监听所有到端口80的请求。此解决方案由@georgek提供。
[我很抱歉,如果这篇文章对某些人没有价值,我是这个领域的新手。再次谢谢大家!]
另一种解决方案
@ivant提供了一种替代解决方案,也适用!
我会建议运行比诺作为8080非root用户和使用规则,该域和端口转发到你的Apache运行在80.有没有另一个原因,你不想这样做?
只有root可以使用低于1024的端口。如果你说你尝试以root或sudo方式运行它,并且仍然无法运行,那么很可能80端口已被其他应用程序使用。
LE:这应该显示哪些进程正在使用端口80
ps -eo pid,user,group,args,etime,lstart | grep `lsof -i :80 | grep LISTEN | head -1 | cut -f4 -d' '`
你能详细说明一下吗?我已将端口80和端口8080转发到运行安装了Apache的Ubuntu的计算机。接下来我该怎么办? – Ning
道歉,'前锋'可能会在这里给出错误的想法。我不使用Apache,但是在nginx中,例如在配置文件中,您可以编写一个规则,以便当您的Web服务器在domain.com上收到请求时,它会将请求发送到端口8080,在那里您的Noir将是听着。我认为查找'反向代理apache'可能会帮助你在这里。 – georgek
我编辑了/ etc/apache2/sites-available下的配置文件。在“VirtualHost *:80”容器中,我添加了“重定向301/http://mysite.com:8080/”。现在,当我输入浏览器“mysite.com”时,我得到了我想要的页面,但url很丑 - “mysite.com:8080”。 – Ning