2013-10-04 10 views
5

Sto cercando un modo per associare il mio server Rails di produzione alla porta 80 senza dover eseguire l'intero server con i privilegi di root. La mia domanda è fondamentalmente la stessa di "Is there a way for non-root processes to bind to "privileged" ports (<1024) on Linux?", tranne che ho bisogno di farlo con Rails. Attualmente, le prime due risposte sulla domanda che ho fatto riferimento mi impongono di concedere l'autorizzazione all'interprete Ruby (probabilmente non una buona idea) o di eliminare i privilegi di root dopo l'avvio del server (che è I'm not sure is possible with Ruby). Qualche idea?Associazione di un server Rails alla porta 80 su Linux senza eseguirla come root

+1

È possibile eseguire un server Web tradizionale sulla porta 80 e inoltrare le richieste a un server Rails in esecuzione su un'altra porta? Ad esempio, eseguendo [nginx] (http://wiki.nginx.org/Main) e indirizzando le richieste a [thin] (http://code.macournoyer.com/thin/) o [unicorn] (http: // unicorn.bogomips.org/) in esecuzione su una porta non privilegiata. –

+0

Le probabilità che tu voglia effettivamente farlo sono estremamente basse. Thin, Mongrel, Puma, Unicorn, o qualsiasi altra cosa dovrebbe essere dietro un server non Ruby nei normali schemi di utilizzo. Vedi [questa domanda] (http://stackoverflow.com/questions/15469598/why-thin-behind-nginx). – colinm

+0

Sì, questa è la prima volta che ho provato a distribuire un'applicazione di produzione da solo senza l'aiuto di qualcun altro per configurare il server per me, o un PaaS come Heroku; quindi c'è una buona possibilità che io non sappia che voglio. Se ti piacerebbe pubblicare una risposta dettagliata che suggerisca un'alternativa al binding thin sulla porta 80 (come nginx, come ha detto Jim nel suo commento), lo accetterei come una risposta valida. – Ajedi32

risposta

4

Quindi in sostanza, la risposta è che non lo fai. È possibile che ci sia un modo davvero hacky per farlo funzionare, ma le probabilità che tu voglia effettivamente farlo sono estremamente basse. Invece, esegui Rails su una porta non privilegiata e configura un vero server web come nginx da inoltrare a Rails.

Come esempio di super-semplice, con nginx è possibile utilizzare un file di configurazione che sembra qualcosa di simile:

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

Questa soluzione è anche meglio a lungo termine, perché rende l'infrastruttura più flessibile. Ad esempio, se è necessario ridimensionare l'applicazione su più macchine, è possibile utilizzare nginx come bilanciamento del carico e inoltrare richieste a un intero gruppo di server Rails in esecuzione su macchine diverse.

Problemi correlati