nginx + uwsgi 部署 django 应用初探索


nginx 是一个市面上流行的服务器软件,它的主要功能有:作为静态资源的 web 服务器、反向代理、负载均衡。

nginx + uwsgi 部署 django 应用的原理

我们将从用户输入 url 开始,用一个完整的例子过一遍 nginx + uwsgi 部署 django 应用时背后发生的一系列故事。

用户在客户端(浏览器)中输入域名example.comexample.com经过 DNS 域名解析变成 ip 地址 12.34.56.78。于是客户端会与该 ip 地址进行三次握手,然后发送 http 请求,假设请求的路径是/home/

假定服务器上安装并运行了 nginx,且配置文件nginx.conf的内容如下所示:

server {
    listen 80;
    server_name example.com;

    # 静态文件处理
    location /static/ {
        alias /var/www/static/;  # 指向静态文件目录
    }

    # 动态请求处理
    location / {
        include uwsgi_params;  # 包含 uWSGI 的参数
        uwsgi_pass 127.0.0.1:8001;  # 转发请求到 uWSGI 监听的地址
    }
} 
  • listen 80;: 即监听 80 端口,http 请求默认会抵达 80 端口
  • location /static/: 如果请求路径以/static/返回,则 nginx 会直接从指定的静态资源目录加载文件并返回
  • location /: 如果上述规则不匹配(请求的不是静态资源),则 nginx 会将请求转发给运行在本地127.0.0.1:8001的 uwsgi 服务

uwsgi 是 nginx 与 django 之间的桥梁,它接收 nginx 发送的请求并将其转发给 django 进行处理。进入到 django 项目中manage.py所在文件夹,执行uwsgi --http :8001 --module mysite.wsgi来启动 django 项目并监听 8001 端口,nginx 将会把请求转发到这个端口。

于是请求就通过 uwsgi 成功来到了 django 中,django 根据定义的路由匹配规则和视图,处理/home/并将响应返回给 uwsgi,uwsgi 封装之后再交给 nginx,nginx 再将其返回给客户端。

正向代理与反向代理

先给出一个表格总结二者的不同:

正向代理 (Forward Proxy)反向代理 (Reverse Proxy)
作用代理客户端发送请求代理服务器接收请求
服务对象客户端服务器
隐藏的对象隐藏客户端隐藏服务器
示例应用VPN、Shadowsocks 等Nginx、Apache等
客户端是否知道目标服务器客户端知道目标服务器地址客户端不知道目标服务器地址
典型场景当用户访问受限,无法访问 google 时,通过正向代理服务(如 VPN),就能够将请求先发送到代理服务器,然后由代理服务器转发请求给 google通常而言企业的网站流量很高,有多台后端服务器负责处理请求。把 Nginx 作为反向代理,客户端请求会先到 Nginx,然后由 Nginx 按照负载均衡算法将请求分发给后端服务器

举个形象化的例子你就明白二者的区别了:

正向代理:

假如 A 喜欢 C,但是 A 比较怂不敢当面给 C 表白,恰好 A 知道自己有一个和 C 共同的朋友 B,于是就托 B 告诉 C:“我有一个好朋友喜欢你,托我向你表白,这是他托我给你的花。” C 见状,直接拒绝,心想,好家伙,连表白都托别人来表,这种人我怎么可能答应。

回顾上面的整个过程,A 就好像客户端,C 是服务器,B 是正向代理服务器。A 知道自己要表白的对象是 C,而 C 甚至都不知道(这种情况下确实也不需要知道,大家表白还是要鼓起勇气自己去哇)真正向自己发起请求的人是谁,只知道它是借助 B 来向自己发起请求的。

所以正向代理的作用就是代理客户端发起请求,它向服务端隐藏了真正的客户端,而客户端是知道目标服务器的。

反向代理:

A 始终没能战胜心魔当面表白,在 TA 之后再也没有遇到自己喜欢的人,于是只能寄希望于婚恋市场。这天,A 进入一家相亲所 D,向前台投递了自己的简历和预期对象。D 按照筛选流程从众多候选人中找到了可能合适的人 E,E 把自己的意愿告诉给 D,再由 D 转交给 A。

在上面这个过程中,A 依然是客户端,E 是服务器,D 是反向代理服务器。A 不知道 D 会把自己的请求发送给哪个人,这就对应了反向代理能够向客户端隐藏目标服务器,它代表目标服务器来接受客户端的请求。

Mac 上 nginx 相关命令

# 安装 nginx
brew install nginx
# 启动 nginx
brew services start nginx
# 关闭 nginx
brew services stop nginx
# 重启 nginx
brew services restart nginx

使用brew info nginx查看用 homebrew 安装的 nginx 的配置文件的默认地址为:/opt/homebrew/etc/nginx/nginx.conf

通常而言修改了nginx.conf文件后,需要执行ngxin -t来测试修改后的文件是否有误,同时还能够查看 nginx 配置文件的路径;若无误则执行nginx -s reload来重新加载配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值