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、除去精确匹配外,其他的匹配规则都遵循匹配的先后顺序,且匹配到一个就停止匹配
LNMP是一套技术的组合,L=Linux、N=Nginx、M~=MySQL、P~=Python webApp采用python的web框架Django开发 首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。 8转交给后端的Python程序处理
因为nginx不支持wsgi协议,无法直接调用py开发的webApp。 在nginx+uWsgi+Django的框架里,nginx代理+webServer,uWsgi是wsgiServer,Django是webApp。 nginx接收用户请求,并判定哪些转发到uWsgi,uWsgi再去调用pyWebApp。
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、创建用户 [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对静态请求的一些反馈结果
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/