Nginx配合uGIGI和Django用作应用程序网关
本文介绍了如何将NGINX或NGINX Plus用作uWSGI和Django的应用程序网关。
- 介绍
- 关于uWSGI和Django
- 配置NGINX和NGINX Plus以与uWSGI和Django一起使用
- 结论
- 资源资源
介绍
NGINX是高性能,可伸缩,安全和可靠的Web服务器和反向代理。NGINX支持所有主要的Web加速技术来管理HTTP连接和流量。多年来,NGINX功能(如负载平衡,SSL终止,连接和请求策略,静态内容卸载以及内容缓存)已帮助NGINX用户快速有效地构建可靠,快速的网站。
NGINX还可以充当安全的应用程序网关,提供许多专用的内置接口,以将流量从用户传递到应用程序。在这方面,NGINX不仅可以将HTTP和HTTPS流量代理到启用HTTP的应用程序容器,还可以通过在FastCGI,Memcached等模块中实现的优化的应用程序网关接口直接与大多数流行的轻量级应用程序服务器和Web框架进行通信。,scgi和uwsgi。
大多数常用的应用程序容器具有具有某些路由功能的嵌入式外部HTTP接口,但是将NGINX用作应用程序网关的一个重要原因是,它为HTTP连接管理,负载平衡,内容缓存和流量提供了一个一体化的解决方案。安全。应用程序后端安全地位于NGINX后面,以提供更好的可伸缩性和性能。将应用程序实例群集在NGINX后面以构建高可用性应用程序也非常容易。
关于uWSGI和Django
关于“专用接口”的几句话。HTTP一直有用,但从未针对现代的轻量级应用程序部署方案进行过优化。近年来,已开发出许多用于各种应用程序框架和应用程序容器的标准化接口。这些接口之一是Web服务器网关接口(WSGI),它是Web服务器/代理和基于Python的应用程序之间的接口。
提供uwsgi协议(它自己的WSGI协议实现)的最常用的应用程序服务器之一是uWSGI应用程序服务器容器。
除此之外,uWSGI应用程序服务器还支持HTTP,FastCGI和SCGI –建议使用uwsgi协议作为与应用程序进行通讯的最快方式。
配置NGINX和NGINX Plus以与uWSGI和Django一起使用
本文档提供了一个示例,说明如何配置NGINX和NGINX Plus与uWSGI服务器和Python开发环境一起使用。
NGINX 0.8.40和更高版本(以及NGINX Plus的所有发行版)都提供了本机支持,可通过uwsgi协议将流量从用户传递到Python应用程序。如果您从我们的官方资源库或从客户门户网站下载NGINX开源二进制文件或源代码,或从客户门户网站下载NGINX Plus,则无需执行任何操作即可启用对uwsgi协议的支持-默认情况下,NGINX和NGINX Plus支持uswgi。
配置uWSGI应用程序容器本身不在本文档的讨论范围之内;有关更多信息,请参阅出色的Python / WSGI应用程序快速入门。
Django可能是最常用的Python Web框架,因此,为简单起见,该示例为Python应用程序使用了基于Django的设置。在Django文档提供了有关如何配置一个Django环境的大量信息。
仅出于说明目的,这是您可以使用Django调用uWSGI服务器的一种方式:
# /usr/local/sbin/uwsgi \
--chdir=/var/django/projects/myapp \
--module=myapp.wsgi:application \
--env DJANGO_SETTINGS_MODULE=myapp.settings \
--master --pidfile=/usr/local/var/run/uwsgi/project-master.pid \
--socket=127.0.0.1:29000 \
--processes=5 \
--uid=505 --gid=505 \
--harakiri=20 \
--max-requests=5000 \
--vacuum \
--daemonize=/usr/local/var/log/uwsgi/myapp.log
有了这些选项后,以下是用于Django项目的NGINX示例配置:
http {
# ...
upstream django {
server 127.0.0.1:29000;
}
server {
listen 80;
server_name myapp.example.com;
root /var/www/myapp/html;
location / {
index index.html;
}
location /static/ {
alias /var/django/projects/myapp/static/;
}
location /main {
include /etc/nginx/uwsgi_params;
uwsgi_pass django;
uwsgi_param Host $host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
}
}
}
请注意,该配置定义了一个名为django的上游。组中服务器上的端口号29000与uWSGI服务器绑定的端口号匹配,如socketsample uwsgi命令中的参数所指定。
静态内容的服务已卸载到NGINX或NGINX Plus,后者直接从/ var / django / projects / myapp / static提供服务。代理到/ main处的应用程序的流量,并将其从HTTP桥接到uwsgi协议,并传递到在uWSGI应用程序容器中运行的Django应用程序。
结论
轻巧的异构应用程序环境正成为构建和部署现代Web应用程序的一种越来越流行的方式。诸如uwsgi和FastCGI之类的更新的标准化应用程序接口协议可实现用户与应用程序之间的更快通信。
在应用程序容器的前面使用NGINX和NGINX Plus已成为一种使应用程序摆脱HTTP流量管理负担,保护应用程序免受用户流量,恶意行为和拒绝服务(DoS)意外高峰的常见方法。攻击等等。与实际应用程序解除捆绑的外部HTTP流量使开发人员可以完全专注于应用程序逻辑,而将Web加速和基本HTTP流量安全任务留给NGINX或NGINX Plus。
##资源
- uWSGI项目文档中的NGINX 支持
- 如何在Django项目文档中将Django与uWSGI一起使用