2013-08-06 2 views
7

У меня есть webapp, где я разрешаю людям создавать подсайты на моем сервере приложений (например: mysite.com/their -site). Я хочу, чтобы они могли указать свой домен на подсайт в моем приложении. Аналогично тому, как вы присоединяете домен к общему серверу хостинга.Nodejs: хочу отображать домены на сервер

Я не уверен, как это сделать. Был бы признателен, если бы кто-нибудь мог просветить меня.

+0

Вы указываете их на разных экземплярах Node.js? Или все-таки приложение? – Brad

+0

То, что вы упомянули в примере, путается: 'mysite.com/их-сайт' не будет находиться в отдельном домене, это другой маршрут. Обычно у вас есть домен, например 'domain.com' и подобъект, например' mail.domain.com'. Вы хотите перенаправить такие запросы или обработать их? – user568109

+0

@ user568109 Извините за путаницу. mysite.com/their -site будет их страницей в моем приложении. У них может быть собственный домен, зарегистрированный в другом месте, и я бы хотел, чтобы у них была возможность сопоставить их страницу на моем сайте. –

ответ

5

Если вы используете что-то вроде node http-proxy или nginx, вы можете запускать каждый отдельный сайт на разных локальных портах, а затем отображать имя домена обратно. Я использую http proxy, но другие любят nginx.

Для этого вам нужно будет добавить записи DNS, разрешающие IP-адрес, на котором работает ваш обратный прокси. Затем, например, запрос на порт 80 будет отображаться обратно на localhost: 3000.

Это позволяет для каждого приложения работать изолированно и в отдельных процессах с других сайтов. Они не могут разрушить друг друга. У вас также нет проблем с пространством имен, в которых оба приложения заявляют один и тот же путь.

Моего app.js для HTTP прокси-сервера выглядит следующим образом:

var proxyPort = 80; 
var http = require('http'); 
var httpProxy = require('http-proxy'); 

var options = { 
    router: { 
     'localhost': '127.0.0.1:3000', 
     'somesite.com': '127.0.0.1:3000', 
     'othersite.com': '127.0.0.1:4000' 
    } 
}; 
console.log('Proxy Routing:') 
console.log(options);var options = { 
console.log(); 

var proxyServer = httpProxy.createServer(options); 
proxyServer.listen(proxyPort); 
console.log('Proxy listening on port ' + proxyPort); 

Вы можете также маршрут с дорожками. Смотрите это: https://github.com/nodejitsu/node-http-proxy/issues/232

Так больше как ваш оригинальный запрос, вы можете сделать:

router: { 
    'myhost.com/appA': '127.0.0.1:8080', 
    'myhost.com/appB': '127.0.0.1:9090/appB', 
    'myhost.com/appC': '127.0.0.1:9090/appC' 
    } 
}; 

Другим вариантом является просто обеспечить маршрут/страницы для каждого клиента, а затем это просто проблема DNS. Вы должны настроить DNS так, чтобы все доменные имена разрешали один IP-адрес, на котором работает ваше приложение. Это имеет некоторые недостатки:

  1. domain1.com/user1, domain1.com/user2, domain2.com/user1 и domain2.com/user2 бы все работы, которые вы, вероятно, не хотят.
  2. Вы управляете всем кодом или поставляете код? Если это код, предоставленный пользователем, тогда вам нужна изолированность, поэтому отдельные приложения.
  3. Вам все еще, вероятно, нужен прокси-сервер http для запуска на порту 80 в linux и не запускается как sudo.
+0

В моем случае я думаю, что настраиваю домен на маршрут. Так получилось бы что-то вроде этого: «user1domain.com»: «127.0.0.1:9090/user1page»? –

+0

Также будет ли это предпочтительным методом, если я планирую иметь более 100 доменов, сопоставленных этому приложению? –

+0

Да, это должно работать нормально. 100+ не будет проблемой - конечно, все зависит от нагрузки каждого домена и требований к ресурсам. Приятно, что маршрутизация также означает, что вы можете масштабировать до нескольких блоков, если это когда-либо понадобится. – bryanmac

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