Tôi đang cố gắng tìm cách liên kết máy chủ Rails sản xuất của mình với cổng 80 mà không phải chạy toàn bộ máy chủ với các đặc quyền root. Câu hỏi của tôi về cơ bản giống như "Is there a way for non-root processes to bind to "privileged" ports (<1024) on Linux?", ngoại trừ việc tôi cần phải làm điều này với Rails. Hiện tại, hai câu trả lời hàng đầu về câu hỏi mà tôi đã tham chiếu hoặc yêu cầu tôi cấp quyền CAP_NET_BIND_SERVICE
cho trình thông dịch Ruby (có thể không phải là một ý tưởng tốt) hoặc thả đặc quyền root sau khi khởi động máy chủ (I'm not sure is possible with Ruby). Bất kỳ ý tưởng?Ràng buộc một máy chủ Rails vào cổng 80 trên Linux mà không cần chạy nó như là root
5
A
Trả lời
4
Vì vậy, về cơ bản, câu trả lời là bạn không. Có thể có một số cách thực sự khó khăn để thực hiện công việc này, nhưng tỷ lệ cược mà bạn thực sự muốn làm điều này là cực kỳ thấp. Thay vào đó, hãy chạy Rails trên một cổng không có đặc quyền và thiết lập một máy chủ web thực sự như nginx để chuyển tiếp tới Rails.
Như một ví dụ siêu đơn giản, với nginx bạn có thể sử dụng một tập tin cấu hình mà trông giống như sau:
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;
}
}
Giải pháp này cũng là tốt hơn dài hạn, bởi vì nó làm cho cơ sở hạ tầng của bạn linh hoạt hơn. Ví dụ, nếu bạn cần mở rộng ứng dụng của bạn lên nhiều máy, bạn có thể sử dụng nginx như một bộ cân bằng tải và chuyển tiếp các yêu cầu tới một loạt các máy chủ Rails chạy trên các máy khác nhau.
Các vấn đề liên quan
- 1. Máy chủ web trên cổng 80 trên iPhone
- 2. Ràng buộc ổ cắm vào cổng 80 trong ansi c
- 3. Chuyển tiếp cổng từ Cổng máy chủ 80 sang cổng VirtualBox 80 không hoạt động
- 4. Chạy Sinatra trên cổng 80
- 5. Docker Soạn không ràng buộc cổng
- 6. Tomcat webapp trên cổng 80
- 7. Tại sao wont Web.py cho phép tôi chạy máy chủ trên cổng 80?
- 8. nginx không nghe cổng 80
- 9. Ràng buộc cổng Python
- 10. Tại sao tôi không nên chạy phần mềm máy chủ không phải của tôi trên cổng 80?
- 11. Chạy ứng dụng React mà không cần máy chủ
- 12. Chạy máy chủ Tomcat trên hai cổng khác nhau
- 13. Rails console chạy mà không cần nhắc
- 14. Chạy Mstest.exe mà không cần máy chủ nền tảng nhóm.
- 15. Cài đặt gói python mà không cần truy cập root
- 16. Rails 4.2 Chuyển tiếp cổng máy chủ trên Vagrant không hoạt động
- 17. Không thể kết nối với máy chủ Rails chạy trên EC2 từ IP công cộng
- 18. Làm thế nào để chạy Elasticsearch 2.1.1 là người dùng root trong máy Linux
- 19. Cổng Mochiweb 80
- 20. Máy chủ mysqld khác đang chạy trên cổng 3306 lỗi
- 21. chạy máy chủ http node.js trên nhiều cổng
- 22. Làm thế nào để chạy laravel 5 trên cổng 80 của localhost?
- 23. Toàn bộ điểm "localhost", máy chủ và cổng là gì?
- 24. Có thể chạy một máy chủ socket và máy khách socket trên cùng một máy không?
- 25. Không thể khởi động máy chủ: Ràng buộc trên cổng TCP/IP: Không thể gán địa chỉ được yêu cầu
- 26. Tường lửa của khách hàng chặn tất cả các cổng nhưng 80 và 443, cần phải chuyển tiếp các yêu cầu trên cổng 443 sang SSH hoặc HTTPS
- 27. Tường lửa của máy chủ web có chặn lưu lượng HTTP đi qua cổng 80 không?
- 28. Có thể chạy tập lệnh Selenium mà không cần chạy máy chủ X không?
- 29. Chạy các kịch bản lệnh bằng vải như là root
- 30. Định tuyến AngularJS mà không cần máy chủ web
Bạn có tùy chọn chạy máy chủ web truyền thống trên cổng 80 và chuyển tiếp các yêu cầu đến máy chủ Rails đang chạy trên cổng khác không? Ví dụ: chạy [nginx] (http://wiki.nginx.org/Main) và gửi yêu cầu đến [thin] (http://code.macournoyer.com/thin/) hoặc [unicorn] (http: // unicorn.bogomips.org/) chạy trên một cổng không có đặc quyền. –
Các tỷ lệ cược bạn thực sự muốn làm điều này là cực kỳ thấp. Thin, Mongrel, Puma, Unicorn, hoặc bất cứ thứ gì khác nên ở phía sau một máy chủ không phải Ruby trong các mẫu sử dụng bình thường. Xem [câu hỏi này] (http://stackoverflow.com/questions/15469598/why-thin-behind-nginx). – colinm
Vâng, đây là lần đầu tiên tôi thực sự cố gắng triển khai một ứng dụng sản xuất mà không cần sự giúp đỡ của người khác để thiết lập máy chủ cho tôi, hoặc một PaaS như Heroku; vì vậy có một cơ hội tốt mà tôi không biết tôi muốn. Nếu bạn muốn đăng câu trả lời chi tiết cho thấy một giải pháp thay thế để gắn kết mỏng trên cổng 80 (như nginx, như Jim đã nói trong bình luận của mình), tôi chấp nhận đó là câu trả lời hợp lệ. – Ajedi32