location

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

location匹配符号

匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 3
/ 通用匹配,任何请求都会匹配到 4
[root@web02 conf.d]# vim supermary.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 =";
}
} 网站访问game001.com/python,每次访问之后修改配置文件,会产生一下效果.

案例

我们把超级玛丽里的images里的图片放到共享文件下/opt/imgaes然后删除超级玛丽里的images,然后这时会游戏会显示黑屏,因为找不到图片

我们查看下错误日志

然后我们再做如下操作

server {
listen 80;
server_name game001.com;
location / {
root /opt/Super_Mary;
index index.html;
}
location ^~ /images { # 新写一个location 以image开头 在/opt目录下查找
root /opt;
}
}

再次访问超级玛丽游戏,就又可以游玩啦!!!

LNMP架构

1.简介

LNMP是一套技术的组合,L=Linux、N=Nginx、M=MySQL、P=PYTHON或PHP
不仅仅只有这些服务,还有很多

首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。
1.静态请求:请求的内容是静态文件就是静态请求
1)静态文件:文件上传到服务器,永远不会改变的文件就是静态文件
2)html就是一个标准的静态文件
2.动态请求:请求的内容是动态的就是动态请求
1)不是真实存在服务器上的内容,是通过数据库或者其他服务拼凑成的数据

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

2.uwsgi

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

3.uwsgi服务部署

# 查看端口
netstat -ntlp
kill +端口 杀死进程
tail -f /var/log/nginx/access.log
# 查看进程
ps -ef | grep xxx
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
[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 opt]# 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

不同版本的django显示的图片不一样.

5、编辑项目配置文件
[root@localhost ~]# 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@web01 linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666 -d : 以守护进程方式运行
--ini : 指定配置文件路径
--uid : 指定uid 7、编辑Nginx配置文件
[root@localhost ~]# vim /etc/nginx/conf.d/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配置
systemctl restart nginx
在window里的hosts文件添加172.16.1.8 py.test.com
访问 py.test.com

4.nginx代理python服务(压力测试)

[root@web01 linux]# python3 manage.py runserver 0.0.0.0:8001
[root@web02 conf.d]# vim py1.conf
server {
listen 80;
server_name py1.test.com;
location / {
proxy_pass http://127.0.0.1:8001;
}
} [root@web02 conf.d]# systemctl restart nginx [root@web02 conf.d]# vim /etc/hosts
172.16.1.8 py.test.com py1.test.com
[root@web02 conf.d]# curl -I -H'Host: py.test.com' 172.16.1.8
[root@web02 conf.d]# curl -I -H'Host: py1.test.com' 172.16.1.8 # 开始压力测试
[root@web02 conf.d]# ab -n 10000 -c 10 http://py.test.com/
# 这是uwsgi代理 Time taken for tests: 6.958 seconds
[root@web02 conf.d]# ab -n 10000 -c 10 http://py1.test.com/
# 这是python代理 Time taken for tests: 20.714 seconds 由此可以看出uwsgi代理要比python要快很多.

部署BBS项目

在db01上
1、部署数据库
[root@db01 ~]# yum install mariadb* -y 2、启动数据库
[root@db01 ~]# systemctl start mariadb
# 运行数据库
[root@db01 ~]# mysql 3、远程连接MySQL数据
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;FLUSH PRIVILEGES;
# 这里的用户名和密码根据自己设置 4.创建BBS数据库
CREATE DATABASE `bbs` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

打开pycharm

在web01上
4.1、上传代码
[root@web01 ~]# unzip bbs.zip
[root@web01 ~]# mv bbs /opt/ 4.2、数据库迁移
# 删除之前别人迁移好的数据库,只留一个_ _init_ _(新项目就不需要)
[root@web01 migrations]# cd /opt/bbs/app01/migrations
[root@web01 migrations]# rm -rf 00*
[root@web01 migrations]# rm -rf __pycache__/ [root@web01 migrations]# cd /opt/bbs/ # 安装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': '123',
'HOST': '172.16.1.61',
'PORT': 3306,
'CHARSET': 'utf8'
}
} # 创建数据库迁移文件
[root@web01 bbs]# python3 manage.py makemigrations # 数据库迁移
[root@web01 bbs]# python3 manage.py migrate 4.3、配置UWSGI
[root@web01 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 # 测试UWSGI配置是否成功
[root@web01 bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666 4.4、配置Nginx
[root@localhost ~]# vim /etc/nginx/conf.d/python.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;
}
} [root@web01 bbs]# systemctl restart nginx

把bbs.test.com加入window里的hosts配置文件里

打开bbs.test.com

问题排错

出现502一定是uwsgi出了问题

出现无法访问此网站一定是nginx出错了

404是匹配不到对应的location

403是匹配到对应的location,但是找不到文件

linux中LNMP架构和location用法的更多相关文章

  1. 12个 Linux 中 grep 命令的超级用法实例

    12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...

  2. linux的LNMP架构介绍、MySQL安装、PHP安装

    LNMP架构介绍 和LAMP唯一不同的是,LNMP中的N指的是Nginx(类似于Apache的一种web服务软件).目前这种环境的应用也非常多.Nginx设计的初衷是提供一种快速.高效.多并发的Web ...

  3. 转:Linux中find命令-path -prune用法详解

    在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下 ...

  4. Linux中rz和sz命令用法详解

    http://www.111cn.net/sys/linux/67810.htm 在linux中rz 和 sz 命令允许开发板与主机通过串口进行传递文件了,下面我们就来简单的介绍一下rz 和 sz 命 ...

  5. Linux centosVMware LNMP架构介绍、MySQL安装、PHP安装、Nginx介绍

    一. LNMP架构介绍 和LAMP不同的是,提供web服务的是Nginx 并且php是作为一个独立服务存在的,这个服务叫做php-fpm Nginx直接处理静态请求,动态请求会转发给php-fpm   ...

  6. Linux中crond服务与crontab用法

    需要写个在Linux下定时更新系统的脚本,man crondtab 不甚详细,现将网络上的介绍列举如下: crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序使用cr ...

  7. Linux中more和less命令用法

    一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...

  8. Linux中more和less命令用法(转)

    一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...

  9. linux中grep和egrep的用法

    1. grep简介 grep (global search regular expression_r(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大 ...

随机推荐

  1. Linux 常用管理命令

    系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ...

  2. Python可变参数*args和**kwargs

    本文我们将通过示例了解 Python函数的可变参数*args和 **kwargs的用法. 知识预备:Python 函数和 Python 函数参数 在Python编程中,我们定义一个函数来生成执行类似操 ...

  3. Docker——部署常用镜像

    部署nginx:暴露端口 #下载nginx docker pull nginx #运行nginx docker run -d --name nginx2 -p 8081:80 nginx -d #后台 ...

  4. Arch Linux 系统迁移

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 备份 Arch Linux 系统 安装 pigz 使用 pigz 多线程压缩比使用 tar 单线程压缩速度明显提升多倍 sudo pacman ...

  5. PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划完成活动 ...

  6. ZYNQ生成一个工程的基本步骤

    Zynq 7000 SoC 是业界首款All Programmable SoC 组成: PL(FPGA部分) PS(ARM部分) PL和PS数据传输的 高效接口:AXI和ACP PS: 处理系统(Pr ...

  7. VMware Workstation网络修改vlan id值

    我们捣鼓虚拟机时,有时候网卡是需要承载多个vlan的,比如说部署fuel时网卡3需要承载私有,管理,存储网络的流量. 在virtualbox中我们可以直接在混杂模式项选择全部允许,但是在VMware ...

  8. 请描述一下Struts2的值栈结构,以及它是如何工作的?

    值栈 Value Stack 值栈是Struts2框架的核心概念.所有的核心组件都以某种方式与之进行交互,它提供对上下文信息和执行环境中元素的访问机制.值栈的内容由如下4个层级组成. 1.临时对象 这 ...

  9. 如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?

    任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决. Java 序列化相关的常 ...

  10. 请解释Spring Bean的生命周期?

    首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy: Spring上下文中的Bean生命周期也类似,如下: (1)实例化Bean: 对于BeanFac ...