Сервер Yaws запущен на локальном хосте Azure, но не доступен из cloudapp.net

Я успешно запустил сервер Yaws на виртуальной машине Windows Azure, но не могу получить доступ к общедоступному домену.

На данный момент я просто хочу использовать Yaws для размещения своего статического содержимого.

Я искал некоторые статьи, но не нашел решения.

Вот подробности, и, пожалуйста, дайте мне некоторое представление, спасибо.

Я запустил сервер Yaws на локальном хосте: 8000.

Я запустил сервер Yaws, выполнив следующие настройки:

# /etc/yaws/conf.d/localhost.conf

<server localhost>
    port = 8000
    listen = 127.0.0.1
    docroot = /home/me/website
    # dir_listings = true
</server>

Я думаю, что успешно запустил http-сервер, потому что я могу curl содержимое index.html с помощью:

curl losthost:8000

Я привязываю конечную точку к виртуальной машине Windows Azure.

И я также настроил конечную точку на виртуальной машине Window Azure (Ubuntu Server 15.04):

NAME | PROTOCOL | PUBLIC PORT | PRIVATE PORT
:----|:---------|:------------|:-------------
HTTP | TCP      | 80          | 8000

Но не могу получить доступ к azeure_vm_name.cloudapp.net

Но я не могу получить доступ к статическому веб-сайту azure_vm_name.cloudapp.net.

cloudapp.net — это общедоступный домен виртуальной машины Windows Azure.

Но я могу получить доступ к общедоступному домену, запускающему сервер python

Раньше я пытался запустить python http.server в папке /home/me/website:

# python 3
python -m http.server
# python 2
python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

ИНФОРМАЦИОННЫЙ ОТЧЕТ с сервера Yaws

$ sudo yaws -i
Erlang/OTP 17 [erts-6.2] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-
poll:true]

Eshell V6.2  (abort with ^G)
1>
=INFO REPORT==== 22-Oct-2015::07:30:46 ===
Yaws: Using config file /etc/yaws/yaws.conf

=INFO REPORT==== 22-Oct-2015::07:30:46 ===
Yaws: Using subconfig file /etc/yaws/conf.d/localhost.conf

=INFO REPORT==== 22-Oct-2015::07:30:48 ===
yaws debug:Add path "/usr/lib/yaws/custom/ebin"

=INFO REPORT==== 22-Oct-2015::07:30:48 ===
yaws debug:Add path "/usr/lib/yaws/examples/ebin"

=INFO REPORT==== 22-Oct-2015::07:30:48 ===
yaws debug:Running with id="default" (localinstall=false)
Running with debug checks turned on (slower server)
Logging to directory "/var/log/yaws"

=INFO REPORT==== 22-Oct-2015::07:30:48 ===
Ctlfile : /home/me/.yaws/yaws/default/CTL

=INFO REPORT==== 22-Oct-2015::07:30:48 ===
Yaws: Listening to 127.0.0.1:8000 for <1> virtual servers:
 - http://localhost:8000 under /home/me/website

использованная литература

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

https://askubuntu.com/q/190841/249957


person scozv    schedule 22.10.2015    source источник
comment
Я подозреваю, что Yaws отбрасывает ваши запросы, потому что имя сервера в ваших запросах не соответствует ни одному из настроенных серверов. Проверьте журналы под /var/log/yaws, чтобы увидеть, есть ли в них какие-либо ошибки. Вы также можете запустить sudo yaws -i --debug, который может дать вам больше информации.   -  person Steve Vinoski    schedule 23.10.2015


Ответы (1)


После некоторых исследований и тестов я наконец нашел решение.

окончательное решение

Вот финал yaws.conf:

<server azure_VM_name.cloudapp.net>
    port = 8000
    listen = <Azure VM INTERNAL IP ADDRESS>
    docroot = /home/scotv/repo/shanlin-web
    # dir_listings = true
</server>

как найти это решение

Благодаря совету @steve-vinoski я открываю переключатель --debug и читаю официальные документы «Yaws — еще один веб-сервер (версия от 7 октября 2015 г.)».

На странице 9 в документе Yaws PDF упоминается:

Конфигурация в примере 2.1 определила один HTTP-сервер с адресом 127.0.0.1:8000 под названием «localhost». Важно понимать разницу между именем и адресом сервера. Имя является ожидаемым значением в заголовке HTTP Host: клиента. Обычно это то же самое, что и полное DNS-имя сервера, тогда как адрес — это фактический IP-адрес сервера.

Итак, я проверил заголовок HTTP-запроса в браузере:

GET / HTTP/1.1
Host: azure_VM_name.cloudapp.net
Connection: keep-alive

Вот почему я изменил yaws.conf на:

# <server localhost> </server>
<server azure_VM_name.cloudapp.net> </server>

Следующий шаг — выяснить, какой IP мне нужно слушать, согласно сообщению от SimpleHTTPServer:

python -m SmpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

Решил послушать 0.0.0.0

И это работает, теперь я могу получить доступ к azure_VM_name.cloudapp.net.

Однако в руководстве yaws.conf упоминается:

СЕРВЕРНАЯ ЧАСТЬ

слушать = IP-адрес

Если указан IP-адрес 0.0.0.0, Yaws будет прослушивать все локальные IP-адреса на указанном порту.

Я не хочу слушать всех.

Итак, я проверил IP-адреса, предоставленные виртуальной машиной Windows Azure, у нас есть:

DNS NAME
azrue_VM_name.cloudapp.net
HOST NAME
azrue_VM_name
PUBLIC VIRTUAL IP (VIP) ADDRESS
40.*.*.*
INTERNAL IP ADDRESS
100.*.*.*

Я попробовал ПУБЛИЧНЫЙ VIP и ВНУТРЕННИЙ IP-адрес, наконец, я обнаружил, что должен слушать ВНУТРЕННИЙ IP-адрес: 8000.

Итак, теперь я запускаю yaws:

sudo yaws -D --heart --debug --conf ./deploy/yaws.conf
person scozv    schedule 23.10.2015
comment
Если вы довольны тем, как он работает, вы можете отключить --debug. - person Steve Vinoski; 23.10.2015