本期内容概要

  • location
  • lnmp架构
  • 部署BBS项目

内容详细

1、location

  1. 使用Nginx Location可以控制访问网站的路径
  2. 但一个server可以有多个location配置
  3. 多个location是有优先级区分的 如下图:
匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3(同级别自上而下匹配)
~* 不区分大小写的正则匹配 3(同级别自上而下匹配)
/ 通用匹配,任何请求都会匹配到 4
  1. # 测试
  2. 先打包 /etc/nginx/conf.d目录下所有 .conf文件
  3. [root@web01 conf.d]# vim test.conf
  4. server {
  5. listen 80;
  6. server_name _; # '_' 匹配所有域名
  7. location ~* /python { # 第三顺位(同级别自上而下匹配)
  8. default_type text/html;
  9. return 200 "Location ~*";
  10. }
  11. location ~ /Python { # 第三顺位(同级别自上而下匹配)
  12. default_type text/html;
  13. return 200 "Location ~";
  14. }
  15. location ^~ /python { # 其次匹配
  16. default_type text/html;
  17. return 200 "Location ^~";
  18. }
  19. location = /python { # 首先匹配
  20. default_type text/html;
  21. return 200 "Location =";
  22. }
  23. }
  24. [root@web01 conf.d]# systemctl restart nginx
  25. 浏览器输入 IP/python 测试
  26. 192.168.15.7/python
  27. 见下图:
  • 浏览器输入IP后加python 优先级最高先匹配 匹配到符合即停止

  • 浏览器输入IP后加python 注释掉优先级最高匹配内容 匹配到符合第二顺位即停止

  • 浏览器输入IP后加大写Python 注释掉优先级最高匹配内容和次优先级匹配内容 自伤而下匹配到符合匹配内容的即停止

  • 其他注释掉再匹配

  • 因为区分大小写 所有小写就会报错

2、lnmp架构

  1. LNMP是一套技术的组合,L=LinuxN=NginxM=MySQLP=Python
  2. 首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的
  3. 1.静态请求:请求的内容是静态文件就是静态请求
  4. 01 静态文件:文件上传到服务器,永远不会改变的文件就是静态文件
  5. 02 html就是一个标准的静态文件
  6. 2.动态请求:请求的内容是动态的就是动态请求
  7. 01 不是真实存在服务器上的内容,是通过数据库或者其他服务拼凑成的数据
  8. 当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过uwsgi协议转交给后端的Python程序处理

2.1、uwsgi

  1. 因为nginx不支持wsgi协议,无法直接调用py开发的webApp
  2. nginx+uwsgi+Django的框架里,nginx代理+webServeruWsgiwsgiServerDjangowebApp
  3. nginx接收用户请求,并判定哪些转发到uWsgiuWsgi再去调用pyWebApp
  4. 主要作用就是:将nginx请求转发到python中去处理

2.2、uwsgi服务部署

  1. 1.创建用户
  2. [root@web01 ~]# groupadd django -g 888
  3. [root@web01 ~]# useradd django -u 888 -g 888 -r -M -s /bin/sh
  4. 2.安装依赖软件
  5. [root@web01 ~]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y
  6. 3.安装Djangouwsgi
  7. [root@web01 ~]# pip3 install django
  8. [root@web01 ~]# pip3 install uwsgi
  9. 4.创建项目
  10. [root@web01 ~]# cd /opt
  11. [root@web01 opt]# django-admin startproject linux
  12. [root@web01 opt]# cd linux
  13. [root@web01 linux]# django-admin startapp app01
  14. [root@web01 linux]# vim linux/settings.py
  15. 找到下面两处 并更改为以下:
  16. ALLOWED_HOSTS = ['*']
  17. DATABASES = {}
  18. 启动测试
  19. [root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000
  • [django]正常启动了

  1. 5.编辑项目配置文件
  2. [root@web01 linux]# pwd
  3. /opt/linux
  4. [root@web01 linux]# vim myweb_uwsgi.ini
  5. [uwsgi]
  6. # 端口号
  7. socket = :8000
  8. # 指定项目的目录
  9. chdir = /opt/linux
  10. # wsgi文件路径
  11. wsgi-file = linux/wsgi.py
  12. # 模块wsgi路径
  13. module = linux.wsgi
  14. # 是否开启master进程
  15. master = true
  16. # 工作进程的最大数目
  17. processes = 4
  18. # 结束后是否清理文件
  19. vacuum = true
  20. 6.启动uwsgi
  21. [root@web01 linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666
  22. -d : 以守护进程方式运行(后台运行)
  23. --ini : 指定配置文件路径
  24. --uid : 指定uid
  25. 7.编辑Nginx配置文件
  26. [root@web01 linux]# cd /etc/nginx/conf.d
  27. [root@web01 conf.d]# vim py.conf
  28. server {
  29. listen 80;
  30. server_name py.test.com;
  31. location / {
  32. include uwsgi_params;
  33. uwsgi_pass 127.0.0.1:8000;
  34. uwsgi_read_timeout 2;
  35. uwsgi_param UWSGI_SCRIPT linux.wsgi;
  36. uwsgi_param UWSGI_CHDIR /opt/linux;
  37. index index.html index.htm;
  38. client_max_body_size 35m;
  39. }
  40. }
  41. [root@web01 conf.d]# nginx -t
  42. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  43. nginx: configuration file /etc/nginx/nginx.conf test is successful
  44. 8.重启nginx配置
  45. [root@web01 conf.d]# systemctl restart nginx
  46. 将域名:py.test.com Windows中解析
  47. C:\Windows\System32\drivers\etc
  48. 192.168.15.7 game.marie.com game.chess.com py.test.com

3、部署BBS项目

  1. 1.部署数据库
  2. 先开启数据库服务器 db01
  3. [root@db01 ~]# yum install mariadb* -y
  4. 2.启动数据库
  5. [root@db01 ~]# systemctl start mariadb
  6. 3.远程连接MySQL数据
  7. [root@db01 ~]# mysql
  8. MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; # 第一步
  9. Query OK, 0 rows affected (0.00 sec) # 自动回显内容
  10. MariaDB [(none)]> FLUSH PRIVILEGES; # 第二步
  11. Query OK, 0 rows affected (0.00 sec) # 自动回显内容
  12. MariaDB [(none)]> CREATE DATABASE `bbs` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; # 第三步
  13. Query OK, 1 row affected (0.00 sec) # 自动回显内容
  14. 4.部署BBS
  15. 01 上传代码
  16. [root@web01 ~]# unzip bbs.zip
  17. [root@web01 ~]# mv bbs /opt/
  18. 02 数据库迁移
  19. [root@web01 ~]# cd /opt/bbs/app01/migrations
  20. [root@web01 migrations]# rm -rf 00*
  21. [root@web01 migrations]# rm -rf __pycache__/
  22. [root@web01 migrations]# cd /opt/bbs/
  23. 修改Django版本
  24. [root@web01 bbs]# pip3 uninstall django
  25. [root@web01 bbs]# pip3 install django==1.11
  26. 安装MySQL数据库插件
  27. [root@web01 bbs]# pip3 install pymysql
  28. 修改数据连接
  29. [root@web01 bbs]# vim bbs/settings.py
  30. ALLOWED_HOSTS = ['*']
  31. DATABASES = {
  32. 'default': {
  33. 'ENGINE': 'django.db.backends.mysql',
  34. 'NAME': 'bbs',
  35. 'USER': 'root',
  36. 'PASSWORD': '123456',
  37. 'HOST': '192.168.15.61',
  38. 'PORT': 3306,
  39. 'CHARSET': 'utf8'
  40. }
  41. }
  42. 创建数据库迁移文件
  43. [root@web01 bbs]# python3 manage.py makemigrations
  44. 数据库迁移
  45. [root@web01 bbs]# python3 manage.py migrate
  46. 03 配置UWSGI
  47. [root@web01 bbs]# vim /opt/bbs/myweb_uwsgi.ini
  48. [uwsgi]
  49. # 端口号
  50. socket = :8002
  51. # 指定项目的目录
  52. chdir = /opt/bbs
  53. # wsgi文件路径
  54. wsgi-file = bbs/wsgi.py
  55. # 模块wsgi路径
  56. module = bbs.wsgi
  57. # 是否开启master进程
  58. master = true
  59. # 工作进程的最大数目
  60. processes = 4
  61. # 结束后是否清理文件
  62. vacuum = true
  63. [root@web01 bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666
  64. 04 配置Nginx
  65. [root@web01 conf.d]# vim bbs.conf
  66. server {
  67. listen 80;
  68. server_name bbs.test.com;
  69. location / {
  70. include uwsgi_params;
  71. uwsgi_pass 127.0.0.1:8002;
  72. uwsgi_read_timeout 2;
  73. uwsgi_param UWSGI_SCRIPT bbs.wsgi;
  74. uwsgi_param UWSGI_CHDIR /opt/bbs;
  75. index index.html index.htm;
  76. client_max_body_size 35m;
  77. }
  78. }
  79. [root@web01 conf.d]# nginx -t
  80. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  81. nginx: configuration file /etc/nginx/nginx.conf test is successful
  82. [root@web01 conf.d]# systemctl restart nginx
  83. 05 测试访问BBS
  84. 将域名:py.test.com Windows中解析
  85. C:\Windows\System32\drivers\etc
  86. 192.168.15.7 game.marie.com game.chess.com py.test.com bbs.test.com

nginx之location、inmp架构详解、BBS项目部署的更多相关文章

  1. Nginx之location 匹配规则详解

    有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...

  2. Nginx的介绍和安装详解

    [介绍+安装]Nginx的介绍和安装详解   == 介绍和安装 == Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反转代理服务器, 其性能与IMAP/POP3代理服务器相当.Nginx ...

  3. RESTful 架构详解

    RESTful 架构详解 分类 编程技术 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次 ...

  4. [转帖]Nginx的超时keeplive_timeout配置详解

    Nginx的超时keeplive_timeout配置详解 https://blog.csdn.net/weixin_42350212/article/details/81123932   Nginx  ...

  5. Nginx核心配置文件常用参数详解

    Nginx核心配置文件常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Nginx权威文档的话童鞋们可以参考Nginx官方文档介绍:http://nginx.org/ ...

  6. 【菜鸟】RESTful 架构详解

    RESTful 架构详解 分类 编程技术 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次 ...

  7. Nginx RTMP 模块 nginx-rtmp-module 指令详解

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...

  8. Nginx基础篇(2)- Nginx基本配置文件和变量详解

    Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. ...

  9. Nginx的超时timeout配置详解

    Nginx的超时timeout配置详解 本文介绍 Nginx 的 超时(timeout)配置. Nginx 处理的每个请求均有相应的超时设置.如果做好这些超时时间的限定,判定超时后资源被释放,用来处理 ...

随机推荐

  1. linux 定时导出sql查询结果文件

    如果想在服务器端生成sql查询结果的txt文件. 大体思路就是: 1.创建一个到处txt文件的sql脚本. set ARRAYSIZE 50 --从数据库往客户端一次发送记录数 set linesiz ...

  2. promise ,async 小记

    Promise Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值. 摇色子游戏,随机1-6的一个整数,并且将其返回. function fn() { retur ...

  3. 如何在子线程中更新UI

    一:报错情况 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that creat ...

  4. Mysql配置 主主同步

    目录 一.准备 二.操作 A数据库操作 B数据库操作 A数据库操作 一.准备 1.两个数据库版本最好一致 2.两个数据库内数据保持一致,若不一致,可手动调整,比如A比B多一个库,那将这个库导入到B库, ...

  5. react功能实现-组件创建

    这里主要从两个角度来分析创建一个组件需要怎么做,一个是元素,一个是数据.整理向,大量借鉴,非原创. 1.渲染组件. 我们先明确一点,所有的元素都必须通过render方法来输出渲染.所有,每个组件类最终 ...

  6. 【二进制】CTF-Wiki PWN里面的一些练习题(Basic-ROP篇)

    sniperoj-pwn100-shellcode-x86-64 23 字节 shellcode "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\ ...

  7. CF433B Kuriyama Mirai's Stones 题解

    Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\).有 \(m\) 次询问,询问有以下两种: \(1~l~r\),求 \(\sum\limits_{i=l ...

  8. CF742B Arpa's obvious problem and Mehrdad's terrible solution 题解

    Content 有一个长度为 \(n\) 的数组,请求出使得 \(a_i \oplus a_j=x\) 且 \(i\neq j\) 的数对 \((i,j)\) 的个数.其中 \(\oplus\) 表示 ...

  9. java 网络编程基础 UDP协议DatagramSocket,MulticastSocket 实现局域网聊天软件(Server + Client模式)

      开发思路: 服务端两个Socket: UDP的DatagramSocket接收客户端消息. 广播multicastSocket 发送广播消息 客户端一个Socket: multicastSocke ...

  10. ELK 使用filebeat替代Logstash收集日志

    使用beats采集日志 之前也介绍过beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beat ...