45. Nginx + Tomcat | nginx+python | 动静分离

1. 动静分离概述:

1.1nginx动静分离

静态页面,静态页面,是指互联网架构中,几乎不变的页面
有与之匹配的技术架构来加速,例如:CDN nginx squid/varnish

动态页面: 动态页面,是指互联网架构中,不同用户不同场景访问,都不一样的页面,例如:百度搜索结果页 淘宝商品列表页 速运个人订单中心页

动静分离:动态资源(jsp、ftl、thymeleaf)与静态资源(js、css、img)分开部署。

通过中间件将动静分离和静态请求进行分离
可以减少不必要的请求消耗,同事能减少请求的延时。
动静分离后,即使动态服务不可用,但静态资源不会受到影响

2.nginx动静分离

2.1 部署Tomcat WebServer

( 校验,Tomcat 是不是能处理动态和静态请求。 )
在这里插入图片描述

注意:tomcat默认运行在8080端口,注意端口占用。

部署Tomcat YUM安装和二进制安装

1.yum安装版本较低
2.二进制安装版本高

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.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;
		expire 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.5tomcat 10.0.0.7nginx 10.0.0.8
  1. 静态资源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
[root@web02 ~]# systemctl restart nginx

  1. 动态资源 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>
  1. 接入负载均衡 10.0.0.5
    [root@lb01 ~]# cat /etc/nginx/conf.d/proxy_ds.oldxu.com.conf
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 ~]# systemctl restart nginx


3. Nginx+Python

  1. 安装 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

  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

  3. 配置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

  4. 配置uWSGI、配置Nginx
    [root@web02 ~]# cat /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@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;
	}
}

gitee.com搜索较好的开源项目

  • 下载Django开发的博客
    [root@web02 ~]#wget
    [root@web02 ~]# unzip BBS.zip -d /code/

  • 安装博客所依赖的模块( 开发会在写一个re…文件 )
    [root@web02 BBS]# pip3 install -i https://pypi.doubanio.com/simple/ -r /code/BBS/re.txt

  • 安装数据库、导入项目的数据库文件
    登陆51数据库
    [root@db01 ~]# mysql -uxxx -pxxxx;
    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 '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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值