[Meta注意:以下问题没有得到解答,但问题涉及的问题被认为已经解决了。感谢@georgek]
我正在运行Ubuntu linux的家用机器上试验Noir
网页框架。我跟随Noir网站的"Getting started"
部分,启动并运行了演示服务器。但是这个例子是在测试port 8080
运行的。我希望它在默认的http端口(端口80)上运行,因此我编辑了clojure文件"8080"
的{{1}}部分:
my-website/src/my_website/server.clj
并尝试再次运行演示,但我得到以下内容:
(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})))
我有root访问权限的机器,我只是不知道从哪里开始解决这个问题。有人可以帮忙吗?
我尝试了什么:
我尝试将$ 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 SocketConnector@0.0.0.0:80: java.net.BindException: Permission denied
2011-11-27 13:26:27.242:WARN::failed Server@111ded2: 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
运行,但它也不起作用。
我停止了Apache2服务器以释放端口80(这是正确的方法吗?):
su
仍然无效。
我在macbook上重新做了一遍,它适用于端口80(需要“sudo”)。不知道为什么它对Ubuntu不起作用。
我采取的解决方案
问题的实际解决方案(不是问题的答案):
我关注this
网页,并使用8080端口作为服务,然后配置Apache2服务器的“httpd.conf”文件,让端口8080监听端口80的所有请求。此解决方案是由@georgek提供。
[很抱歉,如果这篇文章对某些人没有价值,我是这个领域的新手。再次感谢大家!]
另一种解决方案
@ivant提供了另一种解决方案,也可以使用!
答案 0 :(得分:4)
只有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' '`
答案 1 :(得分:2)
我建议在8080上以非root用户身份运行Noir,并使用规则将该域和端口转发到80上运行的Apache。还有其他原因你不想这样做吗?
答案 2 :(得分:2)