location,LNMP架构,uwsgi服务部署,部署BBS项目

一、location

  使用Nginx Location可以控制访问网站的路径,一个server可以有多个location配置

1、location匹配符号

匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 3
/ 通用匹配,任何请求都会匹配到 4
[root@web01 conf.d]# cat test.conf
server {
    listen 80;
    server_name _;
    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 =";
    }
}

location获取图片路径

1、服务端

  创建挂载点

    [root@nfs ~]# mkdir /opt/img

  授权

    [root@nfs ~]# chown -R www.www /opt/img/

  配置挂载点

    [root@nfs img]# vim /etc/exports

    /opt/img 172.16.1.0/20(rw,sync,all_squash,anonuid=666,anongid=666)

  重启nfs和rpcbind服务

    [root@nfs img]# systemctl restart nfs-server rpcbind

  检查服务端是否正常

    [root@nfs img]# showmount -e

    /opt/img    172.16.1.0/20

2、客户端

  创建存放图片目录

    [root@web01 opt]# mkdir /opt/images/

  挂载nfs

    [root@web01 ~]# mount -t nfs 172.16.1.31:/opt/img /opt/images/

  配置location并重启nginx

location,LNMP架构,uwsgi服务部署,部署BBS项目

 二、LNMP架构

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

  首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时,Nginx又是如何进行处理的?

    1.静态请求:请求的内容是静态文件就是静态请求

      1)静态文件:文件上传到服务器,永远不会改变的文件就是静态文件

      2)html就是一个标准的静态文件

    2.动态请求:请求的内容是动态的就是动态请求

      1)不是真实存在服务器上的内容,是通过数据库或者其它服务拼凑成的数据

  当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过uwsgi协议转交给后端的Python程序处理

2.1、uwsgi

  因为Nginx不支持wsgi协议,无法直接调用py开发的webApp

  在nginx+uWsgi+Django的框架里,nginx代理+webServer,uWsgi是wsgiServer,Django是webApp

  nginx接收用户请求,并判定哪些转发到uWsgi,uWsgi再去调用pyWebApp

三、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==1.11

    # pip3 uninstall django

    [root@web01 opt]# pip3 install uwsgi

  4、创建项目

    [root@web01 opt]# cd /opt

    [root@web01 opt]# django-admin startproject linux

    [root@web01 opt]# cd linux

    [root@web01 linux]# django-admin startapp app01

    [root@web01 linux]# vim linux/settings.py

    ALLOWED_HOSTS = ['*']

    DATABASES = {}

    # 启动测试

    [root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000

  5、编辑项配置文件

[root@web01 linux]# cat /opt/linux/myweb_uwsgi.ini
[uwsgi]
# 端口号
socket          = :8000
# 指定项目的目录
chdir           = /opt/linux
# wsgi文件路径
wsgi-file       = linux/wsgi.py
# 模块wsgi路径
module          = linux.wsgi
# 是否开启master进程
master          = true
# 工作进程的最大数目
processes       = 4
# 结束后是否清理文件
vacuum          = true

  6、启动uwsgi

    [root@web01 linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666

    -d:以守护进程方式运行

    --ini:指定配置文件路径

    --uid:指定uid

    uwsgi -h:查看配置

    [root@web01 linux]# ps -ef | grep uwsgi

[root@web01 linux]# ps -ef | grep uwsgi
www        5077      1  0 19:54 ?        00:00:00 uwsgi -d --ini myweb_uwsgi.ini --uid 666
www        5079   5077  0 19:54 ?        00:00:00 uwsgi
www        5080   5077  0 19:54 ?        00:00:00 uwsgi
www        5081   5077  0 19:54 ?        00:00:00 uwsgi
www        5082   5077  0 19:54 ?        00:00:00 uwsgi
root       5145   1348  0 20:21 pts/0    00:00:00 grep --color=auto uwsgi

    结束进程

    [root@web01 bbs]# kill -9 5077

    注:uwsgi是TCP服务,需要通过配置nginx来访问(http包括TCP服务,TCP服务不包括http服务)

  7、编辑nginx配置文件

    [root@web01 ~]# ll /etc/nginx/

    -rw-r--r-- 1 root root  664 Nov 16 23:03 uwsgi_params

[root@web01 ~]# 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 /opt/linux;
        index  index.html index.htm;
        client_max_body_size 35m;
    }
}

  8、重启nginx

    [root@web01 ~]# systemctl restart nginx

  9、域名解析

    C:\Windows\System32\drivers\etc\hosts

    172.16.1.7 www.super_game.com py.test.com

  10、测试

location,LNMP架构,uwsgi服务部署,部署BBS项目

   11、压力测试(通过uwsgi和python直接启动)

  nginx配置

[root@web01 ~]# 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 /opt/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;
    }
}

  域名解析

    [root@web02 ~]# vim /etc/hosts

  压力测试比较

[root@web02 ~]# ab -n 10000 -c 10 http://py.test.com/
Time taken for tests:   10.498 seconds
[root@web02 ~]# ab -n 10000 -c 10 http://py1.test.com/
Time taken for tests:   28.888 seconds

四、部署BBS项目

  1、部署数据库

    [root@db01 ~]# yum install mariadb* -y

  2、启动数据库

    [root@db01 ~]# systemctl start mariadb

  3、连接数据库

    [root@db01 ~]# mysql

  4、远程连接MySQL数据库

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

    FLUSH PRIVILEGES;

  5、创建数据库

    CREATE DATABASE `bbs` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

location,LNMP架构,uwsgi服务部署,部署BBS项目

   6、部署BBS

  6.1、上传代码

    [root@db01 ~]# unzip bbs.zip

    [root@db01 ~]# mv bbs /opt/

  6.2、数据库迁移

    [root@web01 migrations]# pwd

    /opt/bbs/app01/migrations

    [root@web01 migrations]# rm -rf 00*

    [root@web01 migrations]# rm -rf __pycache__/

    [root@web01 migrations]# cd /opt/bbs/

    [root@web01 bbs]# pwd

    /opt/bbs

    # 查看Django版本

    [root@web01 bbs]# pip3 list

    # 安装MySQL数据库插件

    [root@web01 bbs]# 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'
    }
}

    # 创建数据库迁移文件

    [root@web01 bbs]# python3 manage.py makemigrations

    # 删除数据库中的表

    # 数据库迁移

    [root@web01 bbs]# python3 manage.py migrate

location,LNMP架构,uwsgi服务部署,部署BBS项目

   6.3、配置uwsgi

[root@localhost ~]# cat /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

    # 启动uwsgi

    [root@web01 bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666

    [root@web01 bbs]# ps -ef | grep uwsgi

  6.4、配置nginx

[root@localhost ~]# cat /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;
    }
}

    # 重启nginx

    [root@web01 bbs]# systemctl restart nginx

  6.5、测试访问BBS

location,LNMP架构,uwsgi服务部署,部署BBS项目

上一篇:Linux中的location和LNMP架构


下一篇:Linux之LNMP架构