1. 动静分离概述:
1.1nginx动静分离
静态页面,静态页面,是指互联网架构中,几乎不变的页面 有与之匹配的技术架构来加速,例如:CDN nginx squid/varnish
动态页面: 动态页面,是指互联网架构中,不同用户不同场景访问,都不一样的页面,例如:百度搜索结果页 淘宝商品列表页 速运个人订单中心页
动静分离:动态资源(jsp、ftl、thymeleaf)与静态资源(js、css、img)分开部署。
通过中间件将动静分离和静态请求进行分离 可以减少不必要的请求消耗,同事能减少请求的延时。 动静分离后,即使动态服务不可用,但静态资源不会受到影响
2.nginx动静分离
2.1 部署Tomcat WebServer
注意:tomcat默认运行在8080端口,注意端口占用。
部署Tomcat YUM安装和二进制安装
1.yum安装版本较低 2 .二进制安装版本高
1.安装JAVA
[root@web01 ~]# yum install java -y
2.下载Tomcat
官网下载地址—-> 链接wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz
3.安装Tomcat
[root@web01 ~]# mkdir /soft
[root@web01 ~]# tar xf apache-tomcat-9.0.34.tar.gz -C /soft/
[root@web01 ~]# ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat
5.启动Tomcat
[root@web01 ~]# /soft/tomcat/bin/startup.sh
6.接入Nginx
[root@web01 ~]# cat /etc/nginx/conf.d/tomcat.oldxu.com.conf
server {
listen 80;
server_name tomcat.oldxu.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(png|gif)$ {
root /code/images;
expires 30d; #图片缓存过期时间
}
}
7.配置动静分离演示
[root@web01 ~]# rm -rf /soft/tomcat/webapps/ROOT/*
[root@web01 ~]# cat /soft/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>
[root@web01 ~]# /soft/tomcat/bin/shutdown.sh
#停止tomcat
[root@web01 ~]# /soft/tomcat/bin/startup.sh
#启动tomcat
[root@web01 ~]# mv /code/images/tomcat.png /code/images/nginx.png
2.2 集群环境动静分离效果模拟
负载均衡 | 动态资源处理程序 | 静态(图片等)资源处理程序 |
---|---|---|
lb 10.0.0.5 | tomcat 10.0.0.7 | nginx 10.0.0.8 |
静态资源10.0.0.8
[root@web02 ~]#cat /etc/nginx/conf.d/ds.oldxu.com.conf
server {
listen 80;
server_name ds.oldxu.com;
root /code/images;
location / {
index index.html;
}
}
[root@web02 ~]#
mkdir /code/images
[root@web02 ~]#cd /code/images/ && wget [http://nginx.org/nginx.png](http://nginx.org/nginx.png)
[root@web02 ~]#systemctl restart nginx
- 动态资源代码 10.0.0.7
[root@web01 ~]#cat /soft/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>
- 接入负载均衡 10.0.0.5
[root@lb01 ~]# cat/etc/nginx/conf.d/proxy_ds.oldxu.com.conf
```bash upstream java { server 172.16.1.7:8080; }
upstream static { server 172.16.1.8:80; }
server { listen 80; server_name ds.oldxu.com;
location ~* \.(png|gif|jpg)$ {
proxy_pass http://static;
include proxy_params;
}
location / {
proxy_pass http://java;
include proxy_params;
}
}
[root[@lb01 ](/lb01 ) ~]# `systemctl restart nginx`
<a name="NgQ3e"></a>
# *3. Nginx+Django框架项目(pytnon编写)
---
<a name="zvih8"></a>
## 简介:
> **djiango是一个开放源代码的Web应用框架,由Python写成。采用了MVT的软件设计模式,即模型Model,视图View和模板Template。2005年7月在BSD许可证下发布。**
**
<a name="0CFik"></a>
## 3.1 图解
**3.1.1 实现原理**
![image.png](https://cdn.nlark.com/yuque/0/2020/png/1581532/1604373366552-fa7b4621-2189-41e3-a660-7c3fc3b1e76e.png#align=left&display=inline&height=159&margin=%5Bobject%20Object%5D&name=image.png&originHeight=634&originWidth=2026&size=544278&status=done&style=none&width=507)
**3.1.2 部署流程**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1581532/1604392902924-88e05230-151f-4539-b8d6-a9b297b83648.png#align=left&display=inline&height=244&margin=%5Bobject%20Object%5D&name=image.png&originHeight=488&originWidth=772&size=60263&status=done&style=none&width=386)
<a name="Mj2gP"></a>
## 3.2 部署
<a name="exBrG"></a>
### 安装 python3 的环境
`yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel \`<br />`sqlite-devel gcc gcc-c++ openssl-devel zlib zlib-devel python3 python3-devel`
<a name="vjtms"></a>
### 安装 Django 框架、uwsgi
```bash
[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
配置Django工程
[root@web01 ~]# cd /opt
[root@web01 opt]# django-admin.py startproject demosite
[root@web01 ~]# vim /opt/demosite/demosite/settings.py
ALLOWED_HOSTS = ['*'] #授权能访问的主机
[root@web02 ~]# python3 /opt/demosite/manage.py runserver 0.0.0.0:9999 #开发人员启动姿势
配置uWSGI、配置Nginx
[root@web02 ~]# vim/opt/demosite/uwsgi.ini
[uwsgi]
socket = 127.0.0.1:9999 #uwsgi监听的端口
workers = 2 #uwsgi启动进程数
max-requests = 1000 #最大接收的请求数
buffer-size = 30000 #buffer缓冲区大小
pidfile = /run/uwsgi.pid #进程pid存放路径
daemonize = /var/log/uwsgi.log #uwsgi日志存储路径
启动
[root@web01 ~]# uwsgi —ini /opt/demosite/uwsgi.ini [uWSGI] getting INI configuration from /opt/demosite/uwsgi.ini root@web01 ~]# netstat -lntp|grep 9999 tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 32894/uwsgi
- 5.接入nginx (uwcgi_pass)
[root@web01 ~]# vim /etc/nginx/conf.d/djang.oldxu.com.conf
server {
listen 80;
server_name django.oldxu.com;
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接口文件 /opt/demosite/demosite/wsgi.py
include uwsgi_params;
}
}
本机域名解析,浏览器问
3.3 Pythonav博客项目
3.3.1 效果展示
——> pythonav代码下载
3.3.2 部署流程
4.2.1 安装python基础环境
安装基础环境过程参见上一个实验
4.2.2 安装项目所依赖的模块
这个项目需要什么模块?开发会告诉你哦
[root@web01 ~]# `unzip pythonav.zip -d /opt/`<br /> [root@web01 ~]# `cd /opt/`<br /> [root@web01 opt]# `pip3 install -i `[`https://mirrors.aliyun.com/pypi/simple/`](https://mirrors.aliyun.com/pypi/simple/)` -r /opt/pythonav/requirements.txt`
[root@web01 /opt]# cat /opt/pythonav/requirements.txt #开发告诉你要按安装那些模块 certifi==2018.11.29 chardet==3.0.4 Django==1.11 idna==2.8 Pillow==5.4.1 PyMySQL==0.9.3 pytz==2018.9 requests==2.21.0 urllib3==1.24.1
4.2.3 修改配置,连接数据库
[root@db01 ~]# mysql -uroot -p123456
MariaDB [(none)]> create database pythonav;
[root@web01 opt]# `vim /opt/pythonav/pythonav/settings.py ` #修改数据库连接配置
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'pythonav',
'USER': 'all',
'PASSWORD': '123456',
'HOST': '172.16.1.51',
'PORT': '3306',
}
}
....
4.2.4 将项目表生成出来
[root@web01 ~]# cd /opt/pythonav
[root@web01 pythonav]# python3 manage.py makemigrations
[root@web01 pythonav]# python3 manage.py migrate
4.2.5 收集静态资源至统一位置存储
[root@web01 pythonav]# python3 manage.py collectstatic
*4.2.6 通过uwsgi文件拉起项目 ( 开发常用)
[root@web01 opt]# uwsgi --ini /opt/pythonav/pythonav_uwsgi.ini
[root@web01 opt]#netstat -lntp | grep 8811
tcp 0 0 127.0.0.1:8811 0.0.0.0:* LISTEN 3068/uwsgi
随机开个端口提供访问测试 python3 /opt/pythonav/manage.py runserver 0.0.0.0:9123
4.2.7 Nginx通过uwsgi接入python站点
[root@web01 pythonav]# cat /etc/nginx/conf.d/av.etiantian.org.conf
server {
listen 80;
server_name av.etiantian.org;
location / {
uwsgi_pass 127.0.0.1:8811;
include uwsgi_params;
}
location /static {
alias /opt/pythonav/static;
}
}
浏览器访问
3.4其他开源项目(gitee.com)
- 下载Django开发的博客
[root@web02 ~]# 代码
[root@web02 ~]#unzip BBS.zip -d /code/
- 安装博客所依赖的模块( 开发会在写一个re……文件 )
[root@web02 BBS]#pip3 install -i [https://pypi.doubanio.com/simple/](https://pypi.doubanio.com/simple/) -r /code/BBS/re.txt
- 安装数据库、导入项目的数据库文件
登陆51数据库
[root@db01 ~]#mysql -uxxx -pxxxx;
MariaDB [(none)]>create database bbs charset utf8mb4;
MariaDB [(none)]>use bbs;
#进入bbs库
MariaDB [bbs]>source /root/bbs.sql;
#导入/root/bbs.sql
MariaDB [bbs]>grant all privileges on *.* to 'all'@'%' identified by 'xxxxx';
#授权远程连接的用户和密码 - 配置应用程序连接数据库的地址
[root@web02 BBS]#vim /code/BBS/BBS/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bbs',
'HOST': "172.16.1.51",
'USER': 'all',
'PASSWORD': 'oldxu.com',
'PORT': 3306,
}
}
4.配置Django项目已uwsgi方式启动
[root@web02 ~]# cat /code/BBS/uwsgi.ini
[root@web02 ~]# cat /code/BBS/uwsgi.ini
[uwsgi]
#uwsgi监听的端口
socket = 127.0.0.1:8899
#uwsgi启动进程数
workers = 2
#最大接收的请求数
max-requests = 1000
#buffer缓冲区大小
buffer-size = 30000
#进程pid存放路径
pidfile = /run/uwsgi-bbs.pid
#uwsgi日志存储路径
daemonize = /var/log/uwsgi-bbs.log
[root@web02 ~]# uwsgi --ini /code/BBS/uwsgi.ini
5.配置Nginx代理至Uwsgi服务
[root@web02 ~]# cat /etc/nginx/conf.d/bbs.oldxu.com.conf
server {
listen 80;
server_name bbs.oldxu.com;
client_max_body_size 100M;
location /static {
alias /code/BBS/static/;
expires 1d;
}
location /media {
alias /code/BBS/media/;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8899;
uwsgi_param UWSGI_SCRIPT BBS.wsgi;
uwsgi_param UWSGI_CHDIR /code/BBS;
}
}