nginx + uwsgi + django

第一:

django保证runserver,网站正常访问,ok

第二: 

先说明uwsgi地址监听有三种模式,http监听,http-socket监听

这两种数据传输协议不一样,但是ngixn proxy设置一样都是proxy_pass http://127.0.0.1:8000,这是因为,他们都是基于http的请求

 

此外 socket模式,虽然很少见,但是很简单;此模式又分为两种模式:

        一个是监听ip地址,属于tcp 套接字,uwsgi中socket = 127.0.0.1:8000,nginx中使用 uwsgi_pass 127.0.0.1:8000

        另一个是监听unix socket文件,属于unix套接字,uwsgi 中使用socket=/tmp/uwsgi.socket

nginx中对应的是uwsgi_pass unix:///tmp/uwsgi.socket

这里也要注意:socket文件一定要放在/var/run 目录或者/tmp目录中,才能用,这两个是公共目录,如果放在用户目录,即便是root用也不能读写套接字的文件。

第三:

在linux中,不要使用apt安装的uwsgi,如果要使用请看清楚

uwsgi --version

如果是和python pip安装的uwsgi不同版本的话,是肯定不兼容的。(都是泪)

比如我的python env中使用uwsgi是2.0.26

而debian中的uwsgi是2.0.21-debian

没注意这个问题,调试了两天,不知道为什么外部访问不成功。(哭死)

第四:

一个是:如果是调试uwsgi,直接使用

uwsgi --http :80 --module 或者 --wsgi-file ******

但是,必须要在django project的根目录执行才能管用 

一个是:uwsgi.ini文件

在发布时,还没到发布为service时,我们肯定是要创建uwsgi运行的ini配置文件来快速启动uwsgi服务的,这个地方注意,如果uwsgi启动以后觉得有问题,systemctl是无法关闭它的,需要使用

pkill -f uwsgi -9

会关闭所有uwsgi进程,如果要查看当前有没有uwsgi服务运行

lsof -U |grep uwsgi

话说回来,ini文件里写明python环境路径,和django project的根目录,怎么写就不说了。

容易出错的步骤是设置wsgi-file 或者module的时候,这两个作用是相同的,只是一个是文件路径的方式,一个是以包引用的方式,选一个即可

wsgi-file=proj_name/wsgi.py
module=proj_name.wsgi

在一个就是,以system.service的形式,发布uwsgi服务,这里,大家就自己探索一下吧

最后

再强调一点,uwsgi不是以root运行,因为你开发的时候不可能是用root用户开发的,所以在操作uwsgi进程时,不需要sudo,创建service时也不是root用户和root组。

而nginx是运行在root下的,这也是为什么socket文件要放在var和tmp公共目录。

还有小朋友会问,反正我都是一台服务器,为什么还要nginx搭配uwsgi,而不是直接用uwsgi发布。

答:一方面,uwsgi一般不是以root运行,所以没有权限监听80端口

另一方面,uwsgi没有控制流量的闸门,就是说无法限制总访问量,无法设置单ip连接数等一些控制访问进入的功能。这些专业的事情,交给专业的代理服务器框架nginx去做

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值