部署了两遍,又读了一些文章,才渐渐理解了这两个东西,
实际上是python的一个模块,可以通过pip install uwsgi
进行安装,是一个由python实现的web容器,可以兼容性比较好地发布Django,Flask等pythonweb框架的应用
基本配置:
[uwsgi]
# 使用nginx连接时使用,Django程序所在服务器地址
# 选择内网IP和端口
socket=127.0.0.1:8000
# 项目根目录
chdir=/home/ccb/project/CET4
#项目中wsgi.py文件的相对目录
wsgi-file=CET4/wsgi.py
# 进程数
processes=2
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。以前的runserver是依赖终端的
daemonize=logs/uwsgi.log
# 指定虚拟环境所在目录,不能填相对目录
virtualenv=/home/ccb/.virtualenvs/blog
因为端口是有很多的,所有我们可以布置好几个uwsgi,然后都放到nginx上,这就实现了一个服务器部署多个项目
我们口中所说的服务器,一种是硬件我们的主机,另一种是服务器程序比如nginx apche之类的.
我们的uwsgi是不能加载静态文件的,如果我们需要加载静态文件和媒体文件,那么就要uwsgi和nginx配合使用
我们可以在/etc/ngin/conf.d/
下创建一个nginx_my.conf文件
在这个文件中我们可以写多个 下面的upstream
upstream MyBlog {
# 此处为uwsgi运行的ip地址和端口号
server 127.0.0.1:8000;
}
这样我们就可以实现,一个服务器部署多个项目喽
下面是https项目的基本配置
server{
# 监听443端口
listen 443;
# 对应的域名,这里需要带上www
server_name www.cbmm.xyz;
server_name_in_redirect off;
ssl on;
#从腾讯云获取到的第一个文件的全路径
ssl_certificate /etc/ssl/cbmm.xyz.crt;
#从腾讯云获取到的第二个文件的全路径
ssl_certificate_key /etc/ssl/cbmm.xyz.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;
# 媒体文件
location /media {
alias /home/ccb/project/CET4/media;
}
# 静态文件
# location /static {
# alias /home/ccb/project/blog/static;
# }
# 主目录
location / {
uwsgi_pass CET4;
include /etc/nginx/uwsgi_params;
}
}
重定向服务
# 重定向服务
server{
listen 80;
server_name cbmm.xyz www.cbmm.xyz;
rewrite ^/(.*)$ https://www.cbmm.xyz:443/$1 permanent;
}
解决办法: 很多人都说需要加 server_name_in_redirect off;
,好像新版本自动就是off,重定向到当前url
我踩坑踩了两天,是因为我自作聪明,在我的settings中加的一个配置
# 强制在项目中每个链接必须写全,不自动加斜杠(不影响手输网址)
APPEND_SLASH = False
我当时以为这个能防止不写全报错的问题,后来改成True就解决问题了
最后: 部署需要多练习,多理解nginx的作用和配置目的,如果修改了项目需要重启nginx
systemctl restart nginx
不行的话,重启uwsgi
uwsgi --reload uwsgi.pid