linux-location/LNMP架构

location
Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
gzip on;
server { //这个是服务器级别
listen 80;
server_name localhost;
location / { //这个是请求级别
root html;
index index.html index.htm;
}
}
}
使用nginx location可以控制访问的路径,一个server可以有多个location配置,多个location配置有优先级。
location匹配符号
| 匹配符 | 匹配规则 | 优先级 |
|---|---|---|
| = | 精确匹配 | 1 |
| ^~ | 以某个字符串开头 | 2 |
| ~ | 区分大小写的正则匹配 | 3 |
| ~* | 不区分大小写的正则匹配 | 3 |
| / | 通用匹配,任何请求都会匹配到 | 4 |
⚠️注意:
location /img/ {
root /var/www/image;
}
这种配置的话,则访问/img/下的文件时,nginx会去/var/www/inage/img/目录下去找文件,root是最上层目录的定义
location /img/ {
alias /var/www/image;
}
这种配置的话,访问/img/目录的文件时,nginx自动会去/var/www/image/目录去找,alias是一个目录别名的定义。
LNMP
一、什么是LNMP
LNMP是一套技术的组合,L=Linux,N=Nginx,M=MySQL,P=Python,首先Nginx是不能处理动态请求的,那么当用户发起动态请求时,nginx的处理如下:
1、静态请求:请求的内容是静态文件就是静态请求
(1)静态文件:文件上传到服务器,永远不会改变的就是静态文件。
(2)html就是一个标准的静态的文件
2、动态请求:请求的内容是动态的就是动态的请求
(1)不是真实存在在服务器上的内容,是通过数据库活着其他服务拼凑的数据
当用户发起http请求时,请求会被nginx处理,如果时静态资源,nginx则会直接返回,如果时动态请求,nginx则通过uwsgi协议交给后端的python处理
二、什么是uwsgi
WSGI
全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。
WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。
WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。
很多框架都自带了 WSGI server ,比如 Flask,webpy,Django、CherryPy等等。当然性能都不好,自带的 web server 更多的是测试用途,发布时则使用生产环境的 WSGI server或者是联合 nginx 做 uwsgi
uWSGI
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
WSGI看过前面小节的同学很清楚了,是一种通信协议。
uwsgi同WSGI一样是一种通信协议。
而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。
三、uwsgi服务部署
1、创建用户
[root@web03 ~]# groupadd django -g 888
[root@web03 ~]# useradd django -u 888 -g 888 -r -M -s /bin/sh
2、安装依赖软件
[root@web03 ~]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y
3、安装Django和uwsgi
[root@web03 ~]# pip3 install django==1.11
[root@web03 ~]# pip3 install uwsgi
4、创建项目
[root@web03 ~]# cd /opt
[root@web03 /opt]# django-admin startproject linux
[root@web03 /opt]# cd linux

🌹目录说明:
1、linux 是项目的名称也是项目的容器
2、manage.py 一个使用的命令行工具,可以以各种方式与该Django项目进行交互。
3、linux/init.py 一个空文件,告诉python该目录是一个Python包
4、linux/wsgi 一个wsgi兼容的web服务器的入口,以便运行项目
5、linux/urls.py 该Django项目的URL声明;一份由Django驱动的网站目录
[root@web03 /opt/linux]# django-admin startapp app01
[root@web03 /opt/linux]# vim linux/settings.py


⚠️启动测试
[root@web03 /opt/linux]# python3 manage.py runserver 0.0.0.0:8000
🌹说明:0.0.0.0 是让其他电脑可以链接到开发服务器,8000位端口号,如果不说明,端口号默认是8000.在浏览器输入ip(我的点按哦是172.16.1.9:8000)如果成功如下图所示(不同版本显示画面不一样)

5、编辑项目配置文件
[root@web03 /opt/linux]# vim /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@web03 /opt/linux]# uwsgi --ini myweb_uwsgi.ini --uid 666
注意:--uid的意思是用这个id去启动该项服务;--ini指定配置文件的路径
如果成功,得到如下

⚠️但是这样的会在终端一直显示,我们可以加-d参数,使它变成守护进程
[root@web03 /opt/linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666
[uWSGI] getting INI configuration from myweb_uwsgi.ini
7、编辑nginx配置文件
[root@web03 /etc/nginx/conf.d]# cd /etc/nginx/conf.d/
[root@web03 /etc/nginx/conf.d]# vim python.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配置
9、输入py.test.com 测试

部署bbs项目
1、安装数据库
[root@db01 /etc/yum.repos.d]# yum install mariadb* -y
2、启动数据库
[root@db01 /etc/yum.repos.d]# systemctl start mariadb
3、远程链接MySQL数据
3.1 进入数据库 [root@db01 ~]# mysql
3.2 MariaDB [(none)]> GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
3.3MariaDB [(none)]> CREATE DATABASE bbs DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
3.4 MariaDB [(none)]> FLUSH PRIVILEGES;
3.5 打开pycharm

选择mysql-->按照要求填写即可

4、部署bbs
4.1 上传代码
[root@web03 /opt]# unzip bbs.zip
4.2 数据库迁移
[root@web03 /opt]# cd /opt/bbs/app01
[root@web03 /opt/bbs/app01]# cd migrations/
[root@web03 /opt/bbs/app01/migrations]# rm -rf 00*
[root@web03 /opt/bbs/app01/migrations]# rm -rf pycache
[root@web03 /opt/bbs/app01/migrations]# cd /opt/bbs
安装mySQL数据库插件
[root@web03 /opt/bbs]# pip3 install pymysql
修改数据链接
[root@web03 /opt/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@web03 /opt/bbs]# python3 manage.py makemigrations
数据库迁移
[root@web03 /opt/bbs]# python3 manage.py migrate
4.3 配置uwsgi
[root@web03 /opt/bbs]# 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
5 启动uwsgi
[root@web03 /opt/bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666
6、配置nginx
[root@web03 /opt/bbs]# cd /etc/nginx/conf.d/
[root@web03 /etc/nginx/conf.d]# vim 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;
}
}
7、重启nginx
[root@web03 /etc/nginx/conf.d]# systemctl restart nginx
8、在终端修改hosts文件

9、测试

浙公网安备 33010602011771号