06.Nginx动静分离

🐶1.nginx动静分离

1.1 什么是动静分离

1.什么是动静分离?

简单来说就是将动态请求和静态请求分开处理。php、 python、java、nginx。

2.为什么要做动静分离?

首先Tomcat在处理静态资源时效率不高,但默认情况下无论 “动态、静态“ 资源都是由tomcat处理,而Tomcat在处理静态
资源时需要进行逻辑运算,从而会导致应用响应慢,并且会 占用不必要的系统资源。 那么借助Nginx实现动态资源请求和静态资源请求分离后,可
以减少系统不必要的消耗和延时。以便加快系统的处理性 能。

3.如何实现动静分离?

Nginx通过用户请求的 uri 来区分请求的类型,并转发给不同 的服务端。 如果请求的uri包含 png、jpg 等资源则由 Nginx
处理,如果请求的 uri 包含 jsp 等资源则代理至Tomcat服务处 理。

在这里插入图片描述

🐶2.单机动静分离实践

单机实现动静分离nginx + Tomcat

2.1 安装Tomcat,部署代码。

[root@web01 ~]# yum install -y tomcat
[root@web01 ~]# mkdir
/usr/share/tomcat/webapps/ROOT
[root@web01 ~]# cd
/usr/share/tomcat/webapps/ROOT
#准备动态jsp代码
[root@web01 ~]# vim index.jsp
<%@ page language="java"
import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>Nginx+Tomcat动静分离</title>
</head>
<body>
<%
Random rand = new Random();
out.println("<h2>动态资源</h2>");
out.println(rand.nextInt(99)+100);
%>
<h2>静态图片</h2>
<img src="nginx.png" />
</body>
</html>
#下载静态资源图片
[root@web01 ROOT]# wget
http://nginx.org/nginx.png

2.2 安装Nginx 配置动静分离。

[root@web01 ~]# cat
/etc/nginx/conf.d/ds.oldxu.com.conf
server {
listen 80;
server_name ds.oldxu.com;
#处理动态请求
location / {
proxy_pass http://10.0.0.7:8080;
include proxy_params;
}
#处理静态请求
location ~* \.(png|jpg|gif|css|js)$ {
root /code/images;
expires 30d;
}
}

2.3 测试访问效果。

在这里插入图片描述

🐶3.集群动静分离实践

通过nginx负载均衡将动态请求和静态请求进行分离。
在这里插入图片描述

3.0 环境准备

系统服务服务地址
CentOS7.5负载均衡Nginx Proxy10.0.0.5
CentOS7.5静态资源Nginx Static10.0.0.7
CentOS7.5动态资源Tomcat Server10.0.0.8

3.1 在10.0.0.7服务器上配置静态资源。

[root@web01 conf.d]# cat ds.oldxu.com.conf
server {
listen 80;
server_name ds.oldxu.com;
root /code/images;
location / {
index index.html;
expires 30d;
}
}
# 准备目录, 以及静态相关图片
[root@web01 ~]# mkdir /code/images -p
[root@web01 ~]# wget -O
/code/images/nginx.png
http://nginx.org/nginx.png
[root@web01 ~]# systemctl restart nginx

3.2 在10.0.0.8服务器上配置动态资源

[root@web01 ~]# yum install -y tomcat
[root@web01 ~]# mkdir
/usr/share/tomcat/webapps/ROOT
[root@web01 ~]# vim
/usr/share/tomcat/webapps/ROOT/index.jsp
<%@ page language="java"
import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>Nginx+Tomcat动静分离</title>
</head>
<body>
<%
Random rand = new Random();
out.println("<h2>动态资源</h2>");
out.println(rand.nextInt(99)+100);
%>
<h2>静态图片</h2>
<img src="nginx.png" />
</body>
</html>
#重启tomcat服务
[root@web01 ~]# systemctl start tomcat

3.3 在负载均衡10.0.0.5上配置调度,根据不同的url调度到不同的服务器。

root@lb01 conf.d]# cat
proxy_ds.oldxu.com.conf
upstream static {
server 10.0.0.7:80;
}
upstream java {
server 10.0.0.8:8080;
}
server {
listen 80;
server_name ds.oldxu.com;
location / {
proxy_pass http://java;
}
location ~* .*\.(png|gif|jpg|css|js)$ {
proxy_pass http://static;
}
}
[root@lb01 conf.d]# systemctl restart nginx

3.4测试效果动静分离效果。

在这里插入图片描述

3.5 模拟静态资源集群故障。动态内容依旧能正常访问, 静态内容则不会被请求到。

在这里插入图片描述

🐶4.Uwsgi代理基本概述

4.1 什么是wsgi

WSGI,全称 Web Server Gateway Interface 是为 Python 语言 定义的 Web 服务器 和
Web应用程序 之间的一种简单通用的 接口。 WSGI 的官方定义,the Python Web Server Gateway
Interface。从名字就可以看出来,这是一个Gateway网关。那 么网关的作用就是在协议之间进行转换。

在这里插入图片描述

4.2 什么是uWSGI

uWSGI实现了WSGI、http等数据交换协议。简单来说:我们 将项目通过uwsgi方式运行,就可以直接对外提供服务,而无需依托于Nginx。

在这里插入图片描述

4.3 uWSGI为什么需要nginx?

通常情况下Python中的Django框架或Flask框架可以通过 Uwsgi 方式对外提供服务。为什么还需要Nginx?
1.安全
2.效率

在这里插入图片描述

🐶5. Uwsgi代理配置场景

步骤一、安装 python3 的环境
步骤二、安装 Django 框架、uwsgi
步骤三、配置Django工程、
步骤四、配置uWSGI、配置Nginx

5.1 安装Python3环境

[root@web01 ~]# yum install openssl-devel
bzip2-devel expat-devel gdbm-devel readlinedevel
\
sqlite-devel gcc gcc-c++ openssl-devel zlib
zlib-devel python3 python3-devel -y

5.2 安装Django框架和uwsgi

[root@web01 ~]# pip3 install -i
https://mirrors.aliyun.com/pypi/simple/ --
upgrade pip
[root@web01 ~]# pip3 install -i
https://mirrors.aliyun.com/pypi/simple/
django==2.1.8
[root@web01 ~]# pip3 install -i
https://mirrors.aliyun.com/pypi/simple/ uwsgi

5.3 使用Django新建工程,运行如下指令

[root@web02 opt]# django-admin.py
startproject demosite
[root@web01 ~]# cd demosite
[root@web01 demosite]# python3 manage.py
runserver 0.0.0.0:8002

5.4 在浏览器内输入http://IP:8002 正常会提示Theinstall worked successfully! Congratulations!

[root@web01 demosite]# vim
demosite/settings.py 如果出现ALLOWED_HOSTS报错
ALLOWED_HOSTS = ['*']

5.5 配置Django工程以由uwsgi方式运行。

[root@web01 ~]# vim /opt/demosite/uwsgi.ini
[uwsgi]
#uwsgi监听的端口
socket = 127.0.0.1:9999
#uwsgi启动进程数
workers = 2
#最大接收的请求数
max-requests = 1000
#buffer缓冲区大小
buffer-size = 30000
#进程pid存放路径
pidfile = /run/uwsgi.pid
#uwsgi日志存储路径
daemonize = /var/log/uwsgi.log

5.6 通过uwsgi方式启动django项目,默认监听127.0.0.1,需要配置nginx代理才能对外提供访问。

[root@web01 ~]# uwsgi --ini
/opt/demosite/uwsgi.ini
[root@web01 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address
Foreign Address State
PID/Program name
tcp 0 0 127.0.0.1:9999
0.0.0.0:* LISTEN
23121/uwsgi
#配置Nginx的uwsgi代理
[root@web01 ~]# cat
/etc/nginx/conf.d/py.conf
server {
listen 80;
server_name py.oldxu.com;
client_max_body_size 100M;
location / {
index index.html; #默认返回
页面
uwsgi_pass 127.0.0.1:9999;
uwsgi_param UWSGI_CHDIR
/opt/demosite; #工程所在的路径
uwsgi_param UWSGI_SCRIPT
demosite.wsgi; #demosite/wsgi接口文件
include uwsgi_params;
}
}

5.7 访问效果如下图所示

在这里插入图片描述

🐶 6.Uwsgi代理项目实践

使用NginxUWSGI代理方式部署Python的Django项目

6.1 下载Django的博客系统项目

#1.下载博客系统项目并解压
[root@web01 ~]# mkdir -p /code && cd /code
[root@bgx code]# unzip pythonav.zip
#2.安装该项目所需的依赖包软件
[root@web01 ~]# pip3 install -i
https://pypi.doubanio.com/simple/ -r
/code/pythonav/requirements.txt

6.2 导入Django项目的数据库

#1.安装mariadb
[root@web01 ~]# yum install mariadb mariadbserver
-y
[root@web01 ~]# systemctl start mariadb
[root@web01 ~]# mysql
MariaDB [(none)]> create database pythonav;
MariaDB [(none)]> exit
#2.配置项目连接数据库信息
[root@web01 pythonav]# vim
/code/BBS/BBS/settings.py
DATABASES = {
'default': {
'ENGINE':
'django.db.backends.mysql',
'NAME': 'pythonav',
'HOST': "127.0.0.1",
'USER': 'root',
'PASSWORD': '',
'PORT': 3306,
}
}
#3.初始化数据库
[root@web01 pythonav]# python3 manage.py
makemigrations
[root@web01 pythonav]# python3 manage.py
migrate
#4.创建超级管理员用户
[root@web02 pythonav]# python3 manage.py
createsuperuser
Username (leave blank to use 'root'): oldxu
Email address: 552408925@qq.com
Password: #输入密码oldxu.com
Password (again): #确认密码oldxu.com
Superuser created successfully.

6.3 收集静态资源至指定位置存储

[root@web01 pythonav]# python3 manage.py
collectstatic

6.4 配置Uwsgi启动Django项目

[root@web01 pythonav]# cat
pythonav_uwsgi.ini
[uwsgi]
#uwsgi监听的端口
socket = 127.0.0.1:8811
#指定项目所在路径
chdir = /code/pythonav/
#指定项目入口文件
wsgi-file = pythonav/wsgi.py
#uwsgi启动的进程数量与线程数量
processes = 4
threads = 10
#最大接收的请求数
max-requests = 1000
#buffer缓冲区大小
buffer-size = 30000
#进程pid存放路径
pidfile = /run/uwsgi-pythonav.pid
#uwsgi日志存储路径
daemonize = /var/log/uwsgi-pythonav.log
#启动uwsgi
[root@web01 ~]# uwsgi --ini
/code/pythonav/pythonav_uwsgi.ini

6.5 配置Nginx Uwsgi反向代理

[root@web02 pythonav]# cat
/etc/nginx/conf.d/pythonav.oldxu.com.conf
server {
listen 80;
server_name pythonav.oldxu.com;
client_max_body_size 100M;
location /static {
alias /opt/pythonav/static;
}
location / {
uwsgi_pass 127.0.0.1:8811;
include uwsgi_params;
}
}

6.7 浏览器访问该博客项目

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值