Установка сервера Yaws в Ubuntu 12.04 (с использованием облачного сервиса)

Я пытаюсь настроить веб-сервер Yaws на облачный сервис (Amazon AWS). Я собрал и установил локальную копию на сервере. Моя проблема в том, что я не могу запустить Yaws во время работы на порту 8000 или 80.

У меня есть следующая конфигурация в yaws.conf:

   port = 8000
   listen = 0.0.0.0
   docroot = /home/ubuntu/yaws/www/test
   dir_listings = true

Это приводит к следующему успешному запуску / результату:

Eshell V5.8.5 (отменить с помощью ^ G)

= ИНФОРМАЦИОННЫЙ ОТЧЕТ ==== 16-Sep-2012::17:21:06 === Yaws: Использование конфигурационного файла /home/ubuntu/yaws.conf

= ИНФОРМАЦИОННЫЙ ОТЧЕТ ==== 16-Sep-2012:: 17: 21: 06 === Ctlfile: /home/ubuntu/.yaws/yaws/default/CTL

= ИНФОРМАЦИОННЫЙ ДОКЛАД ==== 16-Sep-2012::17:21:06 === Yaws: прослушивание 0.0.0.0:8000 для <3> виртуальных серверов: - http://domU-12-31-39-0B-1A-F6:8000 в / home / ubuntu / yaws / www / trial -

= ИНФОРМАЦИОННЫЙ ДОКЛАД ==== 16-Sep-2012:: 17: 21: 06 === Тявкать: Прослушивание 0.0.0.0:4443 для <1> виртуальных серверов: -

Когда я пытаюсь получить доступ к URL (http://ec2-72-44-47-235.compute-1.amazonaws.com), он никогда не подключается. Я попытался с помощью paping проверить, открыт ли порт 80 или 8000 (http://code.google.com/p/paping/), и я получаю сообщение об ошибке "Хост не может быть решен", поэтому, очевидно, что-то не так за работой.

Я также попытался настроить yaws.conf так, чтобы он находился в порту 80, и выглядел так:

   port = 8000
   listen = 0.0.0.0
   docroot = /home/ubuntu/yaws/www/test
   dir_listings = true

и я получаю следующую ошибку:

= ОТЧЕТ ОБ ОШИБКАХ ==== 16-Sep-2012::17:24:47 === Челюсти: Не удалось прослушать 0.0.0.0:80: {error, eacces}

= ОТЧЕТ ОБ ОШИБКАХ ==== 16-Sep-2012::17:24:47 === Невозможно прослушать сокет: {error,eacces} = ОТЧЕТ ОБ ОШИБКАХ ==== 16-Sep-2012:: 17: 24:47 === Уничтожен главный процесс, прекратите работу gserv = ОТЧЕТ ОБ ОШИБКАХ ==== 16-сен-2012:: 17: 24: 47 === Умер основной процесс, прекратите работу gserv = ОТЧЕТ ОБ ИНФОРМАЦИИ ==== 16-Sep -2012:: 17: 24: 47 === приложение: заклинания завершены: {shutdown,{yaws_app,start,[normal,[]]}} тип: постоянный {"Kernel PID прекращен",application_controller," {application_start_failure,yaws,>>>>>>{выключение,>{yaws_app, начать, [нормальный,[]]}}}"}

Я также открыл порт 80 с помощью iptables. Запуск sudo iptables -L дает следующий вывод:

Цепной ВХОД (политика ПРИНЯТЬ) целевой целевой источник назначения
ПРИНЯТЬ tcp - ip-192-168-2-0.ec2.internal ip-192-168-2-16.ec2.internal tcp dpt:http ПРИНЯТЬ tcp - 0.0.0.0 где угодно tcp dpt: http ПРИНЯТЬ все - где угодно и где угодно ctstate СВЯЗАННЫЕ, УСТАНОВЛЕННЫЕ ПРИНЯТЬ tcp - где угодно и где угодно tcp dpt: http ПРИНЯТЬ tcp - где угодно и где угодно tcp dpt: http

Цепочка FORWARD (политика ACCEPT) целевой целевой источник назначения

Цепной ВЫХОД (политика ПРИНЯТЬ) целевой целевой источник назначения

Спасибо за терпение

6 ответов

Решение

На самом деле я нашел ответ на вопрос, почему я не смог заставить его работать, в этом сообщении на форуме (http://www.trapexit.org/forum/viewtopic.php?p=42923).

Говорится:

2a. I run yaws on 8080 and have nginx reverse proxying 
from http://mydomain:80 to 8080. Yaws won't run as a 
low-privilege user if you want it to listen on port 
80.

2b. nginx.conf needs the following directives: 
server { 
listen 80; 
server_name yourdomain.com; 
access_log /path/to/access/log.log 
location / { 
proxy_pass http://127.0.0.1:8080; 
proxy_redirect default; 
} 
} 

По сути, я установил nginx и настроил его для работы в качестве прокси-сервера.

Я использовал то же решение для запуска платформы Chicago Boss, единственное отличие состоит в том, что у меня nginx proxy_pass установлен на>http://127.0.0:8001, так как Chicago Boss работает на 8001 по умолчанию. Кто-нибудь знает, как это влияет на преимущества параллелизма на серверах Erlang, если кто-то использует nginx в качестве прокси-сервера, или это никак не влияет?

Стоит отметить, что для интерактивной командной строки требуются права суперпользователя:

sudo su
yaws -i --id whatever

Вы также должны указать ID, если демон yaws работает одновременно.

Есть две вещи, которые нужно искать:

  • проверьте настройки группы безопасности для своего экземпляра и убедитесь, что порт 80 или 8000 открыт (доступен из 0.0.0.0/32).
  • попробуйте привязать ваш сервер к внутреннему IP-адресу машины. Некоторые серверы должны слушать этот интерфейс вместо 0.0.0.0. Вы можете узнать свой внутренний IP либо в консоли, либо с помощью ifconfig

В одном из вставленных вами отчетов об ошибках указана причина, по которой вы не можете запустить сервер на порту 80: права доступа ({error, eaccess}).

=ERROR REPORT==== 16-Sep-2012::17:24:47
=== Yaws: Failed to listen 0.0.0.0:80 : {error,eacces}

Что касается запуска через порт 8000, вы пытались подключиться к компьютеру по SSH и подключиться к серверу локально (например, через telnet)? Если это сработает, ваша проблема должна быть связана, как и другие, с брандмауэром Ubuntu, не имеющим открытый порт 8000, или с группой безопасности для вашего экземпляра EC2, не содержащей маршрут, который разрешает входящий трафик на этот порт.

Сказал, что этот вопрос, вероятно, следует перенести в ServerFault или AskUbuntu.

http://hyber.org/privbind.yaws

привязка к привилегированным портам

Общей ошибкой, обнаруженной в операционных системах UN*X, является ограничение, что только root может связываться с портами ниже 1024. Многие обходные пути были потрачены впустую, и часто результаты являются дырами в безопасности.

$ setcap 'cap_net_bind_service=+ep' /usr/lib/erlang/erts-5.7.4/bin/beam

@ Бернард прав, что экземпляр EC2 защищен брандмауэром. Вам необходимо изменить группу безопасности EC2 (ее можно найти слева в веб-интерфейсе консоли управления) для экземпляра, чтобы разрешить входящий трафик TCP на порт, который вы хотите использовать. Для порта 80 вы можете выбрать HTTP из поля со списком. Для порта 8080 выберите Custom TCP Rule и введите номер порта.

Другие вопросы по тегам