180天云计算小白到大神-Nginx动静分离实战

08.Nginx动静分离实战

08.Nginx动静分离实战

1.动静分离基本介绍

1.1 什么是动静分离

1.2 为何需要动静分离

1.3 如何实现动静分离

2.单机动静分离实践

2.1 Tomcat配置

2.2 Nginx配置

3.集群动静分离实践

3.1 环境准备

3.3 配置动态节点

3.2 配置静态节点

3.4 配置负载均衡

3.5 测试集群动静分离

4.Uwsgi代理基本概述

4.1 什么是wsgi

4.2 什么是uWSGI

4.3 uWSGI结合nginx

5.Uwsgi代理配置场景

5.1 安装Python3

5.2 安装Django

5.3 创建Django项目

5.4 访问Django项目

5.5 配置Uwsgi运行项目

5.6 配置Nginx代理Uwsgi

5.7 浏览器访问测试

6.Uwsgi代理项目实践

6.1 下载Django博客系统

6.2 导入Django项目数据库

6.3 收集Django静态文件

6.4 配置Uwsgi运行项目

6.5 配置Nginx代理Uwsgi

6.6 浏览器访问博客项目

1.动静分离基本介绍

1.1 什么是动静分离

简单来说就是将动态请求和静态请求分开处理。

1.2 为何需要动静分离

首先Tomcat 应用服务器在处理静态资源时效率不高,但默认情况下无论 “动态、静态“ 资源都是由 tomcat 处理,而Tomcat 在处理静态资源时需要进行逻辑运算,从而会导致应用响应慢,并且会占用不必要的系统资源。

那么借助Nginx 实现动态资源请求和静态资源请求分离后,可以减少系统不必要的消耗和延时。以便加快系统的处理性能。

1.3 如何实现动静分离

Nginx 通过用户请求的 uri 来区分请求的类型,并转发给不同的服务端。

如果请求的uri 包含 png、jpg 等资源则由 Nginx

处理;

如果请求的 uri 包含 php、jsp 等资源则代理至 Tomcat 处理;

2.单机动静分离实践

单机实现动静分离nginx + Tomcat

2.1 Tomcat配置

[root@web01 ~]# yum install java -y

[root@web01 ~]# wget

https://mirrors.tuna.tsinghua.edu.cn/apache

/tomcat/tomcat-9/v9.0.52/bin/apache-tomcat-

9.0.52.tar.gz

[root@web01 ~]# mkdir /soft [root@web01 ~]# tar xf apache-tomcat-9.0.52.tar.gz -C /soft/

[root@web01 ~]# ln -s /soft/apache-tomcat-9.0.52/ /soft/tomcat

[root@web01 ~]# /soft/tomcat/bin/startup.sh Using CATALINA_BASE: /soft/tomcat Using CATALINA_HOME: /soft/tomcat

Using CATALINA_TMPDIR: /soft/tomcat/temp

Using JRE_HOME: /usr

Using CLASSPATH:

/soft/tomcat/bin/bootstrap.jar:/soft/tomcat

/bin/tomcat-juli.jar

Using CATALINA_OPTS:

Tomcat started.

2.2 Nginx配置

#配置动静分离

[root@web01 ~]# cat /etc/nginx/conf.d/ds.oldxu.net.conf server {

listen 80;

server_name java.oldxu.net;

#处理动态请求

location / {

proxy_pass http://10.0.0.7:8080; include proxy_params;

}

#如果匹配到.png .jpg这样的后缀,则让其通过Nginx读取本地/code/images下的资源文件

location ~* .(png|jpg)$ {

root /code/images;

expires 30d;

}

}

3.集群动静分离实践

通过nginx 负载均衡将动态请求和静态请求进行分离,基于用户请求URI 实现路由功能;

3.1 环境准备

系统 服务 服务 地址

CentOS7.5 负载均衡 Nginx Proxy 10.0.0.5

CentOS7.5 动态资源 Nginx Static 10.0.0.7

CentOS7.5 静态资源 Tomcat Server 10.0.0.8

3.3 配置动态节点

#在10.0.0.7服务器上配置动态资源

[root@web01 ~]# /soft/tomcat/bin/shutdown.sh [root@web01 ~]# rm -rf /soft/tomcat/webapps/ROOT/*

#编写java配置

[root@web01 ~]# vim /soft/tomcat/webapps/ROOT/index.jsp <%@ page language=“java” import=“java.util.*” pageEncoding=“utf-8”%>

Nginx+Tomcat动静分离

<%

Random rand = new Random(); out.println(“

动态资源

”); out.println(rand.nextInt(99)+100);

%>

静态图片

[root@web01 ~]# /app/tomcat/bin/startup.sh

3.2 配置静态节点

#在10.0.0.8服务器上配置静态资源

[root@web02 ~]# cat /etc/nginx/conf.d/ds.oldxu.net.conf server {

listen 80;

server_name ds.oldxu.net;

root /code/images;

location / {

index index.html;

}

}

#准备目录, 以及静态相关图片

[root@web02 ~]# mkdir /code/images [root@web02 ~]# wget -O /code/images/nginx.png http://nginx.org/nginx.png [root@web02 ~]# systemctl reload nginx

3.4 配置负载均衡

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

root@lb01 conf.d]# cat proxy_ds.oldxu.net.conf upstream java {

server 172.16.1.7:8080;

}

upstream static {

server 172.16.1.8:80;

}

server {

listen 80;

server_name ds.oldxu.net;

location / {

proxy_pass http://java;

include proxy_params;

}

location ~* .*.(png|gif)$ { proxy_pass http://static;

}

}

[root@lb01 conf.d]# systemctl restart nginx

3.5 测试集群动静分离

测试效果动静分离效果

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

4.Uwsgi代理基本概述

4.1 什么是wsgi

WSGI ,全称 Web Server Gateway Interface 是为 Python 语言定义的 Web 服务器 和 Web 应用程序之

间的一种简单通用的接口。

WSGI 的官方定义,the Python Web Server Gateway Interface。从名字就可以看出来,这是一

个 Gateway 网关。那么网关的作用就是在协议之间进行转换。

也就是说,WSGI 就像是一座桥梁,一边连着web 服务器,另一边连着web 应用程序。

4.2 什么是uWSGI

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

4.3 uWSGI结合nginx

通常情况下Python 中的Django框架或Flask框架可以通过Uwsgi 方式对外提供服务。为什么还需要

Nginx

1.安全:后端服务直接以http 对外提供访问,往往会暴露后端的真实服务,如果使用nginx 可以隐藏后端的服务,并且nginx 能够实现安全限制、Rewrite 、 HTTPS 等功能(这些都是uwsgi 无法实现的。)

2.效率:nginx 可以直接处理静态资源,然后将动态内容通过uWSGI 协议转发给后端Django ,实现动静分离,提供更好的请求与响应。

Nginx+Uwsgi+Django
参考资料

5.Uwsgi代理配置场景

步骤一、安装 python3 的环境

步骤二、安装 Django 框架以及uwsgi

步骤三、配置 Django 工程

步骤四、配置 uWSGI 、配置 Nginx

5.1 安装Python3

[root@web01 ~]# yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel \

sqlite-devel gcc gcc-c++ openssl-devel zlib zlib-devel python3 python3-devel -y

5.2 安装Django

#安装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项目

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

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

5.4 访问Django项目

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

如果出现ALLOWED_HOSTS 报错,修改如下配置即可;

[root@web01 demosite]# vim demosite/settings.py ALLOWED_HOSTS = [’*’]

5.5 配置Uwsgi运行项目

#配置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 配置Nginx代理Uwsgi

#通过uwsgi方式启动django项目,默认监听127.0.0.1 [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,使用Nginx代理uwsgi应用 [root@web01 ~]# cat /etc/nginx/conf.d/py.conf server {

listen 80;

server_name py.oldxu.net; 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 项目

1.安装python3环境 过;

2.安装Django环境 过

3.下载博客系统、安装博客系统所需要的模块;

4.配置博客链接的数据库、在数据上创建对应的库名;

5.导入博客的数据内容;

6.收集所有的静态资源文件到统一的一个目录中;

7.配置uwsgi运行

8.配置Nginx反向代理uwsgi

6.1 下载Django博客系统

#1.下载博客系统项目并解压

[root@web01 ~]# mkdir -p /code && cd /code

[root@bgx code]# wget

http://cdn.xuliangwei.com/pythonav.zip

[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 mariadb-server -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.net

Password (again): #确认密码oldxu.net Superuser created successfully.

6.3 收集Django静态文件

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

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

6.4 配置Uwsgi运行项目

#配置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

#配置Nginx Uwsgi反向代理 [root@web02 pythonav]# cat /etc/nginx/conf.d/pythonav.oldxu.net.conf server {

listen 80;

server_name av.oldxu.net; client_max_body_size 100M;

location /static {

alias /opt/pythonav/static;

}

location / {

uwsgi_pass 127.0.0.1:8811; include uwsgi_params;

}

}

6.6 浏览器访问博客项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值