Nginx的第三方模块及其它模块介绍

Nginx的第三方模块
第三模块是对nginx 的功能扩展,第三方模块需要在编译安装nginx 的时候使用参数--add-module=PATH指定路径添加,有的模块是由公司的开发人员针对业务需求定制开发的,有的模块是开源爱好者开发好之后上传到github进行开源的模块,nginx支持
第三方模块,需要重新编译源码才能支持
开源的echo模块,实现输出变量等信息
    https://github.com/openresty/echo-nginx-module
示例:
	#yum install git –y
	#cd /usr/local/src
	#git clone https://github.com/openresty/echo-nginx-module.git
	#cd nginx-1.16.0/
	#useradd –r –s /sbin/nologin nginx
	#yum install gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed

	# ./configure \
	--prefix=/apps/nginx \
	--user=nginx --group=nginx \
	--with-http_ssl_module \
	--with-http_v2_module \
	--with-http_realip_module \
	--with-http_stub_status_module \
	--with-http_gzip_static_module \
	--with-http_perl_module \
	--with-pcre \
	--with-stream \
	--with-stream_ssl_module \
	--with-stream_realip_module \
	--add-module=/usr/local/src/echo-nginx-module
	# make && make install

vim /apps/nginx/conf/conf.d/pc.conf
	location /test {
		index index.html;
		default_type text/html;
		echo "hello world,main-->";
		echo_reset_timer;
		echo_location /sub1;
		echo_location /sub2;
		echo "took $echo_timer_elapsed sec for total.";
	}
	location /sub1 {
		echo_sleep 1;
		echo sub1;
	}
	location /sub2 {
		echo_sleep 1;
		echo sub2;
	}
nginx 变量使用
nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用,变量可以分为内置变量和自定义变量,内置变量是由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的值 

常见内置变量
$remote_addr;#存放了客户端的地址,注意是客户端的公网IP
$args;#变量中存放了URL中的指令
    http://www.magedu.net/main/index.do?id=090&partner=search
    以上:id=090&partner=search 即为 $args
$document_root;#保存了针对当前资源的请求的系统根目录,如/apps/nginx/html
$cookie_name; #表示key为 name 的cookie值
$document_uri;#保存了当前请求中不包含指令的URI,注意是不包含请求的指令,如http://www.magedu.net/main/index.do?id=090&partner=search 会被定义为/main/index.do
$host;#存放了请求的host名称
$http_user_agent;#客户端浏览器的详细信息
$http_cookie;#客户端的cookie信息
$limit_rate;#如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0 
$remote_port;#客户端请求Nginx服务器时客户端随机打开的端口
$remote_user;#已经经过Auth Basic Module验证的用户名
$request_body_file;#做反向代理时发给后端服务器的本地资源的名称
$request_method;#请求资源的方式,GET/PUT/DELETE等
$request_filename;#当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径,如/apps/nginx/html/main/index.html
$request_uri;#包含请求参数的原始URI,不包含主机名 如:main/index.do?id=090&partner=search。 
$scheme;#请求的协议,如ftp,https,http等 
$server_protocol;#请求资源的协议版本,如HTTP/.0,HTTP/.,HTTP/.0等 
$server_addr;#保存了服务器的IP地址
$server_name;#请求的服务器的主机名 
$server_port;#请求的服务器的端口
自定义变量:
    自定义变量名称和值,使用指令set $variable value
格式如下:
    set $variable value; 
    支持:server, location, if
示例:
	set $name magedu;
	echo $name;
	set $my_port $server_port;
	echo $my_port;
	echo "$server_name:$server_port";
ngx_http_log_module
ngx_http_log_module模块
    指定日志格式记录请求
log_format name string ...;
    string可以使用nginx核心模块及其它模块内嵌的变量
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
    access_log off; #禁用访问日志
    访问日志文件路径,格式及相关的缓冲的配置
	    buffer=size
	    flush=time
示例
    log_format compression '$remote_addr-$remote_user [$time_local] ' 
							'"$request" $status $bytes_sent ' 
							'"$http_referer" "$http_user_agent" "$gzip_ratio"';
    access_log /spool/logs/nginx-access.log compression buffer=32k;

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
	open_log_file_cache off;
	缓存各日志文件相关的元数据信息
	max:缓存的最大文件描述符数量
	min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项
	inactive:非活动时长
	valid:验证缓存中各缓存项是否为活动项的时间间隔
自定义json日志格式
log_format access_json '{"@timestamp":"$time_iso8601",'
	'"host":"$server_addr",'
	'"clientip":"$remote_addr",'
	'"size":$body_bytes_sent,'
	'"responsetime":$request_time,'
	'"upstreamtime":"$upstream_response_time",'
	'"upstreamhost":"$upstream_addr",'
	'"http_host":"$host",'
	'"uri":"$uri",'
	'"domain":"$host",'
	'"xff":"$http_x_forwarded_for",'
	'"referer":"$http_referer",'
	'"tcp_xff":"$proxy_protocol_addr",'
	'"http_user_agent":"$http_user_agent",'
	'"status":"$status"}';
	access_log /apps/nginx/logs/access_json.log access_json;
json格式的日志访问统计
#cat nginx_json.py
#!/usr/bin/env python
#coding:utf-8
status_200= []
status_404= []
with open("access_json.log") as f:
		for line in f.readlines():
		line = eval(line)
		if line.get("status") == "200":
				status_200.append(line.get)
		elif line.get("status") == "404":
				status_404.append(line.get)
		else:
				print("状态码 ERROR")
f.close()
print "状态码200的有--:",len(status_200)
print "状态码404的有--:",len(status_404)
# python nginx_json.py
状态码200的有--: 1910
状态码404的有--: 13
关于favicon.ico
favicon.ico 文件是浏览器收藏网址时显示的图标,当使用浏览器访问页面时,浏览器会自己主动发起请求获取页面的favicon.ico文件,但是当浏览器请求的favicon.ico文件不存在时,服务器会记录404日志,而且浏览器也会显示404报错 
解决方案:
服务器不记录访问日志:
	location = /favicon.ico {
		log_not_found off; #文件没发现事件不记录error_log
		access_log off; #不记录access_log
	} 
将图标保存到指定目录访问:
	#location ~ ^/favicon\.ico$ {
	location = /favicon.ico {
		root /data/nginx/html/pc/images;
	}
ngx_http_gzip_module
ngx_http_gzip_module
	用gzip方法压缩响应数据,节约带宽
gzip on | off;
	启用或禁用gzip压缩
gzip_comp_level level;
	压缩比由低到高:1 到 9, 默认:1 
gzip_disable regex ...;
	匹配到客户端浏览器不执行压缩
	示例:gzip_disable "MSIE[1-6]\.";
gzip_min_length length;
	启用压缩功能的响应报文大小阈值
gzip_http_version 1.0 | 1.1;
	设定启用压缩功能时,协议的最小版本,默认:1.1
gzip_buffers number size;
	支持实现压缩功能时缓冲区数量及每个缓存区的大小
	默认:32 4k 或 16 8k
gzip_types mime-type ...;
	指明仅对哪些类型的资源执行压缩操作;即压缩过滤器
	默认包含有text/html,不用显示指定,否则出错
gzip_vary on | off;
    如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
	nginx充当代理服务器时,对于后端服务器的响应报文,在何种条件下启用压缩功能
	off:不启用压缩
	expired,no-cache, no-store,private:对后端服务器的响应报文首部Cache-Control值任何一个,启用压缩功能
示例:
	gzip on;
	gzip_comp_level 6;
	gzip_min_length 64;
	gzip_vary on;
	gzip_types text/xml text/css application/javascript;
选择SSL证书品牌(CA供应商)
阿里云SSL证书申请:
	https://www.aliyun.com/product/cas?spm=a2c4g.11174283.2.1.47676fd4baNCYX
支持阿里云颁发数字证书的安全CA中心包括:
	Symantec:赛门铁克(Symantec)是全球第一大数字证书颁发机构、全球最值得信赖的SSL证书品牌,所有证书都采用业界领先的加密技术,为不同的网站和服务器提供安全解决方案
	CFCA: 中国金融认证中心(CFCA)通过国际WebTrust认证,遵循全球统一鉴证标准,是国际CA浏览器联盟组织成员。CFCA全球信任SSL证书,由中国权威数字证书认证机构自主研发,纯国产证书。CFCA提供 7x24 小时金融级的安全保障服务,且有完善的风险承保计划。提供中文版全球信任体系电子认证业务规则(CPS),便于用户理解双方权利和义务
	GeoTrust: GeoTrust 是全球第二大数字证书颁发机构, 也是身份认证和信任认证领域的领导者,采用各种先进的技术使任何大小的机构和公司都能安全、低成本地部署SSL数字证书和实现各种身份认证
	GlobalSign: GMO GlobalSign是全球最早的数字证书认证机构之一,一直致力于网络安全认证及数字证书服务,是一个备受信赖的CA和SSL数字证书提供商
选择证书类型
阿里云联合有资质的CA中心推荐以下几种数字证书配置组合方案:
免费型DV SSL: 免费型DV SSL证书是基础级SSL产品
	说明 目前仅Symantec提供免费型数字证书,该证书仅支持绑定一个域名
	只验证域名所有权,数小时内即可颁发
	只提供通信链路加密功能
	根证书一般使用CA中心认证的根证书
	支持绑定一个明细子域名,且不支持通配符域名
通配符DV SSL:通配符DV SSL证书属于DV型SSL证书(Domain Validation SSL) 
	只验证域名所有权,数小时内即可颁发
	提供高强度通信链路加密功能
	支持绑定一个带有通配符的域名
专业版OV SSL: 专业版OV SSL证书属于OV型SSL证书(Organization Validation SSL) 验证域名所有权和申请单位的真实身份,解决在线信任问题
	证书中显示申请者的企业单位名称,让访问用户安心使用
	提供高强度通信链路加密功能
	支持最多绑定100个域名,支持绑定通配符域名
	说明 除专业版OV SSL证书外,Symantec还提供增强型OV SSL证书。增强型OV SSL证书采用ECC椭圆曲线算法
高级版EV SSL:高级版EV SSL证书属于EV型SSL证书(Extended Validation SSL) 
	严格验证域名所有权和申请单位的真实身份
	证书在大部分浏览器中能显示绿色地址栏(部分证书在Safari浏览器中不显示),有效解决在线信任和网站被假冒问题
	证书中详细显示申请者的企业单位信息,让访问用户安心使用
	提供高强度通信链路加密功能。
	支持最多绑定100个域名
	说明 除高级版EV SSL证书外,Symantec还提供增强型EV SSL证书。增强型EV SSL证书采用ECC椭圆曲线算法
ngx_http_ssl_module
ngx_http_ssl_module模块:
ssl on | off;
	为指定虚拟机启用HTTPS protocol, 建议用listen指令代替
ssl_certificate file;
	当前虚拟主机使用PEM格式的证书文件
ssl_certificate_key file;
	当前虚拟主机上与其证书匹配的私钥文件
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]; 支持ssl协议版本,默认为后三个
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
	none: 通知客户端支持ssl session cache,但实际不支持
	builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
	[shared:name:size]:在各worker之间使用一个共享的缓存
ssl_session_timeout time;
	客户端连接可以复用ssl session cache中缓存的有效时长,默认5m
示例:
	server {
		listen 443 ssl;
		server_name www.magedu.com;
		root /vhosts/ssl/htdocs;
		ssl on;
		ssl_certificate /etc/nginx/ssl/nginx.crt;
		ssl_certificate_key /etc/nginx/ssl/nginx.key;
		ssl_session_cache shared:sslcache:20m;
		ssl_session_timeout 10m;
	}
ngx_http_rewrite_module
ngx_http_rewrite_module模块:
	将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换
示例:
	http://www.magedu.com/hn --> http://www.magedu.com/henan
	http://www.magedu.com --> https://www.magedu.com/
if (condition) { ... }
	条件满足时,执行配置块中的配置指令;server, location
	condition:
	比较操作符:
		= 相同 != 不同
		~ 模式匹配,区分字符大小写
		~* 模式匹配,不区分字符大小写
		!~ 模式不匹配,区分字符大小写
		!~* 模式不匹配,不区分字符大小写
	文件及目录存在性判断:
		-e,!-e 存在与否(包括文件,目录,软链接)
		-f,!-f 文件 -d,!-d 目录 -x,!-x 执行
注意: if (condition) { ... } 语句中,如果$变量的值为空字符串或是以0开头的任意字符串,则 if 指令认为该条件为false,其它条件为true
示例:
	location /test {
		 index index.html;
		 default_type text/html;
		 if ( $scheme = http ){
			 return 301 https://www.magedu.net/;
		 }
		 if ( $scheme = https ){
			 echo "if ----> $scheme";
		 }
	}
示例:
	if (-f $request_filename) {
		echo "file is exist";
	}
	if (!-f $request_filename) {
		echo "file is not exist";
		return 409;
	}
return
	return code [text]; #返回客户端指定的状态码和文本说明
	return code URL;
	return URL;
	停止处理,并返回给客户端指定的响应码(包括: 204, 400, 402 — 406, 408, 410, 411, 413, 416, 500 — 504),并对 301, 302, 303, 307, 308跳转到URL
rewrite_log on | off;
	是否开启重写日志, 发送至error_log(notice level) 
set $variable value;
	用户自定义变量
	注意:变量定义和调用都要以$开头
示例:
	 location /test {
		 root /data/nginx/html/pc;
		 default_type text/html;
		 index index.html;
		 if ( $scheme = http ){
			 #return 666;
			 #return 666 "not allow http";
			 #return 301 http://www.baidu.com;
			 return 500 "service error";
			 echo "if-----> $scheme"; #return后面的将不再执行
		 }
		 if ( $scheme = https ){
			 echo "if ----> $scheme";
		 }
 	}

rewrite regex replacement [flag]
	将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI
	注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查
	隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制
	如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端, 即永久重定向301

[flag]:
	last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环
	break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块后的其它配置;结束循环
	redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;可使用相对路径,或http://或https://开头,此重定向信息不可缓存,状态码:302
	permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,此重定向信息可缓存,状态码:301
状态码:301,302,307

在这里插入图片描述

last 和 break
break:匹配成功后不再向下匹配,也不会跳转到其他的location,即直接结束匹配并给客户端返回结果数据
last:对某个location的URL匹配成功后会停止当前location的后续rewrite规则,并结束当前location,然后将匹配生成的新URL跳转至其他location继续匹配,直到没有location可匹配后将最后一次location的数据返回给客户端

	location /break {
		rewrite ^/break/(.*) /test/$1 break; #break不会跳转到其他的location
		return 666 "break";
	}
	location /last {
		rewrite ^/last/(.*) /test/$1 last; #last会跳转到其他的location继续匹配新的URI
		return 888 "last";
	}
	location /test {
		return 999 "test";
		index index.html;
		root /data/nginx; 
	}
	mkdir /data/nginx/test/
	echo test Page > /data/nginx/test/index.html
rewrite 生产案例
要求:将 http:// 请求跳转到 https://
生产案例
	location / {
		if ($scheme = http ) {
		rewrite / https://www.magedu.net/ redirect;
		 }
	}

要求:当用户访问到公司网站的时输入了一个错误的URL,可以将用户重定向至官网首页
生产案例
	location / {
		root /data/nginx/html/pc;
		index index.html;
		if (!-f $request_filename) {
			#return 404 "No exsit";
			rewrite (.*) http://www.magedu.net/index.html;
		}
	}
ngx_http_referer_module
ngx_http_referer_module模块:
	用来阻止Referer首部无有效值的请求访问,可防止盗链
valid_referers none|blocked|server_names|string ...;
	定义referer首部的合法可用值,不能匹配的将是非法值
	none:请求报文首部没有referer首部
	blocked:请求报文有referer首部,但无有效值
	server_names:referer首部中包含本主机名
	arbitrary_string:任意字符串,但可使用*作通配符
	regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,
	例如: ~.*\.magedu\.com

防止盗链生产案例:
	valid_referers none block server_names
	*.magedu.com magedu.* *.mageedu.com mageedu.* ~\.magedu\. ~\.google\. ~\.baidu\.;
	if ($invalid_referer) {
		return 403 "Forbidden Access";
	}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值