分析项目流程:
1.首先客户端请求服务资源,
2.nginx作为直接对外的服务,接收到客户端发过来的http请求,会解包、分析,
如果是静态文件请求,就根据nginx配置的静态文件目录,返回请求的资源,
如果是动态的请求,nginx就通过配置文件,将请求传递给uwsgi;uwsgi 将接收到的包进行处理,并转发给wsgi,
3.wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
4.wsgi将返回值进行打包,转发给uwsgi
5.uwsgi接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
本次部署前端地址 www.xxx.com:80
后端地址 api.xxx.com:8000
Nginx安装(ubuntu)
1、安装依赖包
# 安装gcc g++的依赖库
sudo apt-get install build-essential(c语言的编译环境)
sudo apt-get install libtool(脚本库)
# 安装pcre依赖库(正则表达式库)
sudo apt-get install libpcre3 libpcre3-dev
# 安装zlib依赖库
sudo apt-get install zlib1g-dev
2、下载
cd /usr/local/
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2
3、编译安装
sudo ./configure --prefix=/usr/local/nginx
sudo make
sudo make install
4、启动
nginx -t #测试配置项是否有问题
sudo /usr/local/nginx/sbin/nginx #启动
sudo /usr/local/nginx/sbin/nginx -s stop #停止
sudo /usr/local/nginx/sbin/nginx -s reload #重启
查看是否运行
/usr/local/nginx/sbin/nginx -v
ps aux | grep nginx
nginx默认是80端口,输入地址即可看到nginx欢迎页面:
5、配置软链接
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
nginx #启动
nginx -s stop
sudo nginx -s reload #重启
安装uwsgi
进入虚拟环境 pip install uwsgi
静态文件配置
当Django运行在生产模式时,将不再提供静态文件的支持,需要将静态文件交给静态文件服务器。
我们要将收集的静态文件放到front_end目录下的static目录中,所以先创建目录static。
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'front_end/static')
然后执行收集命令
python manage.py collectstatic
配置Nginx作为静态文件服务器
sudo vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.xxx.com;
location / {
# 指定网站的根目录
root /home/python/Desktop/myshop/front_end;
# 默认访问根目录下的 index.html
index index.html index.htm;
}
}
sudo nginx -s reload #重启
uwsgi配置
在项目目录下创建uwsgi配置文件 uwsgi.ini
[uwsgi]
#与nginx连接时使用
socket=192.168.129.129:8001
#项目目录
chdir=/home/python/Desktop/myshop/jpmall
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=jpmall/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/home/python/.virtualenvs/shop
启动uwsgi服务器
uwsgi --ini uwsgi.ini # 启动
uwsgi --stop uwsgi.pid # 停止
修改Nginx配置文件,让Nginx接收到请求后转发给uwsgi服务器
upstream shop {
# 后端服务器,可配置多个实现负载均衡
server 192.168.129.129:8001;
server 192.168.129.110:8099;
}
server {
listen 8000;
server_name api.xxx.com;
location / {
include uwsgi_params;
uwsgi_pass shop;
# 解决跨域问题
add_header Access-Control-Allow-Origin http://www.meiduo.site;
add_header Access-Control-Allow-Headers Origin,X-Requested-With,Content-Type,Accept;
add_header Access-Control-Allow-Methods POST,GET;
}
}
server {
listen 80;
server_name www.xxx.com;
location / {
root /home/python/Desktop/myshop/front_end;
index index.html index.htm;
}
重启Nginx,完成整个部署过程
nginx 请求转发,并配置白名单
当请求地址 172.16.85.141:8000/service/cyberwing/query
转发到 10.128.86.64:8000/service/cyberwing/query
server {
listen 8000;
server_name localhost;
proxy_read_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600;
access_log /var/log/cyberwing-access.log;
location /service/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
allow 172.16.85.137; # 只允许这个地址访问
deny all;
proxy_pass http://10.128.86.64:8000/service/;
}
}