美文网首页
nginx+uwsgi+django+SSL最小白全面配置教程

nginx+uwsgi+django+SSL最小白全面配置教程

作者: link_start | 来源:发表于2018-12-15 16:24 被阅读0次

    先说说项目的是干啥的

    本来咱们玩web只需要django就能建立一个正儿八经带server的服务器,不过django自带的只能支持单并发的访问,而且效果不是特别好。

    这个时候就用到了 nginx ,关于nginx网上的介绍很多我就不多说了,只需要知道这玩意是一个服务器框架,用了它相当于tomcat一样自带一个服务器。

    不过由于nginx以及一些其他原因,静态资源的访问不是特别好,这个时候就需要用到uwsgi这个框架。

    最后在实际生产过程中,现在大部分都是使用https访问,所以最后在nginx中配置好了SSL证书,我们就可以愉快的用https访问,而且环境搭建好了和我们的真正逻辑代码是解耦的,所以一次搭建,终身爽快。

    下面我会仔细说名安装和配置过程 环境是(ubuntu + nginx 1.103 + uwsgi 最新版 + django 2.1.3 +python 3.5)

    安装nginx:

    再控制台中输入即可按章nginx
    ~$ sudo apt-get install nginx #安装
    但是这种安装方法可能会出现问题,不过都是小问题,具体百度一下就行了
    跟着命令好一串撸下来,我相信你已经装好了nginx。
    然后我们需要测试一下。

    我们需要在 ubuntu 中找到这个 etc/nginx/nginx.conf 文件,这个文件是nginx的配置文件。
    nginx.conf 中又一个 http{} 里面可以配置若干个 server{} 。其目的就是监听http访问中的若干端口,这里我们需要添加一个server{}如下:

    server {
        listen       8000;    # 修改端口号
        server_name  localhost;
        #charset koi8-r; 
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
    

    这段的意思就是监听8000 端口。
    接下来配置好了 我们使用
    nginx -t 命令检测一下是否配置正确
    如果没问题则直接在命令行输入 nginx 即可启用nginx。反正我用的这个版本是这样直接启动。
    这个时候我们直接在浏览器输入127.0.0.1:8000 来测试nginx是否配置成功
    如果成功则会出现


    image.png

    安装uwsgi

    咱们先把nginx给停掉 使用命令 nginx -s stop
    uwsgi 是python自带的包 所以安装起来非常方便 只需要
    pip install uwsgi 即可

    咱们测试一下 uwsgi是否可用
    随便找个位置建立一个文件 test.py
    里面的代码是

    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]
    

    在这个目录下运行命令
    uwsgi --http :8000 --wsgi-file test.py
    意思是使用组建 uwsgi 监听端口8000 并且运行这个test.py文件,如果正常,会在浏览器访问127.0.0.1:8000时出现:
    Hello World

    然后就是django 这个也是python的包 我默认你已经有了一个基于django可以运行的项目。

    把uwsgi和django结合起来

    这个时候 我们就需要用到 uwsgi的一种配置文件。我们随便找个目录新建一个demo.ini文件
    文件内容如下:

    [uwsgi]
    socket = 0.0.0.0:8000  
    #真实服务的端口  这个8000端口 是把nginx 和django串起来的 并不是实际浏览器访问的接口
    chdir = /root/englishDemo/demoWB/  #我们django项目的根目录
    
    # wsgi.py文件在项目中的位置  这个文件每个django项目都有
    module = demoWB.wsgi
    # process-related settings
    # master
    master          = true
    # 运行的进程数
    processes       = 4
    vacuum = true
    

    这个配置文件还有很多内容,读者有需要可以自行查阅。
    现在咱们只要运行这个配置文件
    uwsgi --ini demo.ini
    即可运行django程序了。是不是很方便,不用runserve 每次指定域名和端口号
    相当于是uwsgi代替我们执行

    把nginx 和 uwsgi 结合起来

    这一部分也很简单 我们只需要修改nginx中在安装过程中提到的配置文件即可
    etc/nginx/nginx.conf
    打开这个文件后,我们在原有的基础上修改http{}中的内容

    upstream django {
           server 0.0.0.0:8000; #web的socket端口
        }
    
     server{
                listen 80;
                access_log /root/log.txt; # Nginx日志配置
                server_name www.asdasasd.com; #这里输入你自己的网址
                charset utf-8;
              
                error_page 404 /404.html; # 错误页面
                error_page 500 502 503 504 /50x.html; # 错误页面
    
                location / { # 这个location就和咱们Django的url(r'^admin/', admin.site.urls),
                    root /root/englishDemo/demoWB; #django项目的根目录
                    include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
                    uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
                    uwsgi_pass django; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
            }
    }
    
    

    重启nginx的时候就可以和uwsgi结合起来了。

    nginx配置SSL证书

    这个证书可以从很多地方获得。我在这里举例从阿里云上
    先选择网盾 SSL证书


    image.png

    选择免费版本


    image.png
    购买之后审核完成, 会又下载连接,下载之后是 .pem 和 .key的两个文件。
    咱们需要通过这两个文件配置nginx。
    还是打开刚刚的 nginx.conf配置文件。修改为
          server {
        listen 443;  #这里需要443 为https 默认的端口
        access_log /root/log.txt; # Nginx日志配置
    
        server_name www.xxxxxxxx.com; #这里是你的域名
        ssl on;
        root html;
        index index.html index.htm;
    
            ssl_certificate /etc/nginx/cert/xxxxxxxx.pem; #你的pem  前面的目录可以自己随便建立
    
            ssl_certificate_key /etc/nginx/cert/xxxxxxxx.key; #你的key  前面的目录可以自己随便建立
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
                            root /root/englishDemo/demoWB;
                    include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
                uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
                uwsgi_pass django; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
        }
    }
    

    重启一下nginx即可
    这一波操作完成

    相关文章

      网友评论

          本文标题:nginx+uwsgi+django+SSL最小白全面配置教程

          本文链接:https://www.haomeiwen.com/subject/fgjahqtx.html