Nginx-深度学习1.动静分离通过中间件将动态请求和静态请求分开。原因:分离资源,减少不必要的请求消耗,减少请求延迟。动静态请求图例:基本配置upstreamphp_api{server127.0.0.1:8080;}server{rootfilePath;位置~\.php${proxy_passhttp://php_api;indexindex.htmlindex.htm;}位置~\.(jpg|png|gif){过期1小时;gzip上;}}2、重写规则1、场景:URL访问跳转、支持开发设计(页面跳转、兼容性支持、展示效果等)SEO优化维护(后台维护、流量转发等)安全2、配置语法重写配置语法:rewriteregexreplacement[flag];默认值:无上下文:服务器、位置、if示例:重写^(.*)$/pages/main.htmlbreak;regex(正则)Linux中的pcregrep命令可用于测试正则表达式。|MetaCharacter|Meaning|.匹配除换行符外的任意字符?重复0或1+重复1次或多次d匹配数字*贪心模式,多少匹配多少^匹配开始$匹配结束{n}重复n次{n,}重复n次或多次[c]匹配单个字符c[a-z]匹配a-z中任意一个小写字母\转字符()用于匹配()之间的内容,通过$1,$2调用flagflag表示laststoprewritedetectionbreakstoprewritedetectionredirect返回302临时重定向,地址栏会显示重定向地址permanentreturns301permanentredirection,地址栏会显示重定向地址301永久重定向:除非用户清空缓存,否则下次请求仍会请求重定向302Temporary重定向:用户的下一次请求也会被服务器重定向。last和break的区别:last会创建一个新的连接,继续匹配。break会直接停留在那个水平。redirect:关闭nginx后,重定向会失败。永久:关闭nginx并重定向到新地址。例子:location/{#文件不存在,直接访问4399if(!-f$request_filename){rewrite^/(.*)$http://www.4399.com;}}优先执行server块的rewrite命令Executelocationmatching在选择的位置执行rewrite3.Nginx高级模块1.secure_link_module模块(1)制定并允许检查请求链接的真实性并保护资源免遭未授权访问(2)限制链接的有效期图注:配置语法secure_link配置语法:secure_link表达式;默认值:无上下文:http、服务器、位置secure_link_md5配置语法:secure_link_md5表达式;默认值:无上下文:http、服务器、位置简单配置示例:root/opt/app/code;location/{secure_link$arg_md5,$arg_expires;secure_link_md5"$secure_link_expires$uri自定义字符串";如果($secure_link=""){返回403;}如果($secure_link="0"){返回410;}}生成URL脚本:#!/bin/bashservername="yourservername"download_file="/download/test.img"time_num=$(date-d"2018-10-1800:00:00"+%s)secure_num="自定义字符串"res=$(echo-n"${time_num}${download_file}${secure_num}"|opensslmd5-binary|opensslbase64|tr+/-_|tr-d=)echo"http://${servername}${download_file}?md5=${res}&expires=${time_num}"注意:1.生成的脚本中的自定义字符串和配置中的自定义字符串要一致。2.验证规则要一致。3.如果没有openssl,yum安装即可2.geoip_module模块根据IP地址匹配MaxMineGeoIP二进制文件,读取IP位置信息。默认安装的Nginx没有安装geoip模块。安装命令:yuminstallnginx-module-geoip使用场景:区分国内外HTTP访问规则区分国内城市和地区配置HTTP访问规则使用步骤:安装geoip:yuminstallnginx-module-geoip,安装完成后完成后,查看/etc/nginx/module目录。如果有对应的so文件,则安装成功。在/etc/nginx/nginx.conf配置文件“modules/ngx_stream_geoip_module.so”开头添加load_module"modules/ngx_http_geoip_module.so";load_module;下载地理分区文件:wgethttp://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gzwgethttp://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat。gz使用gunzip命令解压下载的文件配置示例geoip_country/etc/nginx/geoip/GeoIP.dat;geoip_city/etc/nginx/geoip/GeoLiteCity.dat;server{location/myip{default_typetext/plain;返回200“$remote_addr$geoip_country_name$geoip_country_code$geoip_city”;}}4、基于Nginx的HTTPS服务1、为什么需要HTTPS原因:HTTP不安全传输数据被中间人窃取,信息泄露数据内容被劫持、篡改2、HTTPS协议的实现,对传输内容进行加密,对对称加密进行鉴权和非对称加密HTTPS加密协议原理。客户端使用HTTPS方式与Web服务器通信。客户端使用httpsURL访问Web服务器,并需要与Web服务器建立SSL连接。Web服务器收到客户端的请求后,会向客户端的浏览器发送一份网站的证书信息(证书中包含公钥),并Web服务器开始协商SSL连接的安全级别,即信息加密级别。客户端的浏览器根据双方约定的安全级别建立会话密钥,然后用网站的公钥对会话密钥进行加密,传送给网站的Web服务器。使用您自己的私钥来解密会话密钥。Web服务器使用会话密钥来加密与客户端的通信。通信示意图:3.证书签名生成准备步骤:确认是否安装openssl,openssl版本nginx编译http-ssl-module,nginx-V生成自签名证书步骤:生成keykeyopensslgenrsa-idea-outronaldo.key1024生成证书签名请求文件(csr文件)opensslreq-new-keyronaldo.key-outronaldo.csr当提示输入A挑战密码时,说明ca文件需要改密码,按进入将以上两步生成的文件打包,发送给签名机构完成证书签名。生成证书签名文件(CA文件)opensslx509-req-days3650-inronaldo.csr-signkeyronaldo.key-outronaldo.crt配置语法:ssl配置语法:sslon|离开;默认值:ssl关闭;上下文:http,serverssl_certificate(crt文件所在位置)配置语法:ssl_certificate文件;默认值:无上下文:http,serverssl_certificate_key(密钥文件所在位置)配置语法:ssl_certificate_keyfile;默认值:无上下文:http,server简单示例:server{listen443;服务器名称本地主机;SSL开启;ssl_certificate/etc/nginx/ssl_key/ronaldo.crt;ssl_certificate_key/etc/nginx/ssl_key/ronaldo.key;指数指数。html索引.htm;位置/{root/opt/app/code;}}配置完成后:停止Nginx:nginx-sstop-c/etc/nginx/nginx.conf,会要求输入ronaldo.key的密码。启动Nginx:nginx-c/etc/nginx/nginx.conf,同样会要求你输入密码。查看443端口是否开启:netstat-luntp|grep4434,配置Apple要求的证书服务器所有连接使用TLS1.2或以上(openssl1.0.2)版本:openssl版本自签名证书加密签名算法类型和公钥位:opensslx509-noout-text-in。/ronaldo.crt升级openssl脚本#!/bin/bashcd/opt/downloadwgethttps://www.openssl.org/source/openssl-1.0.2k.tar。gztarzxfopenssl-1.0.2k.tar.gzcdopenssl-1.0.2k./config--prefix=/usr/local/opensslmake&&makeinstallmv/usr/bin/openssl/usr/bin/openssl.OFFmv/usr/include/openssl/usr/include/openssl.OFFln-s/usr/local/openssl/bin/openssl/usr/bin/opensslln-s/usr/local/openssl/include/openssl/usr/include/opensslecho"/usr/local/openssl/lib">>/etc/ld.so.confldconfig-voopensslversion-aHTTPS证书必须使用SHA256或更高的哈希算法签名HTTPS证书必须使用RSA2048位或ECC256位或更高的公钥算法使用转发加密技术通过自签名方式,符合苹果要求,通过密钥文件直接生成crt文件:opensslreq-days36500-x509-sha256-nodes-newkeyrsa:2048-keyoutronaldo.key-outronaldo_apple.crt-keyout参数同时会重新生成一个密钥文件(无保护码),重新加载Nginx不需要再次输入密码。crt文件生成后,只需要修改配置文件,直接生成没有保护码的key:opensslrsa-in./ronaldoold.key-out./ronaldonew.key5.HTTPS服务优化激活keepalivelong链接并在配置文件中写入:keepalive_timeout100setsslsessioncache并在配置文件中写入:ssl_session_cacheshared:SSL:10m5.Nginx和Lua的开发Nginx+Lua优势:充分结合了Nginx的并发处理epoll和Lua的优点轻量化实现简单功能和高并发场景。1、Lua是一种简洁、轻量级、可扩展的脚本语言安装:yuminstalllua运行:lua命令进入交互界面,输入:print("HelloWorld")执行lua脚本:#!/usr/bin/luaprint("Helloworld")comment--linecomment--[[blockcomment--]]variablea='alon123"'a="alon123""a='97lo1004923"'a=[[alo123"]]上面它意思是一样的,第三点使用ASCII表注意:Lua值类型只有double类型LuaBoolean类型只有nil和false是false,数字0和空字符串在Lua中都是true变量如果没有特别说明,都是是全局变量;如果你希望它是一个局部变量,添加一个没有++或+=操作的localLua签名~=:notequalto..:字符串拼接io库的读写函数分别从stdin和stdout读写while循环语句sum=0num=1whilenum<=100dosum=sum+numnum=num+1endprint("sum=",sum)for循环语句sum=0fori=1,100dosum=sum+iendif-else判断语句ifage==40andsex=="Male"thenprint("Menover40")elseifage>60andsex~="Female"thenprint("Notawomanandover60")elselocalage=io.read()print("Yourageis"..age)end2、Nginx+Lua环境需要下载安装:LuaJITngx_devel_kit和lua-nginx-module重新编译Nginx下载安装详细步骤:3.Nginx调用lua模块可插拔指令的模块化加载和执行Nginx共有11个处理阶段。指令含义set_by_lua、set_by_lua_file设置nginx变量,可以实现复杂的赋值逻辑access_by_lua、access_by_lua_file请求访问阶段处理,用于访问控制content_by_lua,content_by_lua_file内容处理器,接收请求处理并输出响应4、NginxLuaAPIAPI含义ngx.varnginx变量ngx.req.get_headers获取请求头ngx.req.get_uri_args获取url请求参数ngx.redirect重定向ngx.print输出响应的contentbodyngx.say和nginx.print是一样的,但是会进入ngx.header来输出响应头...5.灰度发布按照一定的关系不同,代码不管不同就发布,让发布的代码能够顺利发布。根据用户信息cookie等信息差异,根据用户ip地址实现灰度发布示意图:
