Мне нужно поставить nodejs в порт 80, но apache уже использует его. Как я могу поместить оба (nodejs и apache) на один и тот же порт 80? Мне это нужно, потому что в моем университете все порты заблокированы, за исключением PORT 80. (Это приложение реального времени с nodejs и socket.io(websockets), а с другой стороны - приложение php). Большое спасибо
Как установить nodejs и apache в один и тот же порт 80
Ответ 1
Я лично сделал это по-другому из @liammclennan. Некоторые предлагают, что проксирование через Apache поражает некоторые преимущества производительности и масштабируемости Node (у меня нет опыта, так как мой сервер не работает) t получить так много трафика, но из ссылки @liammclennan: "Каждый запрос, который приходит через Apache, заставит поток Apache ждать/блокировать, пока ответ не будет возвращен из вашего процесса Node.js.", что, очевидно, не сетка с архитектурой Node.)
Я использовал node-http-proxy для настройки прокси-сервера Node примерно так, как описано в первой ссылке (мой Node прокси-сервер работает на порту 80, а Apache и другие мои службы Node не работают). Кажется, что до сих пор хорошо работает, хотя у меня были случайные проблемы со стабильностью, которые я "решил", проверяя прокси-сервер, который все еще работает с заданием cron (edit:). В эти дни кажется намного более стабильным). Прокси довольно легкий, занимая около 30 МБ памяти.
Ответ 2
Я делаю это через node.js proxy..
Установите http-proxy
с npm
или официальная страница
Пример:
var http = require('http'),
httpProxy = require('http-proxy'),
proxyServer = httpProxy.createServer ({
hostnameOnly: true,
router: {
'domain.com': '127.0.0.1:81',
'domain.co.uk': '127.0.0.1:82',
'127.0.0.1': '127.0.0.1:83'
}
});
proxyServer.listen(80);
Это создает процесс node, прослушивающий порт 80, и пересылку запросов для доменов, которые идут: 81,82,83 и т.д. Я рекомендую запустить это с помощью forever
и добавить запись в init.d
, чтобы ваш прокси-сервер если система выключается.
Ответ 3
Вы также можете использовать Apache 2 mod_proxy и mod_proxy_http, которые могут быть более надежными или лучше работать в зависимости от вашей системы.
Вот пример:
# Use Apache for requests to http://example.com/
# but use Node.js for requests to http://example.com/node/
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example/
<Location /node>
ProxyPass http://127.0.0.1:8124/
ProxyPassReverse http://127.0.0.1:8124/
</Location>
</VirtualHost>
И, конечно же, вы можете изменить директивы для своих нужд, например, использовать другой порт для своего виртуального хоста (например, 443), другой порт для Node.js или настроить прокси-сервер под другим блоком, например, для поддомена (например, Node.example.com).
Ответ 4
Вы не можете. Вы должны запустить node.js на другом порту, а затем прокси-запросы через apache. Вы можете сделать это, используя mod_proxy
http://davybrion.com/blog/2012/01/hosting-a-node-js-site-through-apache/
Ответ 5
Я обычно использую haproxy в качестве интерфейсного интерфейса в подобных ситуациях и имею этот прокси на соответствующем бэкэнд-сервере. (Несмотря на то, что ваш процесс node.js прокси-сервер также является допустимым подходом в зависимости от ваших потребностей).
Ответ 6
Я нашел крутой gist Запустить apache и nodejs на порт 80. еще не пробовал, но, конечно же, будет
Шаг 1
Получите VPS, который предлагает 2 или более IP-адреса.
Шаг 2
Из WHP cPanel найдите пункт меню
Service Configuration
, выберитеApache Configuration
, а затем нажмитеReserved IPs Editor
.Шаг 3
Отметьте IP-адрес, который вы НЕ ХОТИТЕ Apache, чтобы слушать и писать так что вы можете использовать его на следующем шаге. Нажмите
Save
.Шаг 4
Установите Node.js и создайте сервер следующим образом:
var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200); res.end('Hello, world!'); }); server.listen(80, '111.111.111.111');
Замена
111.111.111.111
IP-адресом, который вы ранее зарезервировано из WHM cPanel.Шаг 5
Прекратите тратить свое время и никогда не слушайте тех, кто говорит вам использовать
mod_rewrite
в прокси Node.js снова.
Update:
Мы можем решить проблему разными способами и ИМХО, мы должны хотя бы знать каждый возможный путь 😉. Мы можем сделать это, не покупая новый IP, конечно, ставя прокси перед сервером Apache и NodeJS, каждый из которых запускает другие порты, кроме 80.