2011-11-27 39 views
1

[元註釋:下列問題未得到解答,但問題涉及的問題被認爲已解決。感謝@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提供了一種替代解決方案,也適用!

回答

2

我會建議運行比諾作爲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

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

我通過運行上面的命令得到了使用方向。我不確定如何解決它,'grep'部分可能有問題。 – Ning

+0

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

+1

我在Mac上使用了上面的命令,所以它可能在你的Ubuntu盒子上不起作用。嘗試分別運行它們:https://gist.github.com/1398068 – daniels

2

還有privbindauthbind,它們將權限綁定到低端口(< 1024)到非根應用程序。它們都可以在Ubuntu上使用,並且可能是apache的一個可行的替代方案,特別是在開發時。要安裝(兩者)使用以下內容:

$ sudo apt-get install privbind authbind 

並檢查手冊頁的使用說明。

P.S.我知道我對晚會有點遲,但認爲這些可能仍然有用。

+0

這非常有幫助。人們看到,如果他們不知道,這將學到新的東西。謝謝!黨繼續前進,這是社區精神的一部分。 – Ning