2012-05-20 5 views
6

Я изучаю с помощью прокси-сервера node-http-proxy, чтобы у меня мог быть наш прокси-сервер для запросов на отправку 80 портов на наш сервер приложений на порту 8000. Однако я немного смущен, почему это хорошая идея, и что именно эта настройка защитит от безопасности.В чем смысл использования прокси-сервера, такого как node-http-proxy для приложения-узла с одним приложением на одном порту?

Документация note-http-proxy много обсуждает ее использование в качестве способа перенаправления запросов к приложению с несколькими портами или IP-адресами. Это, очевидно, было бы очень полезно, особенно с базовой стратегией балансировки нагрузки по кругу. Однако у нас есть только одно приложение на одном порту, поэтому нам не нужно это делать.

Если есть важная причина в безопасности, почему мы должны использовать этот прокси-сервер, тогда мне бы хотелось узнать, какие типы атак он защищает. Кроме того, мы используем socket.io, поэтому, если есть что-то, что прокси делает, чтобы помочь серверу websocket масштабироваться, я хотел бы это понять. Нам не удается выяснить, как запустить наше приложение без sudo (так как все порты ниже 1024 требуют доступа root), поэтому, если на данный момент нет веских оснований для использования прокси-сервера, мы просто собираемся отказаться от , Если кто-нибудь знает, как запустить это приложение с прокси-сервером на порту 80 без доступа root, это тоже очень полезно. Благодаря!

+0

просто любопытно, почему вы искали его в первую очередь?Его обычно используют что-то вроде nginx в качестве прокси для обслуживания статических ресурсов или передачи других запросов в приложение-узел. –

+0

@JustinSoliz Потому что, насколько я знаю, nginx не прокси-серверы – user730569

+0

Это был пример, снова просто спрашивающий, почему вы искали node-http-proxy? что вы пытаетесь достичь с ним –

ответ

3

Причины для запуска обратного прокси-сервера является:

  • У вас есть ограниченные порты IP открыты и нужны для запуска многих служб Node, каждый из которых нуждается в его собственный порт
  • Админцетра служба не поддерживает HTTPS, но вам это необходимо (например, Derby)
  • Чтобы добавить некоторые другие функции в запрос, который нелегко сделать с обратной стороны, например добавление базовой аутентификации или какой-либо общей регистрации/аудита
  • Чтобы обеспечить дополнение или изменить на исходящие ответы commo п через несколько серверных услуг
  • для предоставления услуг балансировки нагрузки

Если ваши потребности не достаточно просто, было бы лучше использовать специальный прокси-сервер, такой как HAproxy, так как узел-HTTP-прокси довольно упрощенно ,

+0

На самом деле, node-http-proxy отлично справляется с этим. Nodejitsu использует node-http-proxy в производстве, и он делает почти все, что есть в вашем списке. Он используется для балансировки нагрузки и сертификатов HTTPS и перенаправляет другие порты на порт 80. Вы также можете [добавить промежуточное программное обеспечение для изменения запросов] (http://blog.nodejitsu.com/http-proxy-middlewares) в узле-http -proxy. – CodeRarity

+0

Возможно, я был немного суровым, но правда в том, что он плохо документирован, и я не получил никакой полезной поддержки по этой проблеме, которую я сразу же ударил при использовании его с HTTPS. У меня нет оснований жаловаться - в любом случае он становится доступным для всех - это просто то, что по сравнению с выделенным прокси-инструментом он не складывается для использования в производстве. Возможно, это может измениться, если бы оно было лучше задокументировано, было бы неплохо иметь всю привязку узла. –

+0

Я нахожу, что многие узловые приложения плохо документированы ... В этих случаях документация - это сам код (что не всегда так хорошо, как чтение хорошо написанной документации). – trusktr

1

Ну, если вы используете только один экземпляр сервера, то на самом деле это не причина. В документе node-http-proxy упоминается использование единого сертификата SSL для нескольких приложений, что очень возможно. Вы также можете загрузить баланс на нескольких серверах HTTP и веб-сокетов (скажем, запустите 10 серверов socket.io для данных в реальном времени, но только 1 HTTP-сервер для обслуживания активов и REST API). Конечно, в одном случае они не дают никаких преимуществ.

Если вы хотите запустить узел сервера без Судо, может быть, вы могли бы попробовать настройки Таблицы IP переадресацию портов из порта 80 на порт выше 1024. См Can I run Node.JS with low privileges?

+0

Вы можете использовать один и тот же сертификат на столько «серверов» узла, сколько хотите, пока они работают с одного и того же IP-адреса. Для нескольких IP-адресов требуется несколько сертификатов или использование подстановочной адресации или расширение «Альтернативное имя сервера», которое не поддерживается в старых браузерах. Для этого вам не нужен прокси-сервер. –

1

Мы используем главным образом HTTP-прокси, чтобы иметь несколько назад -end сервер за единственным IP-адресом, но мы также используем его для пересылки https на http. Это укрепляет наше приложение.

Меры безопасности. У вас может быть больше уверенности в хорошем качестве http-proxy, чем на вашем приложении. Прокси-сборка, созданная nodejitsu, готова к производству, и аттаку должно быть сложнее получить привилегии (например, чтение файлов закрытого ключа) на http-прокси вместо собственного приложения (конечно, это зависит от вашего навыка разработки безопасности и вашего доверия в проекте http-proxy с открытым исходным кодом).