• Nginx+SSL+gunicorn+gevent+Django的配置


    一、环境

    • 服务器: 阿里云轻量应用服务器
    • 系统: Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-90-generic x86_64)
    • 配置:
      • vCPU: 2核
      • 内存: 2GB
      • ESSD: 60GB

    二、前提

    1. 安装Nginx

    1.1. 在Nginx官网下载 Stable version

    1.2. 在安装包路径上使用 ./configure 命令安装Nginx, 可自行添加参数 (参考官方文档)

    2. 安装gunicorn、gevent和Django

    pip install gunicorn gevent django
    

    3. 添加域名及HTTPS服务

    3.1. 购买域名

    3.2. 服务器设置

    轻量应用服务器管理控制台进入服务器管理页

    • 添加域名

    • 添加防火墙规则

    3.3. 添加SSL证书

    3.4. 域名解析

    3.5. 参考帮助文档在APP端进行ICP备案

    三、配置

    1. Nginx

    1.1. 下载SSL证书到本地

    SSL证书申请通过后, 在SSL证书管理控制台下载证书

    1.2. 将证书放到指定位置

    1.2.1. 执行以下命令, 在Nginx安装目录下创建一个用于存放证书的目录, 将其命名为cert

    cd /usr/local/nginx/conf
    mkdir cert
    

    1.2.2. 将本地证书文件cert-file-name.pem和私钥文件cert-file-name.key放置到cert目录

    1.3. 修改nginx.conf文件

    cd /usr/local/nginx
    vim conf/nginx.conf
    

    nginx.conf

    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    error_log  /var/log/nginx/error.log warn;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    
        accept_mutex off; # set to 'on' if nginx worker_processes > 1
        use epoll; # to enable for Linux 2.6+
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
        access_log /var/log/nginx/access.log combined;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        upstream app_server {
            # fail_timeout=0 means we always retry an upstream even if it failed
            # to return a good HTTP response
        
            # for UNIX domain socket setups
            server unix:/tmp/gunicorn.sock fail_timeout=0;
        
            # for a TCP configuration
            # server 192.168.0.7:8000 fail_timeout=0;
        }
        
        server {
            # if no Host match, close the connection to prevent host spoofing
            listen 80 default_server;
            return 444;
        }
    
    
        # 以下属性中,以ssl开头的属性表示与证书配置有关。
        server {
            listen 443 ssl;
            #配置HTTPS的默认访问端口为443。
            #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
            #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
            server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
            root html;
            index index.html index.htm;
            ssl_certificate cert/cert-file-name.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
            ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.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; #表示使用的TLS协议的类型。
            ssl_prefer_server_ciphers on;
            
            location / {
                # checks for static file, if not found proxy to app
                try_files $uri @proxy_to_app;
            }
            location @proxy_to_app {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $http_host;
                # we don't want nginx trying to do something clever with
                # redirects, we set the Host: header above already.
                proxy_redirect off;
                proxy_pass http://127.0.0.1:8000;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    
        server {
            listen 80;
            server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
            rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
        }
    }
    

    1.4. 重启Nginx服务

    cd /usr/local/nginx/sbin
    ./nginx -s reload
    

    2. Django

    2.1. 创建项目

    cd 到一个你想放置你代码的目录, 然后运行以下命令

    django-admin startproject mysite
    

    startproject创建了以下目录和文件

    mysite/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            asgi.py
            wsgi.py
    

    2.2. 修改settings.py文件

    修改ALLOWED_HOSTS = {}

    ALLOWED_HOSTS = [
        '.yourdomain.com',
        'localhost',
    ]
    

    3. gunicorn和gevent

    manage.py文件所在的目录中运行以下命令

    gunicorn -k gevent mysite.wsgi
    
  • 相关阅读:
    MyBatis学习之二----应用
    网逛收藏
    Dubbo+Zookeeper 入门Demo
    React + umi +antd+antv/g6 实现力图
    npm、yarn 简单使用记录
    React yarn安装umi后 umi -v查询版本失败
    Eclipse 快速打开文件所在的本地目录
    Windows激活工具
    Win7 node多版本管理gnvm采坑记录
    自定义环形进度条RoundProgressBar
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/15622454.html
Copyright © 2020-2023  润新知