Обслуживание Meteor на основном домене и Apache на поддомене независимо

Я использую сервер Meteor на своем сервере Ubuntu. Но проблемы возникают, когда я пытаюсь, чтобы Apache обслуживал поддомен на том же сервере.

main.domain.com -> Метеор

sub.domain.com -> Apache

Метеор работает на порте 80. Ранее я пытался запустить Метеор на порту 3000 и использовать обратный прокси-сервер с Nginx, но Метеор начал плохо себя вести (проблемы с tcp/websockets), и я провел слишком много вечеров и ночей, чтобы настаивать на своем. ради.

Поэтому я изменил настройки, чтобы Meteor был основным сервером (приложение работает нормально), а затем установил Apache, чтобы обслуживать мой поддомен. Проблема в том, что я не могу заставить Apache обслуживать порт 80, так как он, кажется, перегружает мой сервер Meteor.

Исходя из своего опыта, я стараюсь держаться подальше от обратного прокси-сервера Meteor, но я недостаточно осведомлен, чтобы заставить Apache посвятить себя моему поддомену и не перегружать "все порт 80" на моем сервере.

Как сделать так, чтобы обе службы вели себя друг с другом в такой конфигурации?


Обновить:

Следуя предложению EasyEcho, я перешел к использованию 2 разных IP-адресов.

Пусть это будет известно, я использую облачный сервер "Next Generation" в Rackspace (на котором установлена ​​последняя версия Ubuntu 12.04 LTS с последним grub2/ обновленным ядром).

Rackspace не позволяет использовать дополнительные IP-адреса на своих облачных серверах ( источник)...

Платформа облачных серверов следующего поколения на базе OpenStack пока не поддерживает дополнительные IP-адреса.

... но вы получаете 1 IPv4 и 1 IPv6 при создании сервера. Так почему бы не запрыгнуть в подножку IPv6? Проще сказать, чем сделать.

Итак, вот моя "новая проблема": после сопоставления моего субдомена с адресом IPv6 (AAAA в DNS) и настройки Apache для прослушивания адреса IPv6, я получаю следующее поведение:

С моего удаленного рабочего стола сервера (с помощью freeNX), в Firefox

  • http: // [my: ip: v6: address] -> Apache (WIN)
  • http: // sub.domain.com -> Apache (WIN)
  • http: // my.ip.v4.address -> Метеор (WIN)
  • http: // main.domain.com -> Apache (FAIL)

С моей рабочей станции (Win7 x64), также в Firefox

  • http: // [my: ip: v6: address] -> Время ожидания истекло (FAIL)
  • http: // sub.domain.com -> сервер не найден (FAIL)
  • http: // my.ip.v4.address -> Метеор (WIN)
  • http: // main.domain.com -> Метеор (WIN)

Вот моя конфигурация Apache:

/etc/apache2/ports.conf

NameVirtualHost [my:ip:v6:address]:80
Listen [my:ip:v6:address]:80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

/ и т.д. / apache2 / сайты с поддержкой / по умолчанию

<VirtualHost [my:ip:v6:address]:80>
    ServerAdmin webmaster@localhost

    ServerName sub.domain.com

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Можно ли это исправить, чтобы работать как "рекламируемый"?

2 ответа

Хм, вам не нужно несколько IP-адресов для этого.

Прослушайте 0.0.0.0:80 с помощью чего-то более легкого, такого как NginX или HAProxy (масштабирование не составит проблемы), а затем перенаправьте трафик через прокси-сервер на соответствующий слой, работающий на отдельных портах (прослушивание на localhost, а не 0.0.0.0).

Итак, запрос приходит для apache.your_domain.comи HAProxy внутренне направляет трафик через Apache, работающий на другом порту.

Запрос приходит для meteor.your_domain.comи HAProxy внутренне маршрутизирует трафик через Node.js...

Если возможно, назначьте несколько IP-адресов устройству и настройте привязку Meteor к 80 на одном из ips и Apache для привязки к порту 80 на другом. Смотрите Apache Documentation и Meteor Demo, который, кажется, охватывает то, что вы ищете.


Обновить:

Ну, это много новой информации...

Вероятно, вы не можете подключиться к IPv6 ip/host с вашей рабочей станции, потому что вы находитесь на IPv4.

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