Запуск Noir Web Framework на порту 80 - PullRequest
1 голос
/ 27 ноября 2011

[Мета-примечания: на следующий вопрос не дан ответ, но проблема, в которую вовлечен вопрос, считается решенной.Спасибо @georgek]

Я экспериментирую с веб-фреймворком Noir на домашней машине под управлением Ubuntu linux.Я последовал за частью "Getting started" с сайта Noir и запустил демо-сервер.Но этот пример работал при тестировании port 8080.Я хотел, чтобы он работал по умолчанию через порт http (порт 80), поэтому я отредактировал "8080" часть файла clojure 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})))

и попытался снова запустить демо, но яполучил следующее:

$ 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)
...
...

У меня есть root-доступ к машине, я просто не знаю, с чего начать, чтобы решить эту проблему.Кто-нибудь может помочь?


Что я пробовал:

Я пытался запустить lein run как su, но это тоже не сработало.


Я остановил сервер Apache2 для освобождения порта 80 (это правильный способ сделать это?):

$ sudo /etc/init.d/apache2 stop

Все еще не работает.


Я сделал все это снова на MacBook, он работал для порта 80 (необходим "sudo").Не знаю, почему это не работает для Ubuntu.


Решение, которое я выбрал

Практическое решение проблемы (не ответ навопрос):

Я следил за this веб-страницей и использовал порт 8080 в качестве службы, а затем настроил файл httpd.conf сервера Apache2, чтобы разрешить порт 8080прослушайте все запросы к порту 80. Это решение предоставлено @georgek.

[Извините, если этот пост не является ценным для некоторых людей, я новичок в этой области.Спасибо еще раз всем!]


Альтернативное решение

@ ivant предлагает альтернативное решение, которое также работает!

Ответы [ 3 ]

4 голосов
/ 27 ноября 2011

Только 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' '`
2 голосов
/ 30 ноября 2011

Существует также privbind и authbind , которые предоставляют привилегию для привязки к нижним портам (<1024) для приложений без полномочий root. Они оба доступны в Ubuntu и могут быть жизнеспособной альтернативой apache, особенно в процессе разработки. Для установки (обоих) используйте следующее: </p>

$ sudo apt-get install privbind authbind

и проверьте справочные страницы для инструкций по использованию.

P.S. Я знаю, что немного опаздываю на вечеринку, но подумал, что они все еще могут быть полезны.

2 голосов
/ 28 ноября 2011

Я бы порекомендовал запустить Noir в качестве пользователя без полномочий root на 8080 и использовать правило для перенаправления этого домена и порта на Apache, работающий на 80. Есть ли другая причина, по которой вы не хотите этого делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...