Lợi ích của việc sử dụng Nginx trước máy chủ web dành cho Go là gì? [đóng cửa]


84

Tôi đang viết một số dịch vụ web trả về dữ liệu JSON, có rất nhiều người dùng.

Lợi ích của việc sử dụng Nginx trước máy chủ của tôi so với chỉ sử dụng máy chủ go http là gì?


fyi, có rất nhiều lỗi tcp như thiết lập lại kết nối bởi máy ngang hàng và thời gian chờ i / o khi sử dụng máy chủ Go http để xử lý dịch vụ 100s yêu cầu POST lớn trong một phút. Đặt nginx trước nó - không còn vấn đề gì nữa.
Peter Kelly,

Cuối cùng, tôi quyết định sử dụng máy chủ Go http, không có NGINX và nó hoạt động rất tốt. Tôi đã không chạy trong bất kỳ vấn đề. Nhưng dịch vụ của tôi không chạy các yêu cầu POST lớn như trong trường hợp của bạn.
Daniele B

20
ĐÂY KHÔNG PHẢI LÀ Ý KIẾN CẦN THIẾT. Kết thúc nó như vậy cho thấy sự thiếu hiểu biết nghiêm trọng về các cân nhắc và cảnh báo mà câu trả lời cho một câu hỏi như vậy có thể điền và cung cấp. Câu trả lời được chọn là một ví dụ tuyệt vời. Trên thực tế, tôi thấy những cân nhắc mới có liên quan trong tất cả các câu trả lời được cung cấp.
vee_ess

Câu trả lời:


135

Nó phụ thuộc.

Ngoài ra, đặt nginx ở phía trước làm proxy ngược sẽ cung cấp cho bạn:

  • Truy cập nhật ký
  • Nhật ký lỗi
  • Kết thúc SSL dễ dàng
  • SPDY hỗ trợ
  • hỗ trợ gzip
  • Các cách dễ dàng để đặt tiêu đề HTTP cho các tuyến đường nhất định trong một vài dòng
  • Phân phối nội dung tĩnh rất nhanh (nếu bạn đang phân phối ngoài S3 / v.v., điều này không liên quan)

Máy chủ Go HTTP rất tốt, nhưng bạn sẽ cần phải phát minh lại bánh xe để thực hiện một số điều này (điều đó ổn: nó không có nghĩa là tất cả mọi thứ cho tất cả mọi người).

Tôi luôn thấy rằng việc đặt nginx ở phía trước dễ dàng hơn — đó là những gì nó giỏi — và để nó làm công việc "máy chủ web". Ứng dụng Go của tôi thực hiện các nội dung ứng dụng và chỉ tối thiểu tiêu đề / v.v. mà nó cần. Đừng coi việc đặt nginx lên trước là một điều "xấu".


Cảm ơn vì đã trả lời! - 1) Go HTTP có tạo ra một số loại nhật ký không? - 2) nginx có làm giảm bằng cách nào đó thông lượng yêu cầu / phản hồi không?
Daniele B

3
@DanieleB Máy chủ Go HTTP chỉ tạo ra các bản ghi mà bạn muốn (tức là sử dụng loggói). Nếu bạn muốn ghi địa chỉ IP, quyền truy cập tài nguyên, v.v., bạn sẽ cần phải viết điều đó. Tương tự với việc đặt tiêu đề, ngoài những điều cơ bản. Mặc dù tôi không có bất kỳ dữ liệu cụ thể nào, nhưng nginx trước Go thực sự không chậm hơn Go: trên thực tế, nó có thể nhanh hơn nhờ gzip và những tối ưu hóa của riêng nó. "Chi phí" sẽ là sử dụng nhiều bộ nhớ / CPU hơn, nhưng nginx cũng rất hiệu quả trên mặt trận đó.
elithrar

16
Một tính năng lớn nữa: Bạn sẽ nâng cấp / bảo trì ứng dụng của mình như thế nào (mà không làm rơi gói khi nó bị hỏng)? Nginx sẽ cho phép bạn điều khiển lưu lượng truy cập mà không làm mất các gói tin.
BraveNewCurrency

+1, Nginx đang ở vị trí của riêng mình.
Anatoly

3
Trên Raspberry Pi của tôi, việc đặt Nginx trước Go đã làm tăng đáng kể tốc độ tải trang.
425 thứ

17

Máy chủ http tiêu chuẩn của Go là tốt. Nếu ứng dụng của bạn chủ yếu / chỉ là các yêu cầu / phản hồi "động", thì đó thực sự là cách tốt nhất.

Bạn có thể sử dụng nginx để phân phát các nội dung tĩnh, nhưng rất có thể là Go tiêu chuẩn cũng tốt cho điều đó. Nếu bạn cần hiệu suất cao hơn, bạn chỉ nên sử dụng CDN hoặc bộ nhớ cache nhiều nhất có thể với Varnish (ví dụ).

Nếu bạn cần cung cấp các ứng dụng khác nhau trên cùng một địa chỉ IP, nginx là một lựa chọn tốt cho proxy để phân phối các yêu cầu giữa các ứng dụng khác nhau; mặc dù tôi thường lấy Varnish hoặc HAProxy ra khỏi hộp công cụ cho những việc đó.


vâng, tôi thực sự chỉ sử dụng nó để phục vụ dữ liệu động. Vì vậy, tôi đoán tôi không cần NGINX sau đó! Cảm ơn trả lời của bạn
Daniele B

Varnish / HAProxy không bắt buộc, Nginx có bộ công cụ tương tự để lưu vào bộ nhớ đệm và cân bằng tải.
Anatoly

@mikhailov đó không phải là những gì tôi đã nói? nginx hoạt động tốt cho nó; mặc dù cá nhân tôi thường thích Varnish hoặc HAproxy. Tôi thấy chúng dễ cấu hình và vận hành hơn.
Hỏi Bjørn Hansen

5

Bộ công cụ web Gorilla cung cấp cho bạn:

  • Định tuyến nâng cao (giới hạn miền / miền phụ, khớp đường dẫn regex).
  • hỗ trợ gzip (thông qua trình xử lý phần mềm trung gian .)
  • Ghi nhật ký trình xử lý phần mềm trung gian xuất ra ở Định dạng nhật ký chung của Apache.
  • Cookie được mã hóa an toàn.
  • Phiên.
  • schema gói chuyển đổi các giá trị biểu mẫu thành một cấu trúc.

Điều này lấp đầy khoảng cách giữa net/httpcác máy chủ của Go và HTTP như NGINX.

Cá nhân tôi tránh cài đặt và định cấu hình một máy chủ HTTP khác net/httpnếu tôi biết mình có thể cắm CDN vào.

Tôi nghĩ net/httpcó máy chủ HTTP mạnh nhất trong bất kỳ thư viện tiêu chuẩn nào.


2

Từ https://blog.gopheracademy.com/caddy-a-look-inside/, có vẻ như Go có thể xử lý gzip, lỗi, tệp tĩnh, định tuyến và tiêu đề http bằng Middleware. Dòng bên dưới, từ blog, cho thấy cách bạn sẽ xử lý một yêu cầu như vậy.

logHandler(gzipHandler(fileServer))

Họ xử lý lỗi đăng nhập theo một cách thực sự thú vị. Miễn là phần mềm trung gian của bạn trả về mã lỗi (int), phần mềm trung gian xử lý lỗi sẽ tự động xử lý nó. Họ thậm chí còn đi xa đến mức cấu hình toàn bộ trang web trong Go giống như Nginx. "Tệp nginx.conf cho tất cả các trang web của Học viện Gopher dài hơn 115 dòng. Caddyfile tương đương chỉ có 50 dòng."

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.