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
启动 https
的 django
是可以运行的,然而换成 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
都没有问题。
下面看我实际操作吧。
总之问题确实解决了。
遇到问题,根据提示一步步来吧,看提示,网上很多问题解答,很多并不能解决自己的问题,还是要自己动手解决。