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. 《Unity shader入门精要》复习<第13章 关于NDC坐标和深度/法线纹理>

    分为三个地方讲解. NDC(Normalize Device Coordinates)归一化的设备坐标 NDC坐标是世界空间坐标通过MVP变换之后再进行归一化得到的坐标.只需要再一步变换就能得到屏幕空 ...

  2. ZYNQ使用88E1510 PHY芯片的驱动程序

    SDK V2014.4 PHY 88E1510 PL端以太网,自协商 standalone应用程序 PL端设计,略. 根据PL端生成的hdf,新建项目,采用官方lwip echo server例程.发 ...

  3. 领域驱动模型DDD(一)——服务拆分策略

    前言 领域驱动模型设计在业界也喊了几年口号了,但是对于很多"务实"的程序员来说,纸上谈"术"远比敲代码难得太多太多.本人能力有限,在拜读相关作品时既要隐忍书中晦 ...

  4. SQL获取当前时间(日期)

    --获取当前日期(如:yyyymmdd)select CONVERT (nvarchar(12),GETDATE(),112) --获取当前日期(如:yyyymmdd hh:MM:ss)select ...

  5. Hibernate学习一:Hebinate入门以及一些小问题

    1:Hebinate框架的简述: Hebinate框架主要用用在javaee开发中的dao层设计,实现对数据库的crud等操作, Hibernate的底层通过jdbc实现,通过对jdbc的封装,实现对 ...

  6. 怎么得到InnoDB主键索引B+树的高度?

    上面我们通过推断得出B+树的高度通常是1-3,下面我们从另外一个侧面证明这个结论.在InnoDB的表空间文件中,约定page number为3的代表主键索引的根页,而在根页偏移量为64的地方存放了该B ...

  7. 什么情况下一个 broker 会从 isr中踢出去?

    leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个foll ...

  8. 什么是 AOP?

    在软件开发过程中,跨越应用程序多个点的功能称为交叉问题.这些交叉问题与 应用程序的主要业务逻辑不同.因此,将这些横切关注与业务逻辑分开是面向方 面编程(AOP)的地方.

  9. 什么是 AQS ?

    AQS 是 AbustactQueuedSynchronizer 的简称,它是一个 Java 提高的底层同步工具类,用一个 int 类型的变量表示同步状态,并提供了一系列的 CAS 操作来管理这个同步 ...

  10. Redis 最适合的场景?

    1.会话缓存(Session Cache) 最常用的一种使用 Redis 的情景是会话缓存(session cache).用 Redis 缓存会 话比其他存储(如 Memcached)的优势在于:Re ...