您当前的位置:首页 > 计算机 > 服务器 > Nginx

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

时间:08-16来源:作者:点击数:
城东书院 www.cdsy.xyz

阿里云购买的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;
        proxy_read_timeout 120s;      #nginx代理等待后端服务器的响应时间
        proxy_connect_timeout 120s;  #nginx代理与后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout 120s;    #后端服务器数据回传给nginx代理超时时间

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

nginx 80跳443

	server {
        listen 80;
        server_name _;

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


或
	server {
	        listen       80;
	        server_name  _;
	        return 301 https://$host$request_uri;
	    }

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;

html跳转

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>loading...</title>
</head>
<body>
</body>
    <script>
	    if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
		    // 如果用户使用移动设备访问
		    window.location.href = "./shift/index.html";
	    } else {
		    // 如果用户使用桌面设备访问
		    window.location.href = "./pc/index.html";
	    }
    </script>
</html>

sse和ws配置(不可用wsgi服务器 否则不生效)

    location /ws/ {#ws协议时
        proxy_http_version 1.1;
        proxy_set_header Host  $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
        client_max_body_size 10m;
        proxy_pass http://127.0.0.1:8009;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
     }

     location /backstage/api/submessage// {
        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;
        proxy_cache off;
        proxy_buffering off;
        proxy_pass http://127.0.0.1:8001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

下载文件

如果你想要在Nginx中监听以.apk为后缀的请求,并配置自动下载和显示文件大小,你可以使用location指令的正则表达式匹配功能。

以下是一个示例配置,用于监听以.apk为后缀的请求,并设置自动下载和正确显示文件大小:

location ~ \.apk$ {
    alias /path/to/apk;
    add_header Content-Disposition "attachment; filename=your-app.apk";
    add_header Content-Length 18874368;
}

在上述配置中,location指令使用了正则表达式匹配,~表示进行正则匹配。\用于转义.字符,以确保匹配后缀为.apk的请求。

你需要将/path/to/apk替换为实际存放apk文件的目录路径。同样,将18874368替换为实际的apk文件大小(以字节为单位)。

这样配置后,当访问以.apk为后缀的URL时,Nginx将自动触发下载apk文件,并在下载过程中正确显示文件大小和下载进度。

请注意,这个配置将适用于所有以.apk为后缀的请求。如果你只想对特定的URL进行配置,可以根据需要进行调整。

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐