(二)nginx模块(core主模块---->MIME,动静分离)文件操作,访问控制,输出信息--状态页

注意:测试重点

如果用windows下面的浏览器测试nginx
name就需要配置windows下面的hosts文件

C:\Windows\System32\drivers\etc\hosts

一. ngx_http_core_module核心模块

MIME文件扩展名映射

也就是识别文件类型

在响应报文中将指定的文件扩展名映射MIME对应的类型
include /etc/nginx/mime.types;

default_type application/octet-stream; 除上面指定的类型外,就为默认的MIME类型,浏览器一般会提示下载(可能不安全)

一般建议将默认类型注释掉-------也就是变成文本类型

/etc/nginx/mime.types中的类型
types {
 text/html html;
 image/gif gif;
 image/jpeg jpg;
 ...
}

MIME参考文档
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types

tcp_nodelay on | off;
在keepalived模式下的连接是否启用TCP_NODELAY选项,即Nagle算法当为
off时,延迟发送,每发送一个包就需要确认ACK,才发送下一个包
默认On时,不延迟发送,多个包才确认一次(效率高)
可用于:http, server, location

tcp_nopush on | off ;
在开启sendfile,on时合并响应头和数据体在一个包中一起发送

sendfile on | off;
是否启用sendfile功能,在内核中封装报文直接发送,默认Off

charset charset | off;
是否在响应报文中的Content-Type显示指定的字符集,默认off不显示
如charset utf-8 建议不显示

server_tokens on | off | build | string;
是否在响应报文的Server首部显示nginx版本
off会隐藏本信息

include /etc/nginx/conf.d/*.conf;将配置信息放入文件
因为实在http {中导入,所以是http的局部配置信息,可以加入server等配置}
在这里插入图片描述

自定义nginx版本信息

如果想自定义响应报文的nginx版本信息,需要修改源码文件,

重新编译:在源码文件中
如果server_tokens on,修改 src/core/nginx.h 修改第13-14行,如下示例
#define NGINX_VERSION “8.88.8”
#define NGINX_VER “qcqginx/” NGINX_VERSION

如果server_tokens off,修改 src/http/ngx_http_header_filter_module.c
第49行,如下示例:
static char ngx_http_server_string[] = “Server: nginx” CRLF;
把其中的nginx改为自己想要的文字即可,如:qcqginx
最后重新编译
./config …
make && make install

1.server语句块

在http语句块中

ngx_http_core_module
与套接字相关的配置:
在http块里面

配置一个虚拟主机
server {
	listen address[:PORT]|PORT;  监听在ip端口上
	
	server_name SERVER_NAME;	网站名(支持多域名)fqdn
	
	root /PATH/TO/DOCUMENT_ROOT;   网页文件路径
}  

listen

listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
 listen address[:port] [default_server] [ssl] [http2 | spdy] 
[backlog=number][rcvbuf=size] [sndbuf=size];

listen字段后的标识

default_server 设定为默认虚拟主机,无法匹配虚拟主机时使用(在listen后面写)

ssl 限制仅能够通过ssl连接提供服务   相当于443

backlog=number 超过并发连接数后,新请求进入后援队列的长度

rcvbuf=size 接收缓冲区大小

sndbuf=size 发送缓冲区大小

注意
(1) 基于port;
listen PORT; 指令监听在不同的端口
(2) 基于ip的虚拟主机
listen IP:PORT; IP 地址不同
(3) 基于hostname
server_name fqdn; 指令指向不同的主机名

server_name name …;
虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
支持*通配任意长度的任意字符

server_name *.magedu.com www.magedu.*

支持~起始的字符正则表达式模式匹配,慎用

 server_name ~^www\d+\.magedu\.com$

说明: \d 表示 [0-9]
匹配优先级机制从高到低
(1) 首先是字符串精确匹配 如:www.magedu.com
(2) 左侧*通配符 如:*.magedu.com
(3) 右侧*通配符 如:www.magedu.*
(4) 正则表达式 如: ~^.*.magedu.com$
(5) default_server
例如:在/data/建立多个站点

注意:在主文件中include /etc/nginx/default.d/*.conf;已经写在 http块中了
所以这在个文件夹下面定义的内容都属于http

在这里插入图片描述

在测试机上:更改hosts文件为了可以识别以上两个server_name(也就是设置DNS)
在这里插入图片描述
在这里插入图片描述

在主机上
在这里插入图片描述

二.location语句块

在server_name 中

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置

 ^~ 对URI的最左边部分做匹配检查,不区分字符大小写
 
 ~ 对URI做正则表达式模式匹配,区分字符大小写
 
 ~* 对URI做正则表达式模式匹配,不区分字符大小写
 
 不带符号 匹配起始于此uri的所有的uri
 
 \ 转义符,可将 . * ?等转义为普通符号
 
 匹配优先级从高到低:
  =, ^~,/*, 不带符号

匹配案例-精确匹配

在server部分使用location配置一个web界面,要求:当访问nginx 服务器的/login的时候要显示指定html文件的内

在这里插入图片描述

匹配案例-区分大小写

在这里插入图片描述

匹配案例-不区分大小写

在这里插入图片描述

匹配案例-URI开始

在这里插入图片描述

匹配案例-文件名后缀

在这里插入图片描述

匹配案例-优先级

在这里插入图片描述

Nginx 四层访问控制

访问控制基于模块ngx_http_access_module实现,可以通过匹配客户端源IP地址进行限制
在这里插入图片描述

Nginx账户认证功能

在这里插入图片描述

自定义错误页面

在这里插入图片描述

自定义访问日志

在这里插入图片描述

监测文件是否存在

try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文
件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前
的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误

在这里插入图片描述
在这里插入图片描述

长连接配置

keepalive_timeout number; #设定保持连接超时时长,0表示禁止长连接,默认为75s,通常配置在http字段作为
站点全局配置 keepalive_requests number; #在一次长连接上所允许请求的资源的最大数量,默认为100
在这里插入图片描述

作为下载服务器配置

在这里插入图片描述

作为上传服务器

在这里插入图片描述

示例

 root /vhosts/www/htdocs/;
		 http://www.magedu.com/index.html
		--> /vhosts/www/htdocs/index.html


server {
root /vhosts/www/htdocs/ ;
	 location /admin/ {
		root /webapps/app1/data/;
	 }
 }
	 http://www.magedu.com/admin/index.html
		--> /webapps/app1/data/admin/index.html
location = / {
	[ configuration A ]
}
http://www.magedu.com/


location / {
	[ configuration B ]
}
http://www.magedu.com/index.html

location /documents/ {
	[ configuration C ]
}
http://www.magedu.com/documents/linux.txt

location ^~ /images/ {
	[ configuration D ]
}
http://www.magedu.com/images/logo.jpeg

location ~* \.(gif|jpg|jpeg)$ {
	[ configuration E ]
}
http://www.magedu.com/documents/logo.jpg

location 实现动静分离

root 指定虚拟主机根目录,在定义location时,文件的绝对路径等于 root+location,
示例:

server {
	listen 80;
	server_name www.magedu.net;
	location / {
		root /data/nginx/html/pc;
	}
	location /about {
		root /opt/nginx/html/;
		#必须要在html目录中创建一个about目录才可以访问,否则报错
	建议不要在/about后面加  /  
				否则访问时就必须精确匹配 http://www.magedu.com/about/
		index index.html;
	}
}
		


 #mkdir /opt/nginx/html/about
 #echo about > /opt/nginx/html/about/index.html

3.location生产案例

生产案例:静态资源配置

location ^~ /static/ {
	root /data/nginx/static;
}
# 或者
location ~* \.(gif|jpg|jpeg|png|bmp|tiff|tif|css|js|ico)$ {
	root /data/nginx/static;
}

alias别名路径

alias path;
路径别名,文档映射的另一种机制;仅能用于location上下文
注意:使用时最好不要给最后一个文件夹加/,否则不会映射
示例:

http://www.magedu.com/bbs/index.html

location /bbs { 	注意: /bbs 后建议不要加 /
	alias /web/forum/;
} --> /web/forum/index.html

location /bbs/ {
	root /web/forum/;
} --> /web/forum/bbs/index.html

注意:location中使用root指令和alias指令的意义不同
root,给定的路径对应于location中的/uri 侧的/

alias,给定的路径对应于location中的/uri 的完整路径

alias定义路径别名,会把访问的路径重新定义到其指定的路径,如下示例:

server {
	listen 80;
	server_name www.magedu.net;
	location / {
		root /data/nginx/html/pc;
	}
	#使用alias的时候uri后面如果加了斜杠则下面的路径配置必须加斜杠,否则403禁止访问
	location /about {
	#当访问about时,访问alias定义的/opt/nginx/html/pc内容
		alias /opt/nginx/html/pc;
		index index.html;
	}
}

特殊的浏览器:360他会把所有的错误截获—改成自己广告—而不会出现原网页应该出现的错误信息
特殊的配置:京东会将错误的404页面定义为200 从而不会被截获(定义成301也会被截获)

定义客户端请求的相关配置

keepalive_timeout timeout [header_timeout];
设定保持连接超时时长,0表示禁止长连接,默认为75s
示例:在响应头显示此首部字段
第一个60是实际时长 ,
第二个50告诉对方是50s
keepalive_timeout 60 50;
也就是telnet会持续60秒
在这里插入图片描述

keepalive_requests number;
在一次长连接上所允许请求的资源的最大数量,默认为100
也就是允许传输多少个文件资源

keepalive_disable none | browser …;
对哪种浏览器禁用长连接

send_timeout time;
向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长

client_max_body_size size;
指定请求报文中实体的最大值,设为0,则不限制,默认1m,超过报413错误

client_body_buffer_size size;
用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由下面client_body_temp_path指令所定义的位置
client_body_temp_path path [level1 [level2 [level3]]];
设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量
目录名为16进制的数字;用hash之后的值从后往前截取第1、2、3级作为文件名

 client_body_temp_path /var/tmp/client_body 1 2 2
 											表示字符

1 1级目录占116进制,即2^4=16个目录 0-f
2 2级目录占216进制,即2^8=256个目录 00-ff
2 3级目录占216进制,即2^8=256个目录 00-ff

在这里插入图片描述

生产案例

上传服务器配置生产案例:

 location /upload {
	client_max_body_size 100m;
	client_body_buffer_size 2048k;
	client_body_temp_path /apps/nginx/temp 1 2 2;}

对客户端进行----限制

limit_rate rate;
限制响应给客户端的传输速率,单位是bytes/second
默认值0表示无限制
可以在location,server设置
在这里插入图片描述

limit_except method … { … },仅用于location
限制客户端使用除了指定的请求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE,OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

除了GET 之外其它方法仅允许192.168.1.0/24网段主机使用

location  / { 
	limit_except GET {
		allow 192.168.1.0/24;
		deny all;
	}
}

OPTIONS可以判断网站支持什么方法
nginx默认不支持
在这里插入图片描述

三. 文件操作优化的配置

aio异步io
aio on | off | threads[=pool];
是否启用aio功能,默认off ,为了性能可以on

directio直接io
directio size | off;
当文件大于等于给定大小时,同步(直接)写磁盘,而非写缓存,默认off
示例:

location /video/ {
	 sendfile on;
	 aio on;
	 directio 8m;
}

缓存
open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以缓存以下三种信息
(1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间
(2) 打开的目录结构
(3) 没有找到的或者没有权限访问的文件的相关信息
max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,将被删除

open_file_cache_errors on | off;
是否缓存查找时发生错误的文件一类的信息,默认值为off

open_file_cache_min_uses number;
open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项,默认值为1

open_file_cache_valid time;
缓存项有效性的检查频率,默认值为60s

访问控制ip

可实现基于ip的访问控制功能

allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all;

可以放在http, server, location, limit_except

自上而下检查,一旦匹配,将生效,条件严格的置前
小范围到最上面
示例:

location /about {
	root /data/nginx/html/pc;
	index index.html;
	deny 192.168.1.1;
	allow 192.168.1.0/24;
	allow 10.1.1.0/16;
	allow 2001:0db8::/32;
	deny all; #先允许小部分,再拒绝大部分
}

用户访问控制

实现基于用户的访问控制,使用basic机制进行用户认证

auth_basic string | off;
auth_basic_user_file file;

location /admin/ {
	auth_basic "Admin Area";     #提示
	#存放用户的文件
	auth_basic_user_file /etc/nginx/.ngxpasswd;
}

用户口令文件:抓包也可以抓到密码
1、明文文本:格式name:password:comment
2、加密文本:由htpasswd命令实现(和http一样
httpd-tools所提供

第一次用-c创建
第二次用-b加入用户

htpasswd -c  -b /etc/nginx/conf.d/.nginx_passwd  用户 

要实现这个得在浏览器中验证,记住hosts文件得添加dns
可以配合allow,deny限制的更加严格
在这里插入图片描述
在这里插入图片描述
curl -u 可以指定那个户名密码登录
在这里插入图片描述

输出信息—状态页

模块ngx_http_auth_basic_module
编译安装nginx的时候需要添加编译参数–with- http_stub_status_module

用于输出nginx的基本状态信息,

配置格式

stub_status;

示例

			这个路径-----状态页,不需要创建
location /nginx_status {
	stub_status;
	allow 127.0.0.1;
	allow 172.16.0.0/16;
	deny all;
 }

也就是访问www.qcq.com/nginx_status才有结果
在这里插入图片描述
输出信息示例:

Active connections: 291 
server accepts handled requests #下面三个数分别对应accepts,handled,requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106 

Active connections:当前状态,活动状态的连接数
accepts:统计总值,已经接受的客户端请求的总数
handled:统计总值,已处理完成的客户端请求总数,一般和accepts相同,除非拒绝
requests:统计总值,客户端发来的总的请求数
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值