Как запустить Node.js на порту 80?
моя цель-запустить узел.js на порту 80. Это потому, что я нахожу узел.js блокируется из определенных сетей, которые не позволяют трафик из любого другого порта.
Кажется, что лучший способ сделать это-проксирование Apache через узел.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 через узел.js с использованием node-http-proxy? Это позволит мне запустить node.js на порту 80? И является ли node-http-proxy лучшим способом достичь этого?
спасибо.
7 ответов
Что вам нужно сделать, это иметь 2 ip-адреса для сервера, на котором вы работаете. Apache имеет 1 ip, привязанный к порту 80,а затем узлу.js имеет другой ip, привязанный к порту 80.
использование узла и его директивы listen имеет 2 значения, например. .слушайте (80, NODEJS_IP или DNS-имя);
еще один совет.
Я бы не использовал apache с nodejs, поскольку он не evented. Так что это действительно не рекомендуется. Я бы действительно посмотрел на использование NGINX как его гораздо лучшее сопряжение с Узел.
запустите приложение на высоком порту 8080 или whatev тогда
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Если вы не используете ngnix или apache
самое простое решение: безопасно настройте приложение узла для работы на порту 80.
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep /path/to/node
- та-да! Вы закончили.
почему мне это нравится?
- вам не нужно использовать apache или nginx
- вам не нужно запускать приложение как root
- вам не придется пересылать порты (и обрабатывать это каждый раз, когда ваша машина загружается)
ссылка Ссылка: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps (отличная статья о том, как настроить приложение узла на облачном хостинге).
в настоящее время не рекомендуется запускать узел на порту 80, так как для этого требуется запуск узла как root.
насколько вы привязаны к apache? Проксирующий узел через nginx-это проверенное и верное решение с конфигурацией nginx, такой как:
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:
ваш код выглядит как пример кода, в котором вы создаете прокси-сервер на основе узла от порта 80 до порта 9000, а затем создаете HTTP-сервер на основе узла на порту 9000. (т. е. Node:80 -> Node:9000
)
вы получаете "адрес в использовании" при запуске узла, потому что Apache уже использует порт 80. Если вы хотите использовать Apache для прокси-сервера, вы должны использовать узел на другом порту (скажем, 9000) и Apache прослушивает порт 80 и пересылает запросы узлу на порт 9000. (т. е. Apache:80 -> Node:9000
)
похоже, что библиотека, которую вы используете, предназначена для противоположного: использования узла в качестве прокси-сервера и пересылки запросов Apache. В этом случае вы должны настроить Apache для работы на другом порту, чем порт 80. (т. е. Node:80 -> Apache:9000
).
вы хотите сделать Node:80 -> Apache:9000
или Apache:9000 -> Node:80
, в конце концов?
редактировать после комментариев:
Если вы хотите сделать Apache:80 -> Node:9000
, вы можете использовать mod_proxy
на Apache и использовать ProxyPass
/ProxyPassReverse
директивы, что-то как
ProxyPass /nodeurls/ http://localhost:9000/
ProxyPassReverse /nodeurls/ http://localhost:9000/
здесь nodeurls
- это семейство URL-адресов, которые вы хотите, чтобы Apache переслал на узел.
У меня была та же проблема, вот как я решил ее с помощью node-http-proxy для прослушивания порта 80, а затем переадресовал на express или apache.
Если вы просто в режиме разработки среды
вы можете su root
, потом
node index.js
или ./node_modules/coffee-script/bin/coffee index.coffee