Linux架构之LNMP

1. location

使用nginx location 可以控制访问网站的路径,但一个server可以有多个location配置,多个location的优先级该如何区分

1.1 location 匹配符号

匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 3
/ 通用匹配,任何请求都会匹配到 4
server{
    listen 80;
    server_name _;
    
    location / {
        default_type txt/html;
        return 200 "hello world";
    }
}


server{
    listen 80;
    server_name _;
    
    location ~* /python {
        default_type txt/html;
        # text??????
        return 200 "location ~*";
    }
    
    location ~ /Python {
        default_type txt/html;
        return 200 "location ~";
    }
    
    location ^~ /python {
        default_type txt/html;
        return 200 "location ^~";
    }
    
    location = /python {
        default_type txt/html;
        return 200 "location ="
    }
}


2. LNMP架构

LNMP是一套技术的组合,L=Linux,N=ngxin,M~=MySQL,P~=Python

首先nginx服务是不能处理动态请求,那么当用户发起动态请求时,nginx又是如何进行处理的。
	1.静态请求:请求的内容是静态文件就是静态请求
    	1.静态文件:文件上传到服务器,永远不会改变的文件就是静态文件
        2.html就是一个标准的静态文件
    2.动态请求:请求的内容是动态的就是动态请求。
    	不是真实存在服务器上的内容,是通过数据库或者其他服务拼凑成的数据
   
当用户发起http请求,请求会被nginx处理,如果是静态资源请求nginx则之间返回,
如果是动态请求nginx则通过uwsgi协议转交给后端的python程序处理。

2.1 uwsgi

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

2.2 uwsgi服务部署

web01中

1. 创建用户
groupadd django -g 888
useradd django -u 888 -g 888 -r -M -s /bin/sh

2. 安装依赖软件
yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y

3. 安装Django和uwsgi
pip3 install django
pip3 install uwsgi  # 安装时容易出错


4. 创建项目
cd /opt
django-admin startproject linux
cd linux
django-admin startapp app01


vim /linux/settings.py

DATABASES # 清空
ALLOWED_HOSTS=['*']


""""""
# 启动测试
python3 manage.py runserver 0.0.0.0:8000
# 去访问测试
""""""

5. 编辑项目配置文件
cat /opt/linux/myweb_uwsgi.ini

vim /opt/linux/myweb_uwsgi.ini

[uwsgi]
# 端口号
socket   = :8000
   
# 指定项目的目录
chdir       = /opt/linux

# wsgi文件路径
wsgi-file   = linux/wsgi.py

# 模块wsgi路径
module      = linux.wsgi

# 是否开启master进程(监控worker进程的)
master      = ture

# 工作进程的最大数目
processes    = 4

# 结束后是否清理文件
vacuum       = true


6. 启动
uwsgi -d --ini myweb_uwsgi.ini --uid 666(www用户)
-d     # 以守护进程方式运行(后台启动)
--ini  # 指定配置文件路径
--uid  # 指定uid

TCP 服务包含http
http不包含 TCP服务

# 用nginx将tcp服务转换成http
7. 编辑nginx配置文件
cat /etc/nginx/conf.d/py.conf
server {
    listen 80;
    server_name py.test.com;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 2;
        uwsgi_param UWSGI_SCRIPT linux.wsgi;
        uwsgi_param UWSGI_CHDIR /root/linux;
        index index.html index.htm;
        client_max_body_size 35m;
    }
}
server {
    listen 80;
    server_name py1.test.com;
    location / {
        proxy_pass http://127.0.0.1:8001;
    }
}

8. 测试,重启
nginx -t
systemctl restart nginx

在web02中解析
/etc/hosts
粘贴
连接
curl -I -H'Host: py1.test.com' 172.16.1.7

压测
ab -n 10000 -c 10 http://py.test.com/

3. 部署BBS项目

"db01中部署"
1. 部署数据库
yum install mariadb* -y  # mysql

2. 启动数据库
systemctl start mariadb


3. 远程连接MySQL数据库
mysql

# mysql 在MySQL执行
GRANT ALL PRIVILEGES ON *.* TO 'Joshua'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

CREATE DATABASE bbs DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;



4. 部署BBS

4.1 上传代码
unzip bbs.zip
mv bbs /opt/

4.2 数据库迁移
# 代码中数据库相关知识转义
cd app01/
pwd
/opt/bbs/app01/migrations
rm -rf 00*
rm -rf __pycache__/

cd /opt/bbs/

# 修改django版本
卸载
ps -ef | grep uwsgi
kill掉进程

pip3 uninstall django

重装
pip3 install django==1.11

# 先安装pymysql
pip3 install pymysql

# 修改数据库连接
[root@web01 bbs]# vim bbs/settings.py
ALLOWED_HOSTS = ['*']
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bbs',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '172.16.1.61',
        'PORT': 3306,
        'CHARSET': 'utf8'
    }
}

# 创建数据库迁移文件
python3 manage.py makemigrations


# 数据库迁移
python3 manage.py migrate



4.3 配置uwsgi
vim /opt/bbs/myweb_uwsgi.ini
[uwsgi]
# 端口号
socket   = :8002
   
# 指定项目的目录
chdir       = /opt/bbs

# wsgi文件路径
wsgi-file   = bbs/wsgi.py

# 模块wsgi路径
module      = bbs.wsgi

# 是否开启master进程
master      = ture

# 工作进程的最大数目
processes    = 4

# 结束后是否清理文件
vacuum       = true


# 提前启动uwsgi
uwsgi -d --ini myweb_uwsgi.ini --uid 888
# 没有报错,成功


4.4 配置nginx

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 /root/bbs;
        index index.html index.htm;
        client_max_body_size 35m;
    }
}

# 测试 重启nginx

# 解析bbs.test.com

4.5 测试访问BBS
bbs.test.com

posted @ 2022-01-05 17:17  Joshua_jiaxue  阅读(69)  评论(0编辑  收藏  举报