Подтвердить что ты не робот

Как запустить Node.js на порту 80?

Моя цель - запустить 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 лучший способ добиться этого?

Спасибо.

4b9b3361

Ответ 1

Что вам нужно сделать, так это иметь 2 ip для сервера, на котором вы работаете. Apache имеет 1 ip, привязанный к порту 80, а затем node.js имеет другой ip, связанный с портом 80.

Использование node и его директива для прослушивания имеет 2 значения, например..listen(80, NODEJS_IP или DNS NAME);

Некоторые другие советы.

Я бы не использовал apache с nodejs, поскольку он не был указан. Так что это действительно не рекомендуется. Я бы на самом деле рассмотрел использование NGINX как своего лучшего сочетания с node.

Ответ 2

запустите приложение на высоком порту 8080 или whatev, затем

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Если вы не используете ngnix или apache

Ответ 3

Самое простое решение: безопасно настроить приложение node для работы на порту 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 (Отличная статья о том, как настроить приложение node на облачном хостинге).

Ответ 4

В настоящее время не рекомендуется запускать 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:

http://wiki.nginx.org/HttpProxyModule

http://wiki.nginx.org/HttpUpstreamModule

Ответ 5

Ваш код выглядит как пример кода, в котором вы создаете прокси-сервер с 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.

Ответ 6

У меня была такая же проблема, вот как я ее разрешил, используя node -http-proxy, чтобы прослушивать порт 80, а затем пересылать либо выражать, либо apache.

fooobar.com/questions/55578/...

Ответ 7

если вы только что создали режим среды

вы можете su root, затем

node index.js или ./node_modules/coffee-script/bin/coffee index.coffee