day08 Nginx模块

lnmp架构

l	:Linux
n :Nginx
m :MySQL
p :Python/PHP
lnmp架构:是最简单的架构

Nginx中的模块(Python模块):前提是源代码编译安装的

前提准备

# 前提是会查nginx的文档
https://nginx.org/en/docs/ --->documentation---->搜索autoindex_module(目录索引的模块) [root@web03 nginx-1.20.1]# ./configure --help | grep autoindex # 查找目录索引模块
--without-http_autoindex_module disable ngx_http_autoindex_module # 默认启动 1、模块
auth_basic :认证模块 # 官网搜索
stub_status :状态模块
ngx_http_limit_conn_module:限制连接数模块
autoindex_module:目录索引模块
limit_req:限制请求数模块

认证模块

Syntax :	auth_basic string | off;        # string:开启
Default: auth_basic off; # 默认关闭
Context: http, server, location, limit_except # 适用模块 Syntax: auth_basic_user_file file; # file:用户密码文件
Default: —
Context: http, server, location, limit_except # htpasswd :生成密码文件命令 1、安装htpasswd命令
[root@web03 conf.d]# yum install httpd-tools -y 2、生成密码文件
[root@web03 conf.d]# htpasswd -c /etc/nginx/auth meng -c:指定路径和用户名,下面设置密码
[root@web03 conf.d]# cat /etc/nginx/auth
meng:$apr1$tMluqooC$6mvHi9hay1GrDuA/XZYig/ # 用户名+密码 3、修改配置项
[root@web03 conf.d]# vim autoindex.conf # 修改配置
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务
---------------------------------------------------------------------------------------------------
server{
server_name index.test.com;
listen 80; include autoindex_params; # 开启认证
auth_basic "hello world";
# 加载密码文件
auth_basic_user_file /etc/nginx/auth; location /{
root /usr/share/nginx;
index index.html;
}
}
---------------------------------------------------------------------------------------------------

状态模块

语法:
Syntax: stub_status; # 提供对基本状态信息的访问
Default: —
Context: server, location # 适用模块 1、修改配置项
[root@web03 conf.d]# vim autoindex.conf # 修改配置
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务
---------------------------------------------------------------------------------------------------
server{
server_name index.test.com;
listen 80; include autoindex_params; auth_basic "hello world";
auth_basic_user_file /etc/nginx/auth; # 状态模块
location /status{ # /status:是一个路径,比如:index.test.com/status
stub_status;
} location /{
root /usr/share/nginx;
index index.html;
}
}
---------------------------------------------------------------------------------------------------
# 监控,但不常用
2、浏览器访问(对nginx的监控)
http://index.test.com/status # 后面加上/status
监控:# 对nginx的监控
Active connections: 2
server accepts handled requests
2 2 4
Reading: 0 Writing: 1 Waiting: 1 翻译:
当前活动连接数:2 个
server accepts:接受的客户端连接总数 handled:处理的连接总数 requests:客户端请求的总数
2 2 4 # 一一对应
正在读取:0 响应连接数:1 空闲客户端连接数:1

禁用IP和开放IP访问

allow	:允许IP访问
deny :禁止IP访问
语法:
Syntax: allow address | CIDR | unix: | all; # address;IP地址,CIDR :网段,all :所有
Default: — # deny :允许访问
Context: http, server, location, limit_except Syntax: deny address | CIDR | unix: | all; # deny :禁止访问
Default: —
Context: http, server, location, limit_except 编辑文件:
[root@web03 conf.d]# vim /etc/nginx/conf.d/autoindex.conf
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务
---------------------------------------------------------------------------------------------------
server{
server_name index.test.com;
listen 80; include autoindex_params; # 他会从/etc/nginx根目录找文件。根目录为/etc/nginx allow 192.168.15.1; # 只允许192.168.15.1访问
deny all; # 禁止所有IP访问 location /{
root /usr/share/nginx;
index index.html;
}
}
--------------------------------------------------------------------------------------------------- 案例1:只允许192.168.15.1访问
1、编写文件(带入上面配置)
第一步:允许192.168.15.1来访问
allow 192.168.15.1;
第二步:禁止其他所有IP来访问
deny all; 2、测试
[root@web03 conf.d]# tail -f /var/log/nginx/access.log # 看日志ip,实时监控
[root@m01 ~]# curl -H'Host: index.test.com' 192.168.15.9
<head><title>403 Forbidden</title></head> # 进不去
# 电脑c盘hosts改成 172.16.1.9 index.test.com 案例2:只允许192.168.15.0来访问。
1、编写文件(带入上面配置)
第一步:允许192.168.15.0来访问
allow 192.168.15.0/24;
第二步:禁止其他所有IP来访问
deny all; 2、测试
[root@web03 conf.d]# tail -f /var/log/nginx/access.log # 看日志ip,实时监控
[root@m01 ~]# curl -H'Host: index.test.com' 172.16.1.9
<head><title>403 Forbidden</title></head> # 进不去
# 电脑c盘hosts改成 192.168.15.9 index.test.com 案例3:要求禁止192.168.15.1来访问。
1、编写文件(带入上面配置)
第一步:禁止192.168.15.1来访问
deny 192.168.15.1;
第二步:允许其他所有IP来访问
allow all; 2、测试
[root@web03 conf.d]# tail -f /var/log/nginx/access.log # 看日志ip,实时监控
[root@m01 ~]# curl -H'Host: index.test.com' 172.16.1.9
<head><title>403 Forbidden</title></head> # 可以进去
# 电脑c盘hosts改成 192.168.15.9 index.test.com

目录索引模块

1、目录索引的配置项
1)、开启目录索引
Syntax: autoindex on | off; # on:打开,off:关闭
Default: autoindex off; # 默认关闭
Context: http, server, location # 适用的模块 2)、格式化文件大小
Syntax: autoindex_exact_size on | off; # on:打开,off:关闭
Default: autoindex_exact_size on; # 默认开启
Context: http, server, location # 适用的模块 3)、输出的格式
Syntax: autoindex_format html | xml | json | jsonp; # 使用什么格式
Default: autoindex_format html; # 使用html格式
Context: http, server, location # 适用的模块 4)、使用时区
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off; # 默认使用UTC时间,修改成本地时间 on
Context: http, server, location 2、编辑目录索引的配置文件
[root@web01 ~]# cd /etc/nginx/conf.d
[root@web03 conf.d]# vim autoindex.conf
---------------------------------------------------------------------------------------------------
server{
server_name index.test.com;
listen 80; # 开启目录索引
autoindex on;
# 格式化文件大小
autoindex_exact_size off;
# 输出的格式
autoindex_format html;
# 使用时区
autoindex_localtime on; location /{
root /usr/share/nginx;
index index.html;
}
}
---------------------------------------------------------------------------------------------------
3、测试并重启nginx服务
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务 4、避免重复写入,编写autoindex_params文件
[root@web03 conf.d]# cd /etc/nginx/
[root@web03 nginx]# vim autoindex_params
---------------------------------------------------------------------------------------------------
# 开启目录索引
autoindex on;
# 格式化文件大小
autoindex_exact_size off;
# 输出的格式
autoindex_format html;
# 使用时区
autoindex_localtime on;
--------------------------------------------------------------------------------------------------- 5、重新编辑
[root@web03 conf.d]# vim /etc/nginx/conf.d/autoindex.conf # 编辑旧版本
---------------------------------------------------------------------------------------------------
server{
server_name index.test.com;
listen 80; # 加载其他文件
include autoindex_params; # 他会从/etc/nginx根目录找文件。根目录为/etc/nginx location /{
root /usr/share/nginx;
index index.html;
}
}
---------------------------------------------------------------------------------------------------
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务

限制连接数模块

语法:
Syntax: limit_conn zone number; # 用于限制每个定义的键的连接数,特别是来自单个 IP 地址的连接数
Default: —
Context: http, server, location 1、创建一个内存空间存放访问者的IP
[root@web03 conf.d]# vim /etc/nginx/conf.d/game.conf
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务
---------------------------------------------------------------------------------------------------
# 创建一个叫addr的空间,用来存放客户端IP,大小10m。remote_addr:客户端IP
limit_conn_zone $remote_addr zone=addr:10m; server{
server_name game.test.com;
listen 80; location /{
# 调用addr空间,限制连接数为1
limit_conn addr 1;
root /usr/share/nginx/html5-mario;
index index.html;
} }
---------------------------------------------------------------------------------------------------
2、设置每一个访问者的同时连接次数
limit_conn addr 1; 3、编写虚拟机的域名解析
[root@web03 conf.d]# vim /etc/hosts
192.168.15.9 game.test.com 4、测试
[root@web03 conf.d]# ab -c 200 -n 10000 http://game.test.com/
Concurrency Level: 200 # 并发级别
Time taken for tests: 0.075 seconds # 测试所用时间
Complete requests: 10000 # 完成申请
Failed requests: 3424 # 失败的请求 5、证明
# 调用addr空间,限制连接数为1
limit_conn addr 1; # 证明了阻挡同时请求的3424次

限制请求数模块(测试连接数)

知识储备:
ab : 创建请求的命令,(yum install httpd-tools -y )
-c : 设置并发
-n : 设置请求的总数 长链接:前后端链接后,除非一端主动断开,不然一直链接
短连接:链接完就会断开 1、创建一个内存空间存放访问者的IP
[root@web03 conf.d]# vim /etc/nginx/conf.d/game.conf
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务
---------------------------------------------------------------------------------------------------
# 设置一个储存ip地址,储存大小为10m,空间名字meng,一秒只能请求一次的空间。
limit_req_zone $remote_addr zone=meng:10m rate=1r/s; server{
server_name game.test.com;
listen 80; location /{
# 调用空间名字是meng的空间,最大限度可以同时访问五次。
limit_req zone=meng burst=5; root /usr/share/nginx/html5-mario;
index index.html;
}
}
---------------------------------------------------------------------------------------------------
2、设置每一个访问者的同时请求次数
limit_req zone=meng burst=5; 3、编写虚拟机的域名解析
[root@web03 conf.d]# vim /etc/hosts
192.168.15.9 game.test.com 4、测试
[root@web03 conf.d]# ab -c 200 -n 10000 http://game.test.com/
Concurrency Level: 200 # 并发级别
Time taken for tests: 5.002 seconds # 测试所用时间
Complete requests: 10000 # 完成申请
Failed requests: 9994 # 失败的请求 5、证明
# 调用addr空间,限制连接数为1
limit_conn addr 1; # 证明了阻挡同时请求的9994次

配置django框架

使用django框架

1、安装python3
[root@web03 conf.d]# yum install python3 -y 2、安装django框架
[root@web03 ~]# pip3 install django==2.2.2 3、创建django项目
[root@web03 ~]# cd /opt/
[root@web03 opt]# django-admin startproject linux 4、在项目中创建应用
[root@web03 opt]# cd linux/
[root@web03 linux]# pwd
/opt/linux
[root@web03 linux]# django-admin startapp application 5、修改配置文件
[root@web03 linux]# vim /opt/linux/linux/settings.py
ALLOWED_HOSTS = ['*']
DATABASES = {} 6、启动,浏览器访问
[root@web03 linux]# pwd
/opt/linux # 在项目根目录启动
[root@web03 linux]# python3 manage.py runserver 0.0.0.0:8000

Nginx代理Python

为什么要用uWsgi:
因为nginx不支持wsgi协议,无法直接调用py开发的webApp。
在nginx+uWsgi+Django的框架里,nginx代理+webServer,uWsgi是wsgiServer,Django是webApp。
nginx接收用户请求,并判定哪些转发到uWsgi,uWsgi再去调用pyWebApp。 1、创建项目用户
[root@web03 linux]# groupadd django -g 888
[root@web03 linux]# useradd django -u 888 -g 888 -r -M -s /bin/sh 2、安装依赖包
[root@web03 linux]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y 3、安装uwsgi和django
[root@web03 linux]# pip3 install uwsgi
[root@web03 linux]# pip3 install django==2.2.2 4、创建Python项目代码
[root@web03 linux]# cd /opt
[root@web03 opt]# django-admin startproject linux
[root@web03 opt]# cd linux
[root@web03 linux]# django-admin startapp linux1 5、编辑项目启动配置文件
[root@web03 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
uwsgi参数:
-d : 以守护进程方式运行
--ini : 指定配置文件的路径 [root@web03 linux]# cd /opt/linux
[root@web03 linux]# uwsgi -d --ini myweb_uwsgi.ini
[root@web03 linux]# ps -ef | grep uwsgi # 过滤下进程
root 2820 1 0 21:50 ? 00:00:00 uwsgi -d --ini myweb_uwsgi.ini # 1个守护进程
root 2822 2820 0 21:50 ? 00:00:00 uwsgi -d --ini myweb_uwsgi.ini # 4个松祚进程
root 2823 2820 0 21:50 ? 00:00:00 uwsgi -d --ini myweb_uwsgi.ini
root 2824 2820 0 21:50 ? 00:00:00 uwsgi -d --ini myweb_uwsgi.ini
root 2825 2820 0 21:50 ? 00:00:00 uwsgi -d --ini myweb_uwsgi.ini 7、配置Nginx连接uwsgi
[root@web03 linux]# vim /etc/nginx/conf.d/python.conf
---------------------------------------------------------------------------------------------------
# 配置一个网站
server {
# 监听端口
listen 80;
# 配置域名
server_name py.test.com;
# 配置域名路径
location / {
# 加载nginx代理uwsgi的配置项
include uwsgi_params;
# 指定uwsgi的访问地址
uwsgi_pass 127.0.0.1:8000;
# uwsgi的超时时间
uwsgi_read_timeout 2;
# 自定义uwsgi代理项目的路径以及配置项
uwsgi_param UWSGI_SCRIPT linux.wsgi;
# 指定Python项目的路径
uwsgi_param UWSGI_CHDIR /opt/linux;
# 索引文件
index index.html index.htm;
# 客户端上传文件的最大值
client_max_body_size 35m;
}
}
---------------------------------------------------------------------------------------------------
8、测试并重启Nginx
[root@web03 conf.d]# nginx -t # 测试
[root@web03 conf.d]# systemctl restart nginx # 重启nginx服务 9、修改本地域名解析
C:\Windows\System32\drivers\etc\hosts
192.168.15.9 py.test.com

day08 Nginx模块的更多相关文章

  1. 结合源码看nginx-1.4.0之nginx模块组织结构详解

    目录 0. 摘要 1. nginx模块组织结构 2. nginx模块数据结构 3. nginx模块初始化 4. 一个简单的http模块 5. 小结 6. 参考资料 0. 摘要 nginx有五大优点:模 ...

  2. 【转】Nginx模块开发入门

    转自: http://kb.cnblogs.com/page/98352/ 结论:对Nginx模块开发入门做了一个helloworld的示例,简单易懂.也有一定的深度.值得一看. Nginx模块开发入 ...

  3. Nginx模块开发入门

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  4. Nginx模块fastcgi_cache的几个注意点 转

    Nginx模块fastcgi_cache的几个注意点   去年年底,我对nginx的fastcgi_cache进行摸索使用.在我的测试过程中,发现一些wiki以及网络上没被提到的注意点,这里分享一下. ...

  5. 开发Nginx模块

    开发Nginx模块 前面的哪些话 关于Nginx模块开发的博客资料,网上很多,很多.但是,每篇博客都只提要点,无法"step by step"照着做,对于初次接触Nginx开发的同 ...

  6. [转] Nginx模块开发入门

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  7. nginx模块开发获取post参数

    > 您好!>     我想请问下nginx模块里面怎么获取post参数,能有具体的代码更好!谢谢> 对于 "application/x-www-form-urlencode ...

  8. Nginx模块开发入门(转)

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  9. Nginx模块开发入门(转)

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

随机推荐

  1. Luogu 520题纪念

    一入OI深似海......

  2. iostat主要性能指标

    iostat参数很多,日常运维中主要关注一下字段(根据这些字段的输出内容一般就可以确定服务器是否存在IO性能瓶颈) 1.%iowait:CPU等待输入输出完成时间的百分比.该值较高,表示磁盘存在I/O ...

  3. CentOS 7 tmpwatch 2.11 版本变更,移除 cronjob 任务

    老版本(RHEL6) tmpwatch 原理 在 RHEL6 上,/tmp 目录的清理工作通常是交给 tmpwatch 程序来完成的,tmpwatch 的工作机制是通过 /etc/cron.daily ...

  4. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(上)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(上) 前面我们已经学习了一个成熟的脚手架(vue-cli),笔者希望通过这个脚手架快速搭建系统(或项目).而展开搭建最好 ...

  5. RabbitMQ保证消息的顺序性

    当我们的系统中引入了MQ之后,不得不考虑的一个问题是如何保证消息的顺序性,这是一个至关重要的事情,如果顺序错乱了,就会导致数据的不一致.       比如:业务场景是这样的:我们需要根据mysql的b ...

  6. 动态代理中newProxyInstance中三个参数

     JDK Proxy(代理对象): Proxy.newProxyInstance 方法的三个参数创建代理对象 增强 person对象 使用代理对象代替person 去执行 doCourt方法参数1 类 ...

  7. Git项目迁移(把当前git项目迁移到新的git地址)

    使用 git clone --bare 命令clone当前git git clone --bare http://gitlab.xxx/demo.git 推到新的git地址 cd demo.git g ...

  8. 来了!公开揭密团队成员开发鸿蒙 OpenHarmony 的完整过程(收获官方7000奖金和开发板等,1w字用心总结)

    背景 随着 OpenHarmony 组件开发大赛结果公布,我们的团队成员被告知获得了二等奖,在开心之余也想将我们这段时间宝贵的开发经验写下来与大家分享,当我们看到参赛通知的时候已经是 9 月中旬的时候 ...

  9. SpringCloud升级之路2020.0.x版-37. 实现异步的客户端封装配置管理的意义与设计

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 为何需要封装异步 HTTP 客户端 WebClient 对于同步的请求,我们使用 spri ...

  10. python实现图像二值化

    1.什么是图像二值化 彩色图像: 有blue,green,red三个通道,取值范围均为0-255 灰度图:只有一个通道0-255,所以一共有256种颜色 二值图像:只有两种颜色,黑色和白色,二值化就是 ...