ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-06 02:00:52  阅读:218  来源: 互联网

标签:opt LVMP BBS nginx Location web01 bbs root uwsgi


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)

image

image

image

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/

标签:opt,LVMP,BBS,nginx,Location,web01,bbs,root,uwsgi
来源: https://www.cnblogs.com/PyLy/p/15769507.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有