nginx :
nginx 是一个反向代理服务器,客户端对Web 服务器的访问需要先经过反向代理服务器,
在由代理服务器决定目标服务器,这样可以防止外部程序对web服务器的直接攻击;其次可
根据负载情况去请求不同的目标服务器达到负载均衡;还有可以已知处理客户端对于静态文
件的请求,而不用在去请求目标服务器。
uwsgi:
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule
的作用是与uWSGI服务器进行交换。uwsgi 对动态的处理笔记比较好,nginx对静态页面的处理比较好。
有了nginx做代理,可以实现一个nginx可以代理多台uwsgi实现负载均衡的目的。
ubuntu 18.04 安装方法
安装uwsgi、nginx
Ubuntu 18.04、nginx 1.14.0 、 uwsgi 2.0.16 、python 3.6.7
sudo apt-get install nginx
sudo pip3 install uwsgi
首先找到你的Django项目,以及绝对路径:/home/Medical
Medical
Medical
__init__.py
settings.py
urls.py
wsgi.py
apps
...
media
..
static
...
templates
...
db.sqlie3
manage.py
使用ssh 连接服务器:
ssh root@124.135.665.555
# 创建项目上传目录
mkdir /home/project
注意:服务器上的项目不能放在root目录下,放root目录里在使用uwsgi的时候写入.socket会出现权限
错误。其他目录没有问题
使用pscp将本地项目复制到服务器:
windows下使用pscp:
pscp -r Meidcal root@124.135.665.555:/home/project
Ubuntu下使用scp:
sudo scp -r Medical root@124.135.665.555:/home/project
详细可见:https://blog.csdn.net/weixin_44313745/article/details/90633205
配置nginx
将nginx目录下的uwsgi_params 拷贝到项目目录下。
cp /etc/nginx/uwsgi_params /home/project/Medical
修改nginx的配置文件:
vim /etc/nginx/sites-enabled/default
# nginx需要连接的组件
upstream django {
# server unix:///home/project/Medical/uwsgi.sock; # 文件socket
server 0.0.0.0:8080; # 网络端口socket(我们先使用这个,8080代表在服务端项目在8080端口运行)
}
# 服务器配置
server {
# 监听端口,通过域名加这个端口号(192.168.27.110:9999)就可访问项目,而不是8080端口
listen 9999;
server_name 192.168.27.110;
# 如果你有域名则配置如下,没有域名则配置你的服务器ip(如上)
# listen 80;
# server_name www.nginx.netcome.net;
charset utf-8;
# 最大上传大小
client_max_body_size 75M;
# Django的静态media文件路径
location /media {
alias /home/project/Medical/media;
}
# Django的静态static文件路径
location /static {
alias /home/project/Medical/static;
}
# Django的项目配置
location / {
# uwsgi的方式使用上面upstream django的配置,先使用服务端口
uwsgi_pass django;
include /home/project/Medical/uwsgi_params; # 复制的 uwsgi_params路径
}
}
保存然后开启nginx服务:
service nginx start
配置uwsgi
进入项目目录,创建一个uwsgi.ini
cd /home/project/Medical
vim uwsgi.ini
在创建uwsgi.ini的时候,注意目录问题,不要为自己留下坑
[uwsgi]
# 项目目录
chdir = /home/project/Medical
# 指定项目的wsgi文件,我的项目是bsite所以为bsite.wsgi,你自己的对应改
module = Medical.wsgi:application
# 进程个数
workers = 5
pidfile = /home/project/Medical/uwsgi.pid
# 指定静态文件,指定在那里就使用哪里,必须和nginx的default文件里配置的路径一样(当然这个目录可以是随意的,在项目之外也可以,只要保证和nginx的静态文件路径一样就行)
static-map =/static=/home/project/Medical/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/home/project/Medical/uwsgi.log
# 指定sock的文件路径
socket=/home/project/Medical/uwsgi.sock
保存后,启动uwsgi:
cd /home/project/Medical
uwsgi --ini uwsgi.ini
然后会在/home/project/Medical目录下生成uwsgi.sock\uwsgi.pid\uwsgi.log三个文件,
然后再次修改nginx的default文件。
# nginx需要连接的组件
upstream django {
server unix:///var/project/bsite/uwsgi.sock; # 文件socket
# server 0.0.0.0:8080;
}
重新启动项目:
cd /home/project/Medical
uwsgi --reload uwsgi.pid
/etc/init.d/nginx restart 或者 service nginx restart
Centos 7 部署方法
安装nginx
https://blog.csdn.net/weixin_44313745/article/details/90637903
使用uwsgi.ini 配置文件启动项目
在manage.py 同级目录下,创建一个uwsgi_conf文件夹,用来存放uwsgi.ini 配置文件
vim uwsgi.ini
# uwsig使用配置文件启动
[uwsgi]
# 项目所在的根目录
chdir=/opt/mywebapp/
# 指定项目的application,区别于启动命令--wsgi-filemysite/wsgi.py
module=mysite.wsgi:application
#the local unix socket file than commnuincate to Nginx
# 指定sock的文件路径,这个sock文件会在nginx的uwsgi_pass配置,用来nginx与uwsgi通信
# 支持ip+port模式以及socket file模式
socket=%(chdir)/uwsgi_conf/uwsgi.sock
# socket=127.0.0.1:9001
# 进程个数
processes = 8
# 每个进程worker数
workers=5
procname-prefix-spaced=mywebapp # uwsgi的进程名称前缀
py-autoreload=1 # py文件修改,自动加载
# 指定IP端口,web访问入口
# 如果不适用nginx 进行配置,可直接使用一下语句,进行直接启动项目, 如果使用nginx 则将此行注释掉
http=0.0.0.0:9000
# 指定多个静态文件:static目录和media目录,也可以不用指定该静态文件,在nginx中配置静态文件目录
# uwsgi有自己的配置语法,详细可参考官网,无需写绝对路径,可以用循环、判断等高级配置语法
for =static media
static-map=/static=%(chdir)/%(_)
endfor =
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置一个超时,用于中断那些超过服务器请求上限的额外请求
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=%(chdir)/uwsgi_conf/uwsgi.log
# uWSGI进程号存放
pidfile=%(chdir)/uwsgi_conf/uwsgi.pid
#monitor uwsgi status 通过该端口可以监控 uwsgi 的负载情况
# 支持ip+port模式以及socket file模式
stats=%(chdir)/uwsgi_conf/uwsgi.status
# stats = 127.0.0.1:9001
使用nginx 启动uwsgi
在 /etc/nginx/conf.d/ 新建一个myblog.conf 文件
vim myblog.conf
upstream blog_app {
# nginx通过socket在环回接口地址的9001端口与本地的uWSGI进程通信
# 支持ip:port模式以及socket file模式
server unix:/opt/mywebapp/uwsgi_conf/uwsgi.sock;
# server 127.0.0.1:9001;
}
server {
listen 9090;
server_name 192.168.100.5;
access_log /var/log/nginx/access.log;
charset utf-8;
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
# nginx转发动态请求到uWSGI
include uwsgi_params;
uwsgi_connect_timeout 20;
uwsgi_pass blog_app;
}
# 如果写成/static/,nginx无法找到项目静态文件路径
location /static {
alias /opt/mywebapp/static;
}
# 如果写成/media/,nginx无法找到项目媒体文件路径
location /media {
alias /opt/mywebapp/media;
}
}
重启 nginx :
nginx -s reload | sevice nginx start