2013-10-04 2 views
5

Я пытаюсь найти способ привязать мой сервер Rails к порту 80 без необходимости запускать весь сервер с привилегиями root. Мой вопрос в основном такой же, как «Is there a way for non-root processes to bind to "privileged" ports (<1024) on Linux?», за исключением того, что мне нужно сделать это с помощью Rails. В настоящее время два первых ответа на вопрос, на который я ссылаюсь, либо требуют, чтобы я предоставил разрешение CAP_NET_BIND_SERVICE интерпретатору Ruby (возможно, это не очень хорошая идея) или сбросил права root после запуска сервера (который I'm not sure is possible with Ruby). Есть идеи?Связывание сервера Rails с портом 80 на Linux без его запуска как root

+1

У вас есть возможность запустить традиционный веб-сервер на порту 80 и перенаправить запросы на сервер Rails, запущенный на другом порту? Например, запустив [nginx] (http://wiki.nginx.org/Main) и направляя запросы на [тонкие] (http://code.macournoyer.com/thin/) или [единорог] (http: // unicorn.bogomips.org/) работает на непривилегированном порту. –

+0

Шансы, которые вы на самом деле хотите сделать, крайне низки. Thin, Mongrel, Puma, Unicorn или что-то еще должно быть за сервером без Ruby в обычных шаблонах использования. См. [Этот вопрос] (http://stackoverflow.com/questions/15469598/why-thin-behind-nginx). – colinm

+0

Да, это первый раз, когда я на самом деле пытался самостоятельно развернуть производственное приложение без помощи кого-то другого, чтобы настроить сервер для меня или PaaS, такого как Heroku; поэтому есть хорошие шансы, что я не знаю, что хочу. Если вы хотите опубликовать подробный ответ, предлагающий альтернативу привязке тонких портов 80 (например, nginx, как сказал Джим в своем комментарии), я бы принял это как действительный ответ. – Ajedi32

ответ

4

Так что в основном, ответ у вас нет. Вполне возможно, что есть какой-то действительно хакерский способ сделать эту работу, но шансы, которые вы на самом деле хотите сделать, чрезвычайно низки. Вместо этого запустите Rails на непривилегированном порту и настройте настоящий веб-сервер, например nginx, для пересылки на Rails.

В супер-простой пример, с Nginx вы можете использовать конфигурационный файл, который выглядит примерно так:

upstream rails_server { 
    server localhost:3000; 
} 

server { 
    listen 80; 

    location/{ 
    root /home/deploy_user/rails_app/public; 
    try_files $uri @missing; 
    } 

    location @missing { 
    proxy_pass http://rails_server; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    } 
} 

Это решение также является более долгосрочным, потому что это делает вашу инфраструктуру более гибкой. Например, если вам нужно увеличить приложение на нескольких машинах, вы можете использовать nginx в качестве балансировщика нагрузки и запросить его на всю цепочку серверов Rails, работающих на разных машинах.

 Смежные вопросы

  • Нет связанных вопросов^_^