2011-11-27 18 views
1

[メタノート:以下の質問には答えられませんが、問題が含まれている問題は解決されたものとみなされます。 @georgekに感謝]Noir Web framework on port 80

私は実験していますNoir Ubuntu Linuxを実行している家庭のマシン上の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]11ded2: 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) 
... 
... 

私はマシンへのルートアクセス権を持っていますが、私はこの問題をどこから解決するか分かりません。誰も助けてくれますか?

を私はsuとしてlein runを実行しようとしたが、それはどちらか動作しませんでした:私が試してみました何



私は(これはそれを行うための正しい方法ですか?)ポート80を解放するためのApache2サーバを停止:

$ sudo /etc/init.d/apache2 stop 

はまだ動作しません。


私はMacBookでこれをやり直しました。ポート80(「sudo」が必要です)で動作しました。なぜそれがUbuntuで動作しないのか分かりません。


私は問題(ない質問への答え)に

現実的な解決策を取った解決策:私はthis Webページに続く

、およびサービスとして8080ポートを使用次にApache2サーバーの "httpd.conf"ファイルを設定して、ポート8080がすべての要求をポート80にリッスンさせるようにしました。この解決策は@georgekによって提供されています。

[この投稿が一部の人には価値がない場合は申し訳ありませんが、私はこの分野では新しいです。もう一度みんなありがとう!]


代替ソリューション

@ivantも作品の代替ソリューションを提供しています!

答えて

2

を使用しているプロセスをお見せする必要があり、私は8080でroot以外のユーザーとしてノワールを実行しているし、あなたのApacheにそのドメインとポートを転送するルールを使用することをお勧めしますあなたはそれをしたくない別の理由がありますか?

+0

あなたはこれを詳述できますか? ApacheをインストールしたUbuntuを実行しているマシンに、ポート80とポート8080の両方を転送しました。私は次に何をすべきですか? – Ning

+1

申し訳ありませんが、「フォワード」はここで間違った考えをしているかもしれません。私はApacheを使用しませんが、たとえば、設定ファイルでnginxを使用すると、webサーバーがdomain.comで要求を受け取ると、Noirがあるポート8080に要求を送信するようなルールを書くことができます聞いている。私は 'リバースプロキシのapache'を見上げるとここであなたを助けるかもしれないと思います。 – georgek

+0

/etc/apache2/sites-availableにあるconfigureファイルを編集しました。 "VirtualHost *:80"コンテナに、 "Redirect 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 [オプション] ...パターン[ファイル] ... – 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