Как запустить узел.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 с помощью узла-http-прокси? Это позволит мне запустить узел.js на порту 80? И является ли node-http-proxy лучшим способом достичь этого?
спасибо.
7 ответов:
Что вам нужно сделать, это иметь 2 ip-адреса для сервера, на котором вы работаете. Apache имеет 1 ip привязан к порту 80, а затем узел.js имеет другой ip, привязанный к порту 80.
использование узла и его директивы listen имеет 2 значения, например. .listen (80, NODEJS_IP или DNS-имя);
еще один совет.
Я бы не использовал apache с nodejs, поскольку это не evented. Так что это действительно не рекомендуется. Я бы на самом деле посмотрел на использование NGINX как его гораздо лучшее сопряжение с Узел.
запустите приложение на высоком порту 8080 или что тогда
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-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:
ваш код выглядит как пример кода, в котором вы создаете прокси-сервер на основе узла от порта 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 перенаправлял на узел.