2025年2月14日 星期五 甲辰(龙)年 腊月十四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 服务器 > Nginx

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

时间:08-16来源:作者:点击数:24
城东书院 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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐