Django部署HTTPS、解决跨域、nginx80跳443

阿里云购买的ssl证书,上传到服务器/root/project/目录下

vim /etc/nginx/nginx.conf          --打开nginx配置文件

# 添加如下配置
	
	server {
        listen       443 default ssl;
        listen       [::]:443 default ssl;
        server_name  _;

        ssl_certificate cert/domain name.pem;   #路径/将domain name.pem替换成您证书的文件名。
        ssl_certificate_key cert/domain name.key;   #路径/将domain 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;   
        ssl_prefer_server_ciphers on;

        location / {
             include uwsgi_params;
             uwsgi_pass 172.16.101.72:8000;
        }

        location /static/ {
             alias /root/project/static/;
             expires 30d;
        }
#保存退出

systemctl restart nginx     -- 重启nginx让配置生效

修改项目中settings.py文件,添加https配置

vim /code/izufang/izufang/settings.py      --打开配置文件
	
---------------------------------------------------------------------
#文件末尾添加https配置
	
# 保持HTTPS连接的时间
SECURE_HSTS_SECONDS = 3600
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

# 自动重定向到安全连接
SECURE_SSL_REDIRECT = True

# 避免浏览器自作聪明推断内容类型(避免跨站脚本攻击风险)
SECURE_CONTENT_TYPE_NOSNIFF = True

# 避免跨站脚本攻击(XSS)
SECURE_BROWSER_XSS_FILTER = True

# COOKIE只能通过HTTPS进行传输
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

# 防止点击劫持攻击手段(不允许使用<iframe>标签进行加载)
X_FRAME_OPTIONS = 'DENY
----------------------------------------------------------------------	


#重启uwsgi
pkill -9 uwsgi             --强杀uwsgi进程

nohup uwsgi --ini conf/uwsgi.ini &   --启动uwsgi,后台运行

netstat -ntlp          	   --可以查看

域名解析(绑定域名)

在阿里的域名控制中心,选择控制台,选择域名解析,如果域名没有备案的话,测试了赶紧删除域名解析,如果
备案过了,那就可以随便挂起

在这里插入图片描述

解决跨域问题

pip install django-cors-headers        -- 三方库

配置settings.py文件

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
 ]



MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',					#添加
    'django.middleware.common.CommonMiddleware',				#添加
    ...
    ]



# # 配置允许跨域访问接口数据
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = ()
# # 跨域访问允许的请求头
CORS_ALLOW_HEADERS = (
     'accept',
     'accept-encoding',
     'authorization',
     'content-type',
     'dnt',
     'origin',
     'user-agent',
     'x-csrftoken',
     'x-requested-with',
     'token',
 )

# # 跨域访问支持的HTTP请求方法
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)


# # 避免浏览器自作聪明推断内容类型(避免跨站脚本攻击风险)
SECURE_CONTENT_TYPE_NOSNIFF = True

腾讯云配nginx https

    ...
    upstream test01 {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    }

    server {
        listen 443 ssl;
        server_name _;
        ssl_certificate /root/project/ssl/1_tel.njll.vip_bundle.crt;       # crt绝对路径
        ssl_certificate_key /root/project/ssl/2_tel.njll.vip.key;    # key绝对路径
        ssl_session_timeout 5m;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        location / {
            proxy_pass http://test01;
        }
    }
 }

nginx 80跳443

	server {
        listen 80;
        server_name _;

        location / {
            rewrite ^(.*)$ https://$host$1 permanent;
        }
    }

nginx开启gzip加速

    gzip on;
    gzip_buffers 4 32k;
    gzip_types "*";
    gzip_vary on;
    gzip_min_length 1k;
    gzip_comp_level 6;
    gzip_http_version 1.1;

版权声明:本文为weixin_44634704原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。