阿里云购买的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;
}
gzip on;
gzip_buffers 4 32k;
gzip_types "*";
gzip_vary on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_http_version 1.1;
<!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>
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进行配置,可以根据需要进行调整。