2013-10-04 14 views
5

olarak bağlanıyorum Kök imtiyazları olan tüm sunucuyu çalıştırmak zorunda kalmadan, üretim Rails sunucumu bağlantı noktası 80'e bağlama yöntemini bulmaya çalışıyorum. Sorum, temel olarak "Is there a way for non-root processes to bind to "privileged" ports (<1024) on Linux?" ile aynı, ancak bunu Rails ile yapmam gerekiyor. Şu anda, başvurulan sorudaki en önemli iki yanıt, CAP_NET_BIND_SERVICE iznini Ruby yorumlayıcısına (muhtemelen iyi bir fikir değil) veya sunucuyu başlattıktan sonra (I'm not sure is possible with Ruby) sunucuya bırakma izni vermemi şart koşmaktadır. Herhangi bir fikir?Bir Rails sunucusunu Linux'ta bağlantı noktası 80'e bağlamadan, bağlantı noktası

+1

80 numaralı bağlantı noktasından geleneksel bir web sunucusu çalıştırma ve istekleri başka bir bağlantı noktasında çalışan bir Rails sunucusuna iletme seçeneğiniz var mı? Örneğin, [nginx] (http://wiki.nginx.org/Main) çalıştırmak ve istekleri [ince] (http://code.macournoyer.com/thin/) veya [unicorn] (http: //) olarak yönlendirmek unicorn.bogomips.org/) ayrıcalıklı olmayan bir bağlantı noktasında çalışıyor. –

+0

Bunu yapmak istediğiniz olasılıklar son derece düşük. Normal kullanım kalıplarında Ruby, Ruby olmayan bir sunucunun arkasında ince, Mongrel, Puma, Unicorn veya başka bir şey olması gerekir. [Bu soru] konusuna bakın (http://stackoverflow.com/questions/15469598/why-thin-behind-nginx). – colinm

+0

Evet, bu benim için sunucuyu kurmak için bir başkasının yardımı olmadan veya bir PaaS gibi Heroku; Yani istediğimi bilmediğim iyi bir şans var. Bağlantı noktası 80 üzerinde ince bir bağlantıya alternatif bir seçenek öneren ayrıntılı bir yanıt göndermeniz (eğer yorumunda Jim'in söylediği gibi nginx gibi) geçerli bir yanıt olarak kabul ediyorum. – Ajedi32

cevap

4

Temel olarak, cevap siz değilsiniz. Bu işi yapmak için gerçekten çok şanslı bir yol var, ancak bunu yapmak istediğiniz gerçekler aşırı derecede düşük. Bunun yerine, Rails'i ayrıcalıklı olmayan bir bağlantı noktasında çalıştırın ve Rails'e yönlendirmek için nginx gibi gerçek bir web sunucusu kurun. senin altyapı daha esnek hale getirir, çünkü

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; 
    } 
} 

Bu çözüm aynı zamanda daha uzun süreli geçerli: son derece basit bir örnek olarak

, nginx ile sen şuna benzer bir yapılandırma dosyası kullanabilirsiniz. Örneğin, uygulamanızı birden fazla makineye ölçeklendirmeniz gerekiyorsa, nginx'i yük dengeleyici olarak kullanabilir ve farklı makinelerde çalışan bir grup Rails sunucusuna isteklerini iletebilirsiniz.

İlgili konular