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