Я пытаюсь найти способ привязать мой сервер 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
5
A
ответ
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, работающих на разных машинах.
У вас есть возможность запустить традиционный веб-сервер на порту 80 и перенаправить запросы на сервер Rails, запущенный на другом порту? Например, запустив [nginx] (http://wiki.nginx.org/Main) и направляя запросы на [тонкие] (http://code.macournoyer.com/thin/) или [единорог] (http: // unicorn.bogomips.org/) работает на непривилегированном порту. –
Шансы, которые вы на самом деле хотите сделать, крайне низки. Thin, Mongrel, Puma, Unicorn или что-то еще должно быть за сервером без Ruby в обычных шаблонах использования. См. [Этот вопрос] (http://stackoverflow.com/questions/15469598/why-thin-behind-nginx). – colinm
Да, это первый раз, когда я на самом деле пытался самостоятельно развернуть производственное приложение без помощи кого-то другого, чтобы настроить сервер для меня или PaaS, такого как Heroku; поэтому есть хорошие шансы, что я не знаю, что хочу. Если вы хотите опубликовать подробный ответ, предлагающий альтернативу привязке тонких портов 80 (например, nginx, как сказал Джим в своем комментарии), я бы принял это как действительный ответ. – Ajedi32