uwsgi启动django应用 https访问设置问题解决 & uwsgi: unrecognized option '--https' | ubuntu20.04

一般情况下,用uwsgi启动django项目,我们很多用http启动服务,也存在用https启动服务,本文介绍uwsgi设置https启动django项目。

总体来说,分以下几步:

  • 生成 key & crt 文件
  • 启动设置

1.生成key和crt文件

了解内容

# openssl genrsa
用于生成RSA私钥,不会生成公钥,因为公钥提取自私钥

# openssl req
根据私钥生成一个新的证书请求文件

# openssl x509
签署证书请求,生成证书,自签署证书,往往是通过req生成请求文件,在x509签署证书

通过openssl生成秘钥key和证书crt

生成key & crt

# 生成rsa秘钥,2048位
openssl genrsa -out foobar.key 2048

# 生成证书请求
openssl req -new -key foobar.key -out foobar.csr
# 具体交互见博主博文介绍openssl
# https://www.cnblogs.com/davis12/p/14410920.html

# 自行签署,输入证书请求,秘钥签名,输出证书,有效期:10年(自己设置)
openssl x509 -req -days 3650 -in foobar.csr -signkey foobar.key -out foobar.crt

2.uwsgi设置

分两种设置,一种是直接命令行的,另外一种就是通过ini文件设置。

2.1 命令行设置

uwsgi --master --https 0.0.0.0:8443,/root/test/ssl/foobar.crt,/root/test/ssl/foobar.key -w ./wsgi.py
# --master 设置主进程,默认1个worker

# --https 0.0.0.0:8443,/root/test/ssl/foobar.crt,/root/test/ssl/foobar.key 如果root用户,可以设置8443端口,指明路径下的证书和私钥,
# 第四个参数省略,详见博主博文介绍uwsgi的设置的
# https://www.cnblogs.com/davis12/p/14411643.html

# -w ./wsgi.py 指明wsgi文件路径,根据自己路径设置

uwsgi起来后:

2.2 ini文件设置

新建一个.ini文件,如uwsgi.ini,其中 https 项:

https = 0.0.0.0:8443,/root/test/ssl/foobar.crt,/root/test/ssl/foobar.key

启动命令:

uwsgi --ini uwsgi.ini

3.问题汇总

我用ini方式启动django项目后,编了个hello的视图函数做测试,

curl -k  https://127.0.0.1:8443/hello
# -k 关闭证书验证

报错:

Internal Server Error

查阅资料后,应该是ini文件配置问题:

# 更正后的uwsgi.ini,主要是指定chdir 和 wsgi-file

[uwsgi]

https = 0.0.0.0:8443,/root/test/ssl/foobar.crt,/root/test/ssl/foobar.key

chdir = /root/test/django_test

wsgi-file = django_test/wsgi.py

master = true

pidfile = /var/run/xxx.pid 
# 通过pid停止重启服务

daemonnize = true
# 守护进程,后台运行

再用curl测试:

curl -k  https://127.0.0.1:8443/hello

# 测试结果,正常
hello, django https

启动 | 停止 | 重启 uwsgi服务

# 启动服务
uwsgi --ini xxx.ini

# 停止服务
uwsgi --stop /var/run/xxx.pid

# 重启服务
uwsgi --reload /var/run/xxx.pid

启动uwsgi出现no internal routing support, rebuild with pcre support
使用如下命令,记录下,方便后人
需要注意的是pip install uwsgi 要加上–no-cache-dir,pip 可以强制下载重新编译安装的库,不然pip会直接从缓存中拿出了上次编译后的 uwsgi 文件,并没有重新编译一份。

ubuntu环境下

pip uninstall uwsgi

sudo apt-get install libpcre3 libpcre3-dev

pip install uwsgi --no-cache-dir

centos环境下

pip uninstall uwsgi
yum install -y pcre pcre-devel pcre-static
pip install uwsgi --no-cache-dir

4.arm架构机器uwsgi 启动https服务出错问题解决 & ubuntu 20.04同问题

最近遇到个很奇葩的问题,我用 amd64 平台的机器用 uwsgi 启动 httpsdjango 是可以运行的,然而换成 arm64-arch 的一直报错。

x86_64 启动正常,处理请求正常:

aarch64 启动异常,命令行和 ini 文件都不行:

于是google,别问为什么,因为百度出来的竟然还是自己的博文。

终于google上找到一篇博文的解决方案,基本描述如下:

# root用户下
apt-get install libssl-dev
pip install uwsgi -I --no-cache-dir

其实这个问答的提问者遇到的问题和我用命令行启动的一样,回答的只是说很有可能需要重新编译下uwsgi,但是,为什么呢?我不知道,可能真的平台架构不一样吧,arm架构的服务器运行http还是没有问题的,但https竟然报错,而x86_64的服务器上,确实不管http还是https都没有问题。

下面看我实际操作吧。

总之问题确实解决了。

遇到问题,根据提示一步步来吧,看提示,网上很多问题解答,很多并不能解决自己的问题,还是要自己动手解决。

原文地址:https://www.cnblogs.com/davis12/p/14416619.html