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ì?
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ì?
Câu trả lời:
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:
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".
log
gó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 đó.
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 đó.
Bộ công cụ web Gorilla cung cấp cho bạ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/http
cá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/http
nếu tôi biết mình có thể cắm CDN vào.
Tôi nghĩ net/http
có máy chủ HTTP mạnh nhất trong bất kỳ thư viện tiêu chuẩn nào.
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."