Location匹配、LVMP架构、BBS服务部署

Location匹配、LVMP架构、BBS服务部署

目录

1、Location匹配

  • Location匹配规则

    匹配符 匹配规则 优先级
    = 精确匹配 1
    ^~ 以某个字符串开头 2
    ~ 区分大小写的正则匹配 3
    ~* 不区分大小写的正则匹配 3
    / 通用匹配,任何请求都会匹配到 4
案例演示
	[root@web01 conf.d]# cat test.conf 
    server {
        listen 80;
        server_name _;
        location / {
            default_type text/html;
            return 200 "Hello World";
        }
        location ~* /python {
            default_type text/html;
            return 200 "Location ~*";
        }
        location ~ /Python {
            default_type text/html;
            return 200 "Location ~";
        }
        location ^~ /python {
            default_type text/html;
            return 200 "Location ^~";
        }
        location = /python {
            default_type text/html;
            return 200 "Location =";
        }
    }
注:
	1、server_name后面的 ‘_’ 指的是可以使用任意域名进行访问
	2、‘=’为精确匹配,精确匹配不遵循先后顺序,总是优先进行匹配,在匹配到以后不再进行其他的匹配规则
	3、除去精确匹配外,其他的匹配规则都遵循匹配的先后顺序,且匹配到一个就停止匹配

2、LNMP架构

LNMP是一套技术的组合,L=Linux、N=Nginx、M~=MySQL、P~=Python
webApp采用python的web框架Django开发
首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。
8转交给后端的Python程序处理

2.2、uwsgi

因为nginx不支持wsgi协议,无法直接调用py开发的webApp。
在nginx+uWsgi+Django的框架里,nginx代理+webServer,uWsgi是wsgiServer,Django是webApp。
nginx接收用户请求,并判定哪些转发到uWsgi,uWsgi再去调用pyWebApp。

2.1、uWSGI简介

	1、什么是uWSGI
	
    	uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http	等协议。Nginx中HttpUwsgiModule的作用是与uWSGI			服务器进行交换。

			要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
	2、WSGI / uwsgi / uWSGI的区别
        1、WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程			   序)通信的一种规范。相当于一个桥梁。连接 服务器与应用程序。服务器方调用应用程序,提供环境信息,以及一			  个回调函数,并接收web内容作为返回值

        2、uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

        3、而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

        4、uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi 			   packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

	3、浏览器请求一个页面的流程
	
        1、浏览器发送请求给服务器,包含请求头和请求体
        
        2、服务器解析请求头和请求体
        
        3、服务器根据请求信息来处理请求,生成返回内容
        
        4、服务器生成响应头和响应体
        
        5、服务器返回响应给浏览器,浏览器显示给用户
  • 浏览器请求一个页面的流程(图1/图2/图3)

Location匹配、LVMP架构、BBS服务部署

Location匹配、LVMP架构、BBS服务部署

Location匹配、LVMP架构、BBS服务部署

2.3、uwsgi服务部署

1、创建用户
	[root@web01 opt]# groupadd django -g 888
    [root@web01 opt]# useradd django -u 888 -g 888 -r -M -s 	/bin/sh

2、安装依赖软件
	[root@web01 opt]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y

3、安装Django和uwsgi
	[root@web01 opt]# pip3 install django
	[root@web01 opt]# pip3 install uwsgi
4、创建项目
	[root@web01 opt]# cd /opt 
    [root@web01 opt]# django-admin startproject linux  # 创建linux项目
    [root@web01 opt]# cd linux  # 切换到linux项目目录里
    [root@web01 opt]# django-admin startapp app01  # 在linux项目里创建一个app01
    [root@web01 linux]# vim linux/settings.py  # 在linux项目里编辑配置文件 
    ALLOWED_HOSTS = ['*']  # 将配置文件里的该项添加为允许任意ip访问
    DATABASES = {}  # 将配置文件里的数据库修改为空
5、启动测试
	[root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000

'''
	浏览器输入本机ip地址,端口号为8000,出现django界面说明项目配置成功,但是我们只能通过python服务去启动,uwsgi是由c语言开发的,所以在运作速度上要比python快很多,所以下面我们要对uwsgi进行相关的配置,使我们可以通过uwsgi去代理django服务
'''

6、编辑项目配置文件
	创建项目配置文件
	[root@web01 linux]# vim /opt/linux/myweb_uwsgi.ini
	将以下配置信息写入文件中并保存
	[uwsgi]
    # 端口号
    socket          = :8000
    # 指定项目的目录(路径可以是相对路径也可以是绝对路径)
    chdir           = /opt/linux
    # wsgi文件路径(路径可以是相对路径也可以是绝对路径)
    wsgi-file       = /opt/linux/linux/wsgi.py
    # 模块wsgi路径
    module          = linux.wsgi
    # 是否开启master进程(master是对我们的work进程进行实时监控的)
    master          = true
    # 工作进程的最大数目(工作进程指的就是worke进程数)
    processes       = 4
    # 结束后是否清理文件(结束后清理一些垃圾文件)
    vacuum          = true

7、启动uwsgi
	[root@web01 linux]# uwsgi -d --ini /opt/linux/myweb_uwsgi.ini  --uid 666
	参数介绍:
		-d		: 以守护进程的方式运行(即在后台运行)
		--ini	:指定配置文件的路径
		--uid	:指定启动的用户id(一般不以root用户运行)

	'''
		执行完上述步骤后我们在浏览器访问会发现访问失败,这是因为uwsgi支持TCP协议,而我们通过浏览器访问使用的是HTTP协议,之前说过,TCP协议包括HTTP协议,但是HTTP协议不包括TCP协议,所以这里我们需要将HTTP协议转化为TCP协议,即通过我们的nginx服务代理来完成下面的协议转换

8、编辑nginx配置文件
	[root@web01 ~]# vim /etc/nginx/conf.d/python.conf
	server {
    listen 80;
    # 域名,需要在本机电脑的hosts文件里进行域名解析
    server_name py.test.com;  
    location / { 
        # uwsgi_params是适用于python服务的设置,存在于/etc/nginx下
        include uwsgi_params;
        # 后面8000端口要和/opt/linux/myweb_uwsgi.ini文件中的socket保持一致
        uwsgi_pass 127.0.0.1:8000;
        # 访问超时的时间
        uwsgi_read_timeout 2;
        # 定义UWSGI_SCRIPT变量,和/opt/linux/myweb_uwsgi.ini文件中的moudle保持一致
        uwsgi_param UWSGI_SCRIPT linux.wsgi;
        # 定义UWSGI_CHDIR变量,和/opt/linux/myweb_uwsgi.ini文件中的chdir保持一致
        uwsgi_param UWSGI_CHDIR /opt/linux;
        index  index.html index.htm;
        client_max_body_size 35m;
    }
}

9、重启nginx服务
	[root@web01 ~]# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    [root@web01 ~]# systemctl restart nginx
10、测试
	浏览器通过以下网址进行访问
	http://www.py.com/

11、压力测试
	通过压力测试来对比uwsgi和python以及nginx对静态请求的一些反馈结果
	

3、部署BBS项目

1、部署数据库
	[root@db01 ~]# yum install mariadb* -y

2、启动数据库
	[root@db01 ~]# systemctl start mariadb

3、登录mysql
	[root@db01 ~]# mysql

3、远程连接MySQL数据库(在mysql里执行)
	1、创建用户
		MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;  # root > 用户名;123456 > 密码
	2、连接
		MariaDB [(none)]> FLUSH PRIVILEGES;
	3、创建数据库
		MariaDB [(none)]> CREATE DATABASE `bbs` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

4、部署bbs	(返回到web01服务器进行操作)
	1、上传代码
		解压
            [root@web01 ~]# unzip bbs.zip
		移动到/opt/目录下
            [root@web01 ~]# mv bbs /opt/
	2、数据库迁移
		1、切换到 /opt/bbs/app01/migrations目录下,将__init__.py文件的其他文件全部移除
			[root@web01 ~]# cd /opt/bbs/app01/migrations
			[root@web01 migrations]# rm -rf 00*
			[root@web01 migrations]# rm -rf __pycache__/
		2、切换到 /opt/bbs/目录下进行后续操作
			[root@web01 migrations]# cd /opt/bbs/
		3、修改django版本
			卸载django
			1、关闭linux项目进程
                [root@web01 bbs]# ps -ef | grep uwsgi
                www        2829      1  0 21:42 ?        00:00:00 uwsgi -d --ini /opt/linux/myweb_uwsgi.ini --uid 666
                www        2831   2829  0 21:42 ?        00:00:00 uwsgi
                www        2832   2829  0 21:42 ?        00:00:00 uwsgi
                www        2833   2829  0 21:42 ?        00:00:00 uwsgi
                www        2834   2829  0 21:42 ?        00:00:00 uwsgi
                root       3264   1957  0 23:55 pts/0    00:00:00 grep --color=auto uwsgi
            [root@web01 bbs]# kill -9 2829
			2、卸载django
				[root@web01 bbs]# pip3 uninstall django
			3、安装1.11版本django
				[root@web01 bbs]# pip3 install django==1.11

		4、安装mysql数据库插件
			[root@web01 bbs]# pip3 install pymysql

		5、修改数据库连接
                [root@web01 bbs]# vim bbs/settings.py
                ALLOWED_HOSTS = ['*']  # 允许任意ip进行访问
                DATABASES = {
                    'default': {
                        'ENGINE': 'django.db.backends.mysql',
                        'NAME': 'bbs',  # 数据库名称
                        'USER': 'root', # 数据库用户名
                        'PASSWORD': '123456',  # 数据库用户密码
                        'HOST': '172.16.1.61',  # 数据库的ip地址
                        'PORT': 3306,
                        'CHARSET': 'utf8'
                    }
           		 }
		6、创建数据库迁移文件
			[root@web01 bbs]# python3 manage.py makemigrations
		7、数据库迁移
			[root@web01 bbs]# python3 manage.py migrate
	3、配置uwsgi配置文件
		1、配置uwsgi配置文件
            [root@web01 ~]# vim /opt/bbs/myweb_uwsgi.ini
            [uwsgi]
            # 端口号
            socket            = :8002
            # 指定项目的目录
            chdir           = /opt/bbs
            # wsgi文件路径
            wsgi-file       = bbs/wsgi.py
            # 模块wsgi路径
            module          = bbs.wsgi
            # 是否开启master进程
            master          = true
            # 工作进程的最大数目
            processes       = 4
            # 结束后是否清理文件
            vacuum          = true
		2、启动uwsgi
            [root@web01 ~]# uwsgi -d --ini /opt/bbs/myweb_uwsgi.ini --uid 666
	4、配置nginx配置文件
		1、配置nginx配置文件
			[root@web01 ~]# vim /etc/nginx/conf.d/bbs.conf
			server {
            listen 80;
            server_name bbs.test.com;
            location / { 
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8002;
                uwsgi_read_timeout 2;
                uwsgi_param UWSGI_SCRIPT bbs.wsgi;
                uwsgi_param UWSGI_CHDIR /opt/bbs;
                index  index.html index.htm;
                client_max_body_size 35m;
            }
        2、重启nginx
        	[root@web01 ~]# nginx -t
            nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
            nginx: configuration file /etc/nginx/nginx.conf test is successful
            [root@web01 ~]# systemctl restart nginx
 5、测试访问bbs服务
        浏览器输入http://bbs.test.com/
上一篇:Jsonhelper类


下一篇:部署BBS项目