NGINX trong trường hợp này chỉ hoạt động như một proxy ngược, nó nhận được yêu cầu và ủy quyền chúng đến máy chủ ứng dụng, đó sẽ là UWSGI.
Máy chủ UWSGI chịu trách nhiệm tải ứng dụng Flask của bạn bằng giao diện WSGI. Bạn thực sự có thể làm cho UWSGI lắng nghe trực tiếp các yêu cầu từ internet và loại bỏ NGINX nếu bạn thích, mặc dù nó chủ yếu được sử dụng sau một proxy ngược.
Từ docs:
uWSGI hỗ trợ một số phương pháp tích hợp với các máy chủ web. Nó cũng có khả năng tự phục vụ các yêu cầu HTTP.
WSGI chỉ là một đặc tả giao diện, trong điều kiện đơn giản, nó cho bạn biết bạn nên triển khai phương pháp nào để chuyển yêu cầu và phản hồi giữa máy chủ và ứng dụng.Khi sử dụng các khuôn khổ như Flask hoặc Django, điều này được xử lý bởi chính khung công tác đó.
Nói cách khác, WSGI về cơ bản là một hợp đồng giữa các ứng dụng python (Flask, Django, vv) và máy chủ web (UWSGI, Gunicorn, v.v.). Lợi ích là bạn có thể thay đổi máy chủ web với ít nỗ lực vì bạn biết chúng tuân thủ đặc tả của WSGI, đây thực sự là một trong những mục tiêu, như đã nêu trong PEP-333.
Hiện tại Python tự hào có nhiều khung ứng dụng web khác nhau, chẳng hạn như Zope, Quixote, Webware, SkunkWeb, PSO và Twisted Web - chỉ cần một vài [1]. Sự lựa chọn đa dạng này có thể là vấn đề đối với người dùng Python mới, vì nói chung, lựa chọn khung web của họ sẽ giới hạn lựa chọn máy chủ web có thể sử dụng của họ và ngược lại
Có thể chạy các ứng dụng Flask với Werkzeug như một máy chủ HTTP, nhưng nó không phải là thiết lập sẵn sàng sản xuất. uWSGI giải quyết nhiều vấn đề: * HTTP phân tích cú pháp (nhanh hơn trong C) và giao tiếp với ứng dụng WSGI * khởi chạy ứng dụng trong nhiều quy trình/đề cho đồng thời tốt hơn * đóng vai trò như một người giám sát các ứng dụng WSGI –