在端口80运行Noir Web框架

时间:2011-11-27 18:19:22

标签: clojure port

[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提供了另一种解决方案,也可以使用!

3 个答案:

答案 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)

还有privbindauthbind,它们授予将低端口(&lt; 1024)绑定到非root应用程序的权限。它们都可以在ubuntu中使用,并且可能是apache的可行替代方案,尤其是在开发时。要安装(两者),请使用以下命令:

$ sudo apt-get install privbind authbind

并查看手册页以获取使用说明。

P.S。我知道我参加聚会有点晚了,但认为这些可能仍然有用。