Назад | Перейти на главную страницу

Apache VirtualHost с ProxyPass для сервера node.js отказывается работать («Не удалось разрешить имя хоста»)

Я запускаю локальный Apache на своем Mac для разработки, а также имею сервер node.js, работающий на http://127.0.0.1:8000/.

я использую .dev домен для проектов Apache и хотел бы .node домен для перенаправления на сервер node.js. У меня есть виртуальные хосты, настроенные следующим образом:

<VirtualHost *.dev:80>
    VirtualDocumentRoot "/www/sites/%1/wwwroot"
    ServerName sites.dev
    ServerAlias *.dev
    UseCanonicalName Off
</VirtualHost>

<VirtualHost *.node:80>
    ServerName sites.node
    ProxyPass "/" "http://localhost:8000"
    ProxyPassReverse "/" "http://localhost:8000"
</VirtualHost>

Однако когда я пытаюсь применить эти настройки, я получаю сообщение об ошибке:

[core:error] [pid 8594] (EAI 8)nodename nor servname provided, or not known: 
AH00547: Could not resolve host name *.node -- ignoring!

Я должен отметить, что .dev домен работает должным образом, а сервер node.js доступен по адресу http://localhost:8000/, только не, скажем, http://test.node/.

Я что-то упустил?

Разве вы не ненавидите, когда люди делают ошибки новичков и бегут в обмен на ответ?

Вот что здесь делается неправильно:

  1. Убедившись, что личный домен действительно разрешает localhost всегда кошерное дело.

Для homebrew dnsmasq на Mac это поможет:

echo 'address=/.no/127.0.0.1' > $(brew --prefix)/etc/dnsmasq.conf

И тогда OS X нужно указать, что нужно искать собственный домен локально:

sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/no'

Кастомных доменов действительно 101.

  1. Правило VirtualHost для перенаправления прокси должно появиться как можно скорее в файле конфигурации. В противном случае Apache может перенаправить запрос вашего личного домена на localhost без добавления настраиваемого порта :8000.

Как это:

<VirtualHost *.no:80>
    ServerName sites.no
    ProxyPreserveHost On
    ProxyPass "/" "http://localhost:8000/"
    ProxyPassReverse "/" "http://localhost:8000/"
</VirtualHost>

<VirtualHost *.dev:80>
    VirtualDocumentRoot "/www/sites/%1/wwwroot"
    ServerName sites.dev
    ServerAlias *.dev
    UseCanonicalName Off
</VirtualHost>
  1. Собственный домен .node в настоящее время не является действительным доменом верхнего уровня, согласно IANA. Измените его на что-то действительное, например .no, предотвращает запуск надоедливого Safari поиска в Google по таким запросам, как test.no. (Попрощайтесь с настоящим .no сайты там.)

А Роберт брат твоего отца.

<VirtualHost *.dev:80>
    VirtualDocumentRoot "/www/sites/%1/wwwroot"
    ServerName sites.dev
    ServerAlias *.dev
    UseCanonicalName Off
</VirtualHost>

<VirtualHost *.node:80>
    ServerName sites.node
    ProxyRequests on
    RewriteEngine on
    <Proxy *>
             Order deny,allow
             Allow from all
    </Proxy>
    ProxyPass "/" "http://localhost:8000"
    ProxyPassReverse "/" "http://localhost:8000"
</VirtualHost>

Как это работает?