2016-12-30 6 views
1

У меня есть пример wtty-hello world, и я пытаюсь развернуть его на экземпляре Google Cloud. Кажется, он работает нормально локально (следовательно, он имеет все необходимые библиотечные зависимости). Однако я не могу его развернуть на сервере.развертывание веб-приложения WT в облаке Google

Я пытаюсь (используя мой фактический адрес HTTP, который отличается от приведенного ниже примера)

./hello --docroot . --http-address 105.150.47.754 --http-port 80 

но он отвечает

Error (asio): bind : cannot assign requested address 

Это, кажется, работает нормально, используя (0.0.0.0/ 0)

Экземпляр облака позволяет трафик HTTP tcp/80.

Я попытался

setcap 'cap_net_bind_service=+ep' ~/hello 

, чтобы позволить пользователям некорневыми публиковать на порты ниже 1024, но также безрезультатно.

Любые предложения?

Cheers, Mike

ответ

1

Если вы не можете слушать на указанный IP-адрес, один из следующих, скорее всего, верно:

1) Что-то (например, веб-сервер) уже слушает в том, что адрес на порту 80 или

2) IP-адрес, который вы используете, не назначается ни одному из сетевых интерфейсов устройства.

Использование (0.0.0.0/0) с портом 80 указывает веб-серверу Wt (wthttpd) прослушивать все доступные локальные интерфейсы. Поэтому использование этого адреса будет работать с любым доступным сетевым интерфейсом, которому назначен любой IP-адрес с доступным портом 80.

+1

the/hello --docroot. --http-address 0.0.0.0 --http-port 80 решение работает, но кажется небезопасным. Любые мысли о рисках? – Mike

+1

Собственно ./hello --docroot. --http-address 10.150.0.4 --http-port 80 также работает там, где 10.150.0.4 является внутренним IP-адресом. Это кажется более безопасным, но не уверен, что это качество продукции. – Mike

+0

Я бы не стал слишком беспокоиться о том, что веб-сервер прослушивает все сетевые интерфейсы. В любом случае, размещение веб-сервера в Интернете сделает его доступным для всех. Я думаю, что более важно, однако, использовать https, а не http. Использование https в наши дни очень просто, тем более, что вы можете использовать сертификат Let's Encrypt, который не требует ничего, кроме времени установки. Новые версии wthttpd, подключенные к вашему Wt-приложению и использующие openssl, проходят все проверки безопасности. Также используйте брандмауэр для блокировки портов, которые вам не нужны, чтобы сделать общедоступными. – Wes

Смежные вопросы