在端口80上运行Noir Web框架

在端口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 runsu,但它也不能工作。


我停止开放口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.有没有另一个原因,你不想这样做?

+0

你能详细说明一下吗?我已将端口80和端口8080转发到运行安装了Apache的Ubuntu的计算机。接下来我该怎么办? – Ning

+1

道歉,'前锋'可能会在这里给出错误的想法。我不使用Apache,但是在nginx中,例如在配置文件中,您可以编写一个规则,以便当您的Web服务器在domain.com上收到请求时,它会将请求发送到端口8080,在那里您的Noir将是听着。我认为查找'反向代理apache'可能会帮助你在这里。 – georgek

+0

我编辑了/ etc/apache2/sites-available下的配置文件。在“VirtualHost *:80”容器中,我添加了“重定向301/http://mysite.com:8080/”。现在,当我输入浏览器“mysite.com”时,我得到了我想要的页面,但url很丑 - “mysite.com:8080”。 – Ning

只有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' '` 
+0

我通过运行上面的命令得到了使用方向。我不确定如何解决它,'grep'部分可能有问题。 – Ning

+0

我得到了: 用法:grep [OPTION] ... PATTERN [FILE] ... – Ning

+1

我在Mac上使用了上面的命令,所以它可能在你的Ubuntu盒子上不起作用。尝试分别运行它们:https://gist.github.com/1398068 – daniels

还有privbindauthbind,它们将权限绑定到低端口(< 1024)到非根应用程序。它们都可以在Ubuntu上使用,并且可能是apache的一个可行的替代方案,特别是在开发时。要安装(两者)使用以下内容:

$ sudo apt-get install privbind authbind 

并检查手册页的使用说明。

P.S.我知道我对晚会有点迟,但认为这些可能仍然有用。

+0

这非常有帮助。人们看到,如果他们不知道,这将学到新的东西。谢谢!党继续前进,这是社区精神的一部分。 – Ning