Как запустить узел.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 64

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:

http://wiki.nginx.org/HttpProxyModule

http://wiki.nginx.org/HttpUpstreamModule

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

https://stackoverflow.com/a/9645091/500270

Если вы просто в режиме разработки среды

вы можете su root, потом

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