Nginx+uwsgi+ssl配置https
Nginx+uwsgi+ssl配置https
使用原始django,太过于笨重和杂多
nginx是一个轻量级的web服务器,在处理静态资源和高并发有优势
uwsgi是一个基于python的高效率的协议,处理后端和动态网页有优势
所以这里采用静态网页交给nginx解析,动态网页交给uwsgi解析,并且nginx配置ssl,即可以使用出高安全,高效率的部署。
步骤
我这里使用的是Ubuntu18.04版本,服务器在阿里云
没用centos的原因是Ubuntu我用的更顺手
1.在Ubuntu上安装Django生产环境
python3.6 django3 mysql5.7 nginx uwsgi
这里安装就落入了第一个坑,Ubuntu系统带了好多python和pip工具,很乱。
我先按照python3.8----->修改pip3指定的编译器,将python3.6改成python3.8
从官网安装MySQL----->下载官网的deb包------>dpkg一下这个包------->系统update------>系统获取安装mysql8。
安装virtualenv和virtualenvwrapper。windows上面习惯了用这两个包,linux上自然也安上,但后面却报错了,很无奈,只能再删除掉,等会你就懂了
pip安装django uwsgi,sudo apt 安装nginx。这步我觉得是这一天里最简单的
pip安装mysql依赖包 mysqlclient。这步真的是酸辛泪,一上午全费到这里了。我这里是在virtualenv虚拟环境中进行安装的。但,它就是报错,哪怕我百度之后,安装了再多的系统依赖包,它还是报错。等我绝望的时候,退出虚拟环境,在本来的编译器中试了一下pip3 install mysqlclient,结果缺成功了,就很绝望。想着是不是外面的pip list里面有可能这个的依赖包?然后我把pip list所有的包记下来,再进虚拟环境按一遍,之后再安装mysqlclient,结果还是报错。绝望。只能删除了virtualenv,然后把mysqlclient安装到了外面的环境(至于为什么这里不用pip freeze ->去安装,我原环境在windows,ubuntu里面还有好多都有的包,网上没用,这样一回推安装就报错,很绝望。)
2.测试一下这些包都有没有问题
先生成数据库迁移文件,makemigrations 之后迁移migrate 成功
先测试django,直接runserver manage, 测试url, 成功访问
再测试nginx,打开服务,直接访问ip。成功访问到
测试uwsgi,现在项目文件夹里写一个xxx.ini,内容如下
1
2
3
4
5
6
|
[uwsgi] #项目根目录,要绝对地址 chdir = /root/xiangmu #根目录下的wsgi module = xiangmu.wsgi http = :80 |
之后uwsgi --init xxx.ini就行了,结果成功~~
3.为nginx生成静态文件
这里需要你现在你项目的settings文件里,最下面加一行数据
STATIC_ROOT=os.path.join(BASE_DIR,'你想取的文件夹名')
之后运行命令 python manage.py collectstatic会在你的项目根目录生成一个你上面指定的文件夹
这个文件夹包含你会用到的所有静态资源,用来调给nginx使用
4.修改nginx配置文件
在/etc/nginx/conf.d/文件夹下生成一个叫[你项目名].conf的项目配置文件
将中文修改成你所需要的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
upstream 自定义1{ server 127.0.0.1:8001; #上面的这个端口号需要记得,等会uwsgi要写一样的 } server { listen 80; server_name [写你自己要上线的网站ip或者域名]; charset utf-8; client_max_body_size 75M; location / static / { alias /项目的绝对路径/static_dist/; } location / { uwsgi_pass 自定义1; include uwsgi_params; uwsgi_read_timeout 30; } } |
这段话的意思我来概述一下,
第一个大代码块:配置一个等会和uwsgi响应的地址
第二个大代码块:监听80号端口,设置访问域名和ip
第一个location:遇见网页需要static的(我django静态资源都在这个文件夹下面),转到咱们设置的新的static_dist里面使用。(这样是不是就不会请求uwsgi动态网页了)。
第二个location:遇见网页其他的,返回给uwsgi动态网页解析去。(这样动态静态是不是就分开了)
在nginx配置文件写完以后,就可以service nginx configtest测试一下正确不,如果显示正常,那么就没问题。就可以重新启动服务了service nginx restart
重启服务完,你访问网页应该还是404,别着急,因为我们还没有配置uwsgi
5.修改前面项目路径下的配置文件(前面的那个xxx.ini)
上面的http=:80这里就不用了
1
2
3
4
5
6
7
8
9
10
11
12
|
[uwsgi] #项目根目录,要绝对地址 chdir = /root/xiangmu #根目录下的wsgi module = xiangmu.wsgi #下面的这个,一定要和你刚才nginx配置里的自定义1一样 socket = 127.0.0.1:8001 chmod -socket = 666 #底下三个不加会运行默认值 master = true processes = 4 vacuum = true |
之后就可以运行了,uwsgi --ini xxx.ini。
这里你的网页应该就能访问了。如果不能访问,请自己再捋一次逻辑关系,看看自己写错没
如果发现css和js这些静态文件没加载,别着急,看下面
可能出现的错误
css、js、等静态文件没加载
这里我们要弄清一个事情,网页都是从nginx转发出去的,如果没有静态文件,说明nginx出了问题。
打开你浏览器的f12的网络窗口,刷新一下,看看你的静态文件是403错误还是404错误。
如果是404错误的话,没找到,那问题就出现在配置路径上,核对nginx里的location static和你生成的静态文件路径
如果是403错误,说明这会你的静态文件禁止加载,nginx权限不够,所以我们修改两个地方
打开/etc/nginx.conf,注意,这里是/etc/nginx.conf!! /etc/nginx.conf!! /etc/nginx.conf!!不是你上面那个你项目的配置文件,是nginx的整体配置文件!!!!!!我一开始一直以为是上面的那个项目配置文件,在这里走了很多弯路。。晕。
在打开的文件里,最上面的 user xxx;改成user root; (如果你没有这个,说明你打开错了!!)
找到原始的static和生成的static_dist这些静态文件目录,给目录整体赋权限
chmod -R 777 static chmod -R 777 static_dist
这样403错误应该就搞定了~
将项目部署成https,也就是443端口
1.首先先从服务器提供商处申请一下证书。这个可以百度一下,阿里云,腾讯云都有免费的。
2.将从运营商拿到的两个证书(pem和key),放在你/etc/nginx/cert/这个目录下。
3.修改你项目的nginx配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#后面的中文不用修改,其他中文修改成你自己的 upstream 自定义1{ server 127.0.0.1:8001; } server { listen 443; server_name 网站域名或者ip; ssl on; ssl_certificate cert/尾缀为pem的那个文件.pem; ssl_certificate_key cert/尾缀为可以的那个文件.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #密码加密方式 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码 ssl_prefer_server_ciphers on; charset utf-8; client_max_body_size 75M; location / static / { alias /项目的绝对路径/static_dist/; } location / { uwsgi_pass 自定义1; include uwsgi_params; uwsgi_read_timeout 30; } } #监控80端口,强制跳转到443端口 server { listen 80; server_name 域名或ip; rewrite ^(.*)$ https: //www.$server_name$1 permanent; } |
监听443端口,然后将两个证书加进来
监听80端口,强制转到443上面来
Nginx+uwsgi+ssl配置https的更多相关文章
- Nginx、Tomcat配置https
一.Nginx.Tomcat配置https 前提就是已经得到了CA机构颁发的证书 一.合并证书 1.假设证书文件如下 秘钥文件server.key,证书CACertificate-INTERMEDIA ...
- 吴裕雄--天生自然Django框架开发笔记:Django Nginx+uwsgi 安装配置
Django Nginx+uwsgi 安装配置 使用 python manage.py runserver 来运行服务器.这只适用测试环境中使用. 正式发布的服务,需要一个可以稳定而持续的服务器,比如 ...
- nginx 反向代理 配置 https 实现http https同时存在
server { listen ssl; #监听443端口 server_name www.app01.com; ssl on; #启用ssl加密 ssl_certificate /etc/cert/ ...
- nginx 反向代理 配置 https 实现http https同时存在 经测试 支持location 规则
server { listen ssl; #监听443端口 server_name www.app01.com; ssl on; #启用ssl加密 ssl_certificate /etc/cert/ ...
- nginx使用certbot配置https
一般现在的网站都要支持https,即安全的http. 机器:阿里云Ubuntu 16.04.3 LTS 方案一:自己申请证书 配置时需要确保有ssl模块, 之后域名解析下, 之后时申请证书,可以去阿里 ...
- CentOS 6.5 nginx+tomcat+ssl配置
本文档用于指导在CentOS 6.5下使用nginx反向代理tomcat,并在nginx端支持ssl. 安装nginx.参见CentOS 6 nginx安装. SSL证书申请.参见腾讯SSL证书申请和 ...
- ubuntu配置Python-Django Nginx+uwsgi 安装配置
安装Nginx sudo apt-get install nginx ubantu安装完Nginx后,文件结构大致为: 所有的配置文件都在 /etc/nginx下: 启动程序文件在 /usr/sbin ...
- nginx +uwsgi + django配置
一 安装 nginx 二 安装 uwsgi ,pip install uwsgi 三 配置nginx 打开 nginx.conf文件, location / { # root html; # ind ...
- 配置nginx支持ssl服务器—HTTPS
下文摘自: http://docs.bigbluebutton.org/install/install.html Configuring HTTPS on BigBlueButtonAncho ...
- Nginx+uwsgi安装配置
一.安装基础开发包 yum groupinstall "Development tools" yum install zlib-devel bzip2-devel pcre-dev ...
随机推荐
- MyBatis_问题解决:Invalid bound statement (not found)
Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是 ...
- [转帖]学习如何编写 Shell 脚本(进阶篇)
https://juejin.cn/post/6935365727205457928 前言 在<学习如何编写 Shell 脚本(基础篇)>一文中已经讲解了 Shell 脚本编程的基础知识, ...
- [转帖]Oracle 创建和查看DBLink 的方法
https://www.cnblogs.com/zhouzangood/articles/4612441.html 1.如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限: ...
- [转帖]数据可视化之redash(支持43种数据源) (转自https://anjia0532.github.io/2019/07/08/redash/)
https://www.cnblogs.com/a00ium/p/13177272.html 人类都是视觉动物,讲究一图胜千言.如果没了可视化,那么你在跟领导汇报工作时,很大程度会鸡同鸭讲.其实 ex ...
- 【转帖】Linux开发工具 — readelf、objdump、hexdump
本博文的主要内容是:1)readelf工具查看ELF文件的信息:2)hexdump工具查看这块内存:3)objdump工具对文件进行反汇编. 前一段时间对Linux不熟,所以很多命令不知道.学习C时候 ...
- [转帖]阿里发布自研ARM服务器芯片倚天710,不对外出售
https://www.modb.pro/db/139440 10月19日,阿里巴巴旗下半导体公司平头哥发布自研云芯片倚天710,并宣称该芯片是业界性能最强的ARM服务器芯片,性能超过业界标杆20%, ...
- [转帖]Linux系统中的Page cache和Buffer cache
Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...
- [转帖]Nginx Ingress 高并发实践
概述 Nginx Ingress Controller 基于 Nginx 实现了 Kubernetes Ingress API,Nginx 是公认的高性能网关,但如果不对其进行一些参数调优,就不能充分 ...
- [转帖]「更易用的OceanBase」|OceanBase 4.0 一体化安装包 - 把简单留给用户
https://www.modb.pro/db/565842 1. OceanBase 3.x 版本安装浅谈 我是在 OceanBase 3.1.4 版本的时候开始尝试入手测试的.刚开始 OB 3.x ...
- Redislabs的简单使用与benchmark测试结果
Redislabs的简单使用与benchmark测试结果 自己的理解 仅是理解. 没有看过源码 哨兵可以实现高可用, 但是对高吞吐是没有太大帮助的. 虽然可以实现主写从读, 但是在高并发的场景下延迟肯 ...