zoukankan      html  css  js  c++  java
  • 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都没有问题。

    下面看我实际操作吧。

    总之问题确实解决了。

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

  • 相关阅读:
    JSP内置对象
    Java数据结构
    Java引用传递
    椭圆曲线算法的基本原理及实现
    常见的Java异常
    Java数据结构
    Java数据结构
    重拾JSP
    [洛谷P6185] [NOI online 提高]T1 序列
    [题解][BZOJ1299]巧克力棒
  • 原文地址:https://www.cnblogs.com/davis12/p/14416619.html
Copyright © 2011-2022 走看看