nginx(5)

动静分离

什么的动静分离

所谓动静分离,就是把动态请求和静态请求分开处理。

为什么要做动静分离

tomcat在处理静态资源时效率不高,单默认情况下所有资源都有tomcat处理,需要进行复杂的逻辑运算,从而会导致应用响应慢,并且还会占用不必须要的系统资源。
实现动态请求和静态请求分离后,可以减少系统不必要的消耗和耗时,以便加快系统的处理性能。

如何实现动静分离

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

单机实现动静分离

(tomcat默认运行在8080端口,需要关闭本机的8080端口,以避免端口冲突。)
部署过程:

1.安装JAVA
[root@web01 ~]# yum install java -y

2.下载Tomcat
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.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.wenjie.com.conf
server  {
	listen 80;
	server_name tomcat.wenjie.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;
		expire 30d;
	}
}

tomcat的长处是专门处理解析java代码
nginx 的长处的处理静态资源
将二者互相结合那么就可以发挥二者的长处

集群的方式实现动静分离

实现方法:

环境:
lb 10.0.0.5
tomcat 10.0.0.7  动态资源处理程序
nginx  10.0.0.8  静态资源处理程序


1.静态资源10.0.0.8
[root@web02 ~]# cat /etc/nginx/conf.d/ds.wenjiecom.conf
server  {
	listen 80;
	server_name ds.wenjie.com;

	root /code/images;
	location / {
		index index.html;
	}
}
[root@web02 ~]# mkdir /code/images
[root@web02 ~]# cd /code/images/
[root@web02 images]# wget http://nginx.org/nginx.png
[root@web02 ~]# systemctl restart nginx


2动态资源  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>



3接入负载均衡 10.0.0.5
[root@lb01 ~]# cat  /etc/nginx/conf.d/proxy_ds.wenjie.com.conf
upstream java {
	server 172.16.1.7:8080;
}

upstream static {
	server 172.16.1.8:80;
}

server {
	listen 80;
	server_name ds.wenjie.com;

	location ~* \.(png|gif|jpg)$ {
		proxy_pass http://static;
		include proxy_params;
	}

	location / {
		proxy_pass http://java;
		include proxy_params;
	}
}

[root@lb01 ~]# systemctl restart nginx

这样我们的所有静态资源都在web02上
动态资源都在web01上

Uwsgi代理

什么是wsgi

WSGI是Web Server Gateway Interface的缩写。以层的角度来看,WSGI所在层的位置低于CGI。但与CGI不同的是WSGI具有很强的伸缩性且能运行于多线程或多进程的环境下,这是因为WSGI只是一份标准并没有定义如何去实现。实际上WSGI并非CGI,因为其位于web应用程序与web服务器之间,而web服务器可以是CGI,mod_python(注:现通常使用mod_wsgi代替),FastCGI或者是一个定义了WSGI标准的web服务器就像python标准库提供的独立WSGI服务器称为wsgiref。

什么是uwsgi

实现了wsgi、uwsgi等数据交换协议,nginx是实现uwsgi协议最具代表性的web软件

uwsgi为什么需要使用nginx

  1. 安全
    后端服务直接以Xhttp对外提供访问,往往会暴露后端的真实服务,如果使用nginx 可以很好的隐藏后端的服务,并且Nginx能够实现访问控制、访问限制、以及Rewnite. HTTPS 等功能。
  2. 效率
    nginx可以直接处理静态资源, 然后将动态内容通过UWSGI协议转发给后端Django, 以此实现动静分离,以便更好的响应用户请求。

配置uwsgi

步骤一、安装 python3 的环境
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
 
步骤二、安装 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
 
步骤三、配置Django工程
[root@web02 ~]# cd /opt
[root@web02 opt]# django-admin.py startproject demosite
 
 
 
[root@web02 ~]# 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 ~]# cat /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
 
[root@web02 ~]# uwsgi --ini /opt/demosite/uwsgi.ini
[uWSGI] getting INI configuration from /opt/demosite/uwsgi.ini
[root@web02 ~]# netstat -lntp|grep 9999
tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      32894/uwsgi
 
 
[root@web02 ~]# 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;
    }
}
 
---------django开发的博客:差劲
 
gitee.com搜索较好的开源项目
 
 
1.下载Django开发的博客
    [root@web02 ~]# wget http://cdn.xuliangwei.com/BBS.zip
    [root@web02 ~]# unzip BBS.zip  -d /code/
 
2.安装博客所依赖的模块( 开发会在写一个re......文件 )
 
    [root@web02 BBS]# pip3 install -i https://pypi.doubanio.com/simple/ -r /code/BBS/re.txt
 
 
3.安装数据库、导入项目的数据库文件
 
登陆51数据库
[root@db01 ~]# mysql -uroot -poldxu.com
MariaDB [(none)]> create database bbs charset utf8;
MariaDB [(none)]> use bbs;                   #进入bbs库
MariaDB [bbs]> source  /root/bbs.sql             #导入/root/bbs.sql
MariaDB [bbs]> grant all privileges on *.* to 'all'@'%' identified by 'oldxu.com';       #授权远程连接的用户和密码
 
 
 
配置应用程序连接数据库的地址
 
[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;
    }
}
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值