Ich versuche eine Möglichkeit zu finden, meinen Produktions-Rails-Server an Port 80 zu binden, ohne den gesamten Server mit Root-Rechten ausführen zu müssen. Meine Frage ist im Grunde die gleiche wie "Is there a way for non-root processes to bind to "privileged" ports (<1024) on Linux?", außer dass ich dies mit Rails machen muss. Gegenwärtig verlangen die ersten beiden Antworten in der Frage, auf die ich verwiesen habe, dass ich dem Ruby-Interpreter die Berechtigung CAP_NET_BIND_SERVICE
(wahrscheinlich keine gute Idee) gewähre oder Root-Privilegien nach dem Start des Servers verlasse (welche I'm not sure is possible with Ruby). Irgendwelche Ideen?Binden eines Rails-Servers an Port 80 unter Linux, ohne ihn als root auszuführen
Antwort
Also im Grunde ist die Antwort, die Sie nicht tun. Es ist möglich, dass es einige wirklich hacky Wege gibt, dies zu tun, aber die Chancen, dass Sie das wirklich tun wollen, sind äußerst gering. Führen Sie stattdessen Rails an einem nicht privilegierten Port aus, und richten Sie einen echten Webserver wie nginx ein, um ihn an Rails weiterzuleiten.
Als super-einfachen Beispiel mit nginx können Sie eine Konfigurationsdatei verwenden, die etwa wie folgt aussieht:
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;
}
}
Diese Lösung ist auch eine bessere langfristige, denn es macht Ihre Infrastruktur flexibler. Wenn Sie beispielsweise Ihre Anwendung auf mehrere Computer aufrüsten möchten, können Sie nginx als Load-Balancer verwenden und Anforderungen an eine ganze Reihe von Rails-Servern weiterleiten, die auf verschiedenen Computern ausgeführt werden.
- 1. Binden Sie einen Webserver an Port 80, ohne root zu sein
- 2. Binden eines Sockets an Port 80 in ansic
- 3. OpenCL unter Linux ohne Root-Rechte installieren
- 4. Ist es notwendig, jstack -F als root auszuführen (unter Linux) und wenn ja, warum?
- 5. Binden eines SSL-Zertifikats an einen Port programmgesteuert
- 6. Tomcat Webapp auf Port 80
- 7. Mochiweb Port 80
- 8. Wie verfolgt man ein Programm von Anfang an, ohne es als root auszuführen
- 9. Debugging in XCode als root
- 10. kann nicht auf Port 80 binden, aber ohne Probleme auf die aktuelle Shell Arbeiten laufen
- 11. Reactive Native auf Port 80
- 12. Port 80 Weiterleitung - keine CSS oder Bilder
- 13. Welche Website unterstützt http/2 auf Port 80 ohne SSL?
- 14. überprüfen, ob Port 80 verweigert wird?
- 15. Wie node.js als Nicht-Root-Benutzer ausführen?
- 16. Android-Anwendung fehlgeschlagen Verbindung zu Port 80
- 17. Festlegen von virtuellen Hosts in xampp linux für einen anderen Port als 80 (Debian 6.0.4)
- 18. org.springframework.boot.context.embedded.PortInUseException: Port 80 wird bereits verwendet
- 19. Tomcat7 Bindung an Port 80 schlägt in Ubuntu fehl 14.04LTS
- 20. Verwenden Organisationen jemals SharePoint auf einem anderen Port als 80?
- 21. Scannen eines gesamten IP-Bereichs/Subnetzes für Port 80 offen?
- 22. Install gcc auf Linux ohne Root-Berechtigung
- 23. Wie Port 80 zu 80 auf Vagrant Homestead weitergeleitet wird
- 24. Nginx funktioniert nicht auf Port 80
- 25. Wie kann ein Webserver mehrere eingehende Anfragen eines Benutzers gleichzeitig an einem einzigen Port (80) verarbeiten?
- 26. Spring Boot läuft App auf Port 80
- 27. make_sock: konnte nicht an Adresse 0.0.0.0:80
- 28. os.system() verwenden, um einen Befehl ohne Root auszuführen
- 29. PayPal IPN auf Port außer 80
- 30. Anwendung an mehrere Linux-Terminals binden
Haben Sie die Möglichkeit, einen herkömmlichen Webserver auf Port 80 auszuführen und die Anforderungen an einen Rails-Server weiterzuleiten, der auf einem anderen Port ausgeführt wird? Zum Beispiel: [nginx] (http://wiki.nginx.org/Main) ausführen und Anfragen an [thin] (http://code.macournoyer.com/thin/) oder [Einhorn] (http: // unicorn.bogomips.org/) läuft auf einem nicht-privilegierten Port. –
Die Chancen, die Sie tatsächlich wollen, sind extrem niedrig. Thin, Mongrel, Puma, Unicorn oder was auch immer hinter einem Nicht-Ruby-Server in normalen Nutzungsmustern stehen sollte. Siehe [diese Frage] (http://stackoverflow.com/questions/15469598/why-thin-behind-nginx). – colinm
Ja, das ist das erste Mal, dass ich tatsächlich versucht habe, eine Produktionsanwendung selbst ohne die Hilfe von jemand anderem zu implementieren, um den Server für mich einzurichten, oder ein PaaS wie Heroku; also besteht eine gute chance, dass ich nicht weiß, dass ich will. Wenn Sie eine ausführliche Antwort posten möchten, die eine Alternative zum Binden von Thin an Port 80 vorschlägt (wie nginx, wie Jim in seinem Kommentar sagte), würde ich das als gültige Antwort akzeptieren. – Ajedi32