美文网首页
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