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. 10 分钟讲完 QUIC 协议。

    建议阅读本文需要搭配作者 HTTP 相关文章食用. 历史 HTTP 系列文章: 看完这篇HTTP,跟面试官扯皮就没问题了 HTTP 2.0 ,有点炸 ! 这里先来回顾一下 HTTP 的发展过程.首先, ...

  2. unicode decode error解决办法

    在使用flask编写博客程序时候,遇到了这个错误. 解决办法如下 添加如下代码 from flask import Flask, render_template import sys reload(s ...

  3. OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台

    前言   移植opencv到海思平台,opencv支持对视频进行解码,需要对应的ffmpeg支持.   Ffmpeg的移植   Ffmpeg的移植请参考之前的文章:<FFmpeg开发笔记(十): ...

  4. Java9至17的新特性总结

    总览 讲讲Java 9-17 的一些语法糖和一些新发布的jeps, 重点讲讲JVM的垃圾回收器 时间线 SpringBoot 为什么选择Java17这个版本.我估计跟下面这个图有关系. Java 8 ...

  5. HTTPS-各种加密方式

    推荐阅读:https://www.cnblogs.com/zwtblog/tag/计算机网络/ 目录 HTTPS 对称加密(AES) 非对称加密(RSA) 工作过程 分析 优缺点 常用算法 混合加密 ...

  6. CyclicBarrier和CountDownLatch区别

    这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧 CyclicBarrier和C ...

  7. leedcode算法

    1.LeetCode - 合并两个链表 2. 3. 链表是否有环       https://jingyan.baidu.com/article/066074d69afb8d83c31cb068.ht ...

  8. Java中的软引用、弱引用、虚引用的适用场景以及释放机制

    Java的强引用,软引用,弱引用,虚引用及其使用场景   从 JDK1.2 版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引 ...

  9. @Qualifier 注解有什么用?

    当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可 以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义. 例如, ...

  10. 学习Solr(三)

    本文以solr5为例说明在linux系统上单机安装过程. 一.    solr的安装 1.   solr能够安装在不同的操作系统上,安装solr前需要安装何时的JRE.当前版本5.5最低需要JRE1. ...