Моя цель - запустить Node.js на порту 80. Это связано с тем, что я нахожу Node.js блокируется из определенных сетей, которые не позволяют трафик с любого другого порта.
Похоже, что лучший способ сделать это - проксировать Apache через Node.js. Я попытался использовать node-http-proxy, но мне не повезло.
Код, который я использую, находится здесь:
var util = require('util'),
http = require('http'),
httpProxy = require('http-proxy');
httpProxy.createServer(9000, 'localhost').listen(80);
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(9000);
Но я продолжаю получать ошибку "Адрес в использовании" для порта 80. Я должен делать что-то неправильно.
Как прокси-сервер Apache через Node.js с помощью node -http-proxy? Это позволит мне запустить Node.js на порту 80? И node -http-proxy лучший способ добиться этого?
Спасибо.
Что вам нужно сделать, так это иметь 2 ip для сервера, на котором вы работаете. Apache имеет 1 ip, привязанный к порту 80, а затем node.js имеет другой ip, связанный с портом 80.
Использование node и его директива для прослушивания имеет 2 значения, например..listen(80, NODEJS_IP или DNS NAME);
Некоторые другие советы.
Я бы не использовал apache с nodejs, поскольку он не был указан. Так что это действительно не рекомендуется. Я бы на самом деле рассмотрел использование NGINX как своего лучшего сочетания с node.
запустите приложение на высоком порту 8080 или whatev, затем
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Если вы не используете ngnix или apache
Самое простое решение: безопасно настроить приложение node для работы на порту 80.
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep /path/to/node
Почему мне это нравится?
Ссылка ссылки: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps (Отличная статья о том, как настроить приложение node на облачном хостинге).
В настоящее время не рекомендуется запускать node на порт 80, поскольку для этого требуется запустить node как root.
Как вы привязаны к апачу? Проксирование node через nginx - это проверенное и истинное решение с nginx-config, например:
upstream node_cluster {
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 0.0.0.0:80;
server_name foo;
access_log /var/log/nginx/foo.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://node_cluster/;
proxy_redirect off;
}
}
Документация Nginx:
Ваш код выглядит как пример кода, в котором вы создаете прокси-сервер с Node с порта 80 на порт 9000, а затем создаете HTTP-сервер с Node на порте 9000. (т.е. Node:80 -> Node:9000
)
При запуске Node вы получаете "адрес в использовании", потому что Apache уже использует порт 80. Если вы хотите использовать Apache для прокси, вы должны использовать Node на другом порту (скажем, 9000) и иметь Apache прослушивает порт 80 и перенаправляет запросы на Node на порт 9000. (т.е. Apache:80 -> Node:9000
)
Похоже, что используемая вами библиотека предназначена для противоположного: использование Node в качестве прокси-сервера и пересылки запросов на Apache. В этом случае вы должны настроить Apache на другой порт, чем порт 80. (т.е. Node:80 -> Apache:9000
).
Вы хотите сделать Node:80 -> Apache:9000
или Apache:9000 -> Node:80
, в конце?
EDIT после комментариев:
Если вы хотите сделать Apache:80 -> Node:9000
, вы можете использовать mod_proxy
в Apache и использовать директивы ProxyPass
/ProxyPassReverse
, что-то вроде
ProxyPass /nodeurls/ http://localhost:9000/
ProxyPassReverse /nodeurls/ http://localhost:9000/
где nodeurls
- это семейство URL-адресов, которые вы хотите, чтобы Apache перешел на Node.
Apache:80 -> Node:9000
чтобы продолжить то, что я написал выше.
У меня была такая же проблема, вот как я ее разрешил, используя node -http-proxy, чтобы прослушивать порт 80, а затем пересылать либо выражать, либо apache.
https://stackoverflow.com/questions/9368794/how-to-use-vhosts-alongside-node-http-proxy
если вы только что создали режим среды
вы можете su root
, затем
node index.js
или ./node_modules/coffee-script/bin/coffee index.coffee