uwsgi配置https以及python2无法使用supervisor

Introduction

前面的nginx配置https一文,说明了如何在nginx上配置https,本文则作为补充,说明了在pyhon flask 或者django等web框架下,怎么配置https,以及nginx 和uWSGI的搭配。

1. 配置https

理论上,直接在nginx的站点配置文件中,声明 well-known
文件夹的特殊访问权限即可:

location ^~ /.well-known {
	allow all;
}

但是在实际使用中,在我怎么修改配置文件也不能成功以后,发现其实只要明白certbot的验证,实际上是从外部对 http://your_domain/.well-known/acme-challenge/some_token_value
的访问之后,就可以直接在你的项目里,解析这个地址即可,以python flask为例:

@main.route('/.well-known/acme-challenge/')
def letsencrpyt(token_value):
    with open('.well-known/acme-challenge/{}'.format(token_value)) as f:
        answer = f.readline().strip()
    return answer

注意这里直接open .well-known,没有写全路径,你也可以写全路径。

2. nginx 配置uWSGI

2.1 uwsgi uWSGI WSGI nginx

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

WSGI vs uwsgi(小写) vs uWSGI ?

uwsgi同WSGI一样是一种通信协议,而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

有了uWSGI为什么还需要nginx?

nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。

2.2 uWSGI安装使用

2.2.1 uWSGI配置文件

pip3 install uwsgi
后,根据你的项目编写config文件:

[uwsgi]
; 执行的启动文件
wsgi-file = manage.py
; 对应 manage.py 的同名全局变量,是一个 Flask app
callable = app
; 虚拟环境的文件夹,如果没有使用虚拟环境,注释掉即可
;venv = /root/DownloadYoutube/venv
; 启动 socket监听
socket = 0.0.0.0:5001

注意如果你想提前测试自己的项目,将最后的socket监听改成http,即可直接通过uWSGI建立起http服务器。作为socket监听是因为需要和nginx配合。

2.2.2 配置nginx

在nginx中配置部分如下:

# 由于使用的是uwsgi,所以需要将数据转发过去。如果是lnmp之类安装,则这里默认没有下面特殊的规则
	location / {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:5001; 
        uwsgi_param UWSGI_CHDIR  /root/DownloadYoutube;
        uwsgi_param UWSGI_SCRIPT manage:app; 
      }

2.2.3重启服务

如果你修改了项目代码,需要重启uwsgi服务,网上一般是:

kill -HUP `cat /tmp/project-master.pid`

当然这里的pid是你uwsgi进程的pid。

而且大家都在用仍然不支持python3的supervisor,我建议学一学简单的systemd语法,写一个后台service,就可以通过 systemctl restart your_project.service
来重启了以及进程自动重启了。

我的 /lib/systemd/system/findyoutube.net.service
文件内容如下:

[Unit]
Description=findyoutube.net website
# 指定了在nginx启动后再启动,这个非必需
After=nginx.target 

[Service]
Type=simple
# pid文件地址,自己指定即可
PIDFile=/run/findyoutube.net.pid
# 执行的uwsgi命令
ExecStart=/usr/local/bin/uwsgi /root/DownloadYoutube/uwsgi_conf.ini
ExecReload=/usr/local/bin/uwsgi --reload /run/findyoutube.net.pid
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/findyoutube.net.pid
TimeoutStopSec=3
KillMode=mixed

[Install]
WantedBy=multi-user.target

启动服务,添加开机启动项:

pkill uwsgi
systemctl start findyoutube.net.service
systectl enable findyoutube.net.service

Reference

uWSGI笔记——概念篇

部署Flask + uWSGI + Nginx

重启uwsgi的几种方法

FindSpace稿源:FindSpace (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » uwsgi配置https以及python2无法使用supervisor

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录