当前位置: 首页 > news >正文

品牌企业网站建设公司价格中国空间站完整图

品牌企业网站建设公司价格,中国空间站完整图,wordpress高速优化,物流公司目录 一、Nginx架构和安装 1.1 Nginx 概述 1.1.1 nginx介绍 1.1.2?Nginx 功能介绍 1.1.3?基础特性 1.1.4?Web 服务相关的功能 1.2?Nginx 架构和进程 1.2.1?Nginx 进程结构 1.2.2?Nginx 进程间通信 1.2.3?Nginx 启动和 HTTP 连接建立 1.2.4?HTTP 处理过程 1…目录 一、Nginx架构和安装 1.1 Nginx 概述 1.1.1 nginx介绍 1.1.2?Nginx 功能介绍 1.1.3?基础特性 1.1.4?Web 服务相关的功能 1.2?Nginx 架构和进程 1.2.1?Nginx 进程结构 1.2.2?Nginx 进程间通信 1.2.3?Nginx 启动和 HTTP 连接建立 1.2.4?HTTP 处理过程 1.3?Nginx 模块介绍 1.4 Nginx安装 1.4.1?Nginx版本和安装方式 1.4.2?Nginx 编译安装 1.4.2.1 编译安装Nginx 1.4.2.2?验证版本及编译参数 1.5 平滑升级和回滚 二、Nginx核心配置详解 三、Nginx 高级配置 四、Nginx Rewrite 相关功能 4.1?ngx_http_rewrite_module 模块指令 4.1.1 if 指令 4.1.2 set 指令 4.1.3 break 指令 4.1.4 return 指令 4.2?rewrite 指令 4.2.1?rewrite flag 使用介绍 ?4.2.2?rewrite案例: 域名永久与临时重定向 4.2.2.1?永久重定向301 4.2.2.2?临时重定向302 4.2.3?rewrite 案例: break 与 last 4.2.4?rewrite案例: 自动跳转 https ?4.3 nginx 防盗链 4.3.1?实现盗链 4.3.2 实现防盗链 五、nginx反向代理功能 六、实现FastCGI ?6.1?FastCGI配置指令 6.2?FastCGI实战案例 : Nginx与php-fpm在同一服务器 ?6.3?php的动态扩展模块php的缓存模块 ?6.4 php高速缓存 ?七、nginx 二次开发版本 7.1?openresty 7.2 编译安装 openresty 一、Nginx架构和安装 1.1 Nginx 概述 1.1.1 nginx介绍 Nginxengine X 2002年开发分为社区版和商业版(nginx plus ) 2019年3月11日 F5 Networks 6.7亿美元的价格收购。 Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器。 解决C10K问题10K Connections。 Nginx官网nginx news nginx的其它的二次发行版 Tengine由淘宝网发起的Web服务器项目。它在Nginx的基础上针对大访问量网站的需求添加 了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网天猫商城等得到了 很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始 Tengine成为一个开源项目官网: http://tengine.taobao.org/OpenResty基于 Nginx 与 Lua 语言的高性能 Web 平台 章亦春团队开发官网http://openr esty.org/cn/ 1.1.2Nginx 功能介绍 静态的web资源服务器html图片jscsstxt等静态资源http/https协议的反向代理结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求tcp/udp协议的请求转发反向代理imap4/pop3协议的反向代理 1.1.3基础特性 模块化设计较好的扩展性高可靠性支持热部署不停机更新配置文件升级版本更换日志文件低内存消耗10000个keep-alive连接模式下的非活动连接仅需2.5M内存event-driven,aio,mmapsendfile 1.1.4Web 服务相关的功能 虚拟主机server支持 keep-alive 和管道连接(利用一个连接做多次请求访问日志支持基于日志缓冲提高其性能url rewirte路径别名基于IP及用户的访问控制支持速率限制及并发数限制重新配置和在线升级而无须中断客户的工作进程 1.2Nginx 架构和进程 1.2.1Nginx 进程结构 web请求处理机制 多进程方式服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端直 到用户关闭连接这样的优势是处理速度快子进程之间相互独立但是如果访问过大会导致服务 器资源耗尽而无法提供请求多线程方式与多进程方式类似但是每收到一个客户端请求会有服务进程派生出一个线程和此客 户端进行交互一个线程的开销远远小于一个进程因此多线程方式在很大程度减轻了web服务器 对系统资源的要求但是多线程也有自己的缺点即当多个线程位于同一个进程内工作的时候可 以相互访问同样的内存地址空间所以他们相互影响一旦主进程挂掉则所有子线程都不能工作 了IIS服务器使用了多线程的方式需要间隔一段时间就重启一次才能稳定。 Nginx是多进程组织模型而且是一个由Master主进程和Worker工作进程组成。 主进程(master process)的功能 对外接口接收外部的操作信号对内转发根据外部的操作的不同通过信号管理 Worker监控监控 worker 进程的运行状态worker 进程异常终止后自动重启 worker 进程读取Nginx 配置文件并验证其有效性和正确性建立、绑定和关闭socket连接按照配置生成、管理和结束工作进程 接受外界指令比如重启、升级及退出服务器等指令不中断服务实现平滑升级重启服务并应用新的配置开启日志文件获取文件描述符不中断服务实现平滑升级升级失败进行回滚处理编译和处理perl脚本 工作进程worker process的功能 所有 Worker 进程都是平等的实际处理网络请求由 Worker 进程处理Worker进程数量一般设置为核心数充分利用CPU资源同时避免进程数量过多导致进程竞争 CPU资源增加上下文切换的损耗接受处理客户的请求将请求依次送入各个功能模块进行处理I/O调用获取响应数据与后端服务器通信接收后端服务器的处理结果缓存数据访问缓存索引查询和调用缓存数据发送请求结果响应客户的请求接收主程序指令比如重启、升级和退出等 1.2.2Nginx 进程间通信 工作进程是由主进程生成的主进程使用fork()函数在Nginx服务器启动过程中主进程根据配置文件决 定启动工作进程的数量然后建立一张全局的工作表用于存放当前未退出的所有的工作进程主进程生 成工作进程后会将新生成的工作进程加入到工作进程表中并建立一个单向的管道并将其传递给工作进 程该管道与普通的管道不同它是由主进程指向工作进程的单向通道包含了主进程向工作进程发出 的指令、工作进程ID、工作进程在工作进程表中的索引和必要的文件描述符等信息。 主进程与外界通过信号机制进行通信当接收到需要处理的信号时它通过管道向相关的工作进程发送 正确的指令每个工作进程都有能力捕获管道中的可读事件当管道中有可读事件的时候工作进程就 会从管道中读取并解析指令然后采取相应的执行动作这样就完成了主进程与工作进程的交互。 worker进程之间的通信原理基本上和主进程与worker进程之间的通信是一样的只要worker进程之间能够 取得彼此的信息建立管道即可通信但是由于worker进程之间是完全隔离的因此一个进程想要知道另外一 个进程的状态信息,就只能通过主进程来实现。 为了实现worker进程之间的交互master进程在生成worker进程之后在worker进程表中进行遍历将该 新进程的PID以及针对该进程建立的管道句柄传递给worker进程中的其他进程为worker进程之间的通信做 准备当worker进程1向worker进程2发送指令的时候首先在master进程给它的其他worker进程工作信息 中找到2的进程PID然后将正确的指令写入指向进程2的管道worker进程2捕获到管道中的事件后解析指 令并进行相关操作这样就完成了worker进程之间的通信。 worker进程可以通过共享内存来通讯的比如upstream中的zone或者limit_req、limit_conn中的 zone等。操作系统提供了共享内存机制。 1.2.3Nginx 启动和 HTTP 连接建立 Nginx 启动时Master 进程加载配置文件Master 进程初始化监听的 socketMaster 进程fork 出多个 Worker 进程Worker 进程竞争新的连接获胜方通过三次握手建立 Socket 连接并处理请求 1.2.4HTTP 处理过程 1.3Nginx 模块介绍 核心模块是 Nginx 服务器正常运行必不可少的模块提供错误日志记录 、配置文件解析 、事件 驱动机制 、进程管理等核心功能标准HTTP模块提供 HTTP 协议解析相关的功能比如 端口配置 、 网页编码设置 、 HTTP响应 头设置 等等可选HTTP模块主要用于扩展标准的 HTTP 功能让 Nginx 能处理一些特殊的服务比如 Flash多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等邮件服务模块主要用于支持 Nginx 的 邮件服务 包括对 POP3 协议、 IMAP 协议和 SMTP协议的 支持Stream服务模块: 实现反向代理功能,包括TCP协议代理第三方模块是为了扩展 Nginx 服务器应用完成开发者自定义功能比如 Json 支持、 Lua 支 持等 nginx高度模块化但其模块早期不支持DSO机制;1.9.11 版本支持动态装载和卸载 模块分类 核心模块core module 标准模块 HTTP 模块 ngx_http_* HTTP Core modules #默认功能 HTTP Optional modules #需编译时指定 Mail 模块: ngx_mail_* Stream 模块 ngx_stream_* 第三方模块 1.4 Nginx安装 1.4.1Nginx版本和安装方式 Nginx版本 Mainline version 主要开发版本,一般为奇数版本号,比如1.19Stable version 当前最新稳定版,一般为偶数版本,如:1.20Legacy versions 旧的稳定版,一般为偶数版本,如:1.18 Nginx安装可以使用yum或源码安装但是推荐使用源码编译安装 yum的版本比较旧编译安装可以更方便自定义相关路径使用源码编译可以自定义相关功能更方便业务的上的使用 1.4.2Nginx 编译安装 编译器介绍 源码安装需要提前准备标准的编译器GCC的全称是GNU Compiler collection其有GNU开发并以 GPL即LGPL许可是自由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器因为GCC原本只能处理C语 言所以原名为GNU C语言编译器后来得到快速发展可以处理C,Fortranpascalobjective C java以及Ada等其他语言此外还需要Automake工具以完成自动创建Makefile的工作Nginx的一些模块 需要依赖第三方库比如: pcre支持rewritezlib支持gzip模块和openssl支持ssl模块 等。 1.4.2.1 编译安装Nginx 官方源码包下载地址 nginx: download 编译安装 [rootNginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y [rootNginx nginx]# tar zxf nginx-1.24.0.tar.gz [rootNginx nginx-1.24.0]# useradd -s /sbin/nologin -M nginx [rootNginx nginx]# cd nginx-1.24.0/ [rootNginx nginx-1.24.0]# ./configure --prefix/usr/local/nginx –usernginx # 指定nginx运行用户 –groupnginx # 指定nginx运行组 –with-http_ssl_module # 支持https:// –with-http_v2_module # 支持http版本2 –with-http_realip_module # 支持ip透传 –with-http_stub_status_module # 支持状态页面 –with-http_gzip_static_module # 支持压缩 –with-pcre # 支持正则 –with-stream # 支持tcp反向代理 –with-stream_ssl_module # 支持tcp的ssl加密 –with-stream_realip_module# 支持tcp的透传ip [rootNginx nginx-1.24.0]# make make install nginx完成安装以后有四个主要的目录 [rootNginx nginx-1.24.0]# ls /usr/local/nginx/ conf html logs sbin conf保存nginx所有的配置文件其中nginx.conf是nginx服务器的最核心最主要的配置文件其他 的.conf则是用来配置nginx相关的功能的例如fastcgi功能使用的是fastcgi.conf和fastcgi_params 两个文件配置文件一般都有一个样板配置文件是以.default为后缀使用时可将其复制并将default后缀 去掉即可。 html目录中保存了nginx服务器的web文件但是可以更改为其他目录保存web文件,另外还有一个50x的web 文件是默认的错误页面提示页面。 logs用来保存nginx服务器的访问日志错误日志等日志logs目录可以放在其他路径比 如/var/logs/nginx里面。 sbin保存nginx二进制启动脚本可以接受不同的参数以实现不同的功能。 1.4.2.2验证版本及编译参数 [rootNginx ~]# vim ~/.bash_profile export PATH$PATH:/usr/local/nginx/sbin [rootNginx ~]# source ~/.bash_profile [rootNginx ~]# nginx -V nginx version: nginx/1.24.0 1.5 平滑升级和回滚 平滑升级和回滚[这里是图片008]https://blog.csdn.net/weixin_63657273/article/details/141230657?spm1001.2014.3001.5501 二、Nginx核心配置详解 Nginx核心配置详解[这里是图片009]https://blog.csdn.net/weixin_63657273/article/details/141271637?spm1001.2014.3001.5501 三、Nginx 高级配置 Nginx高级配置[这里是图片010]https://blog.csdn.net/weixin_63657273/article/details/141298973?spm1001.2014.3001.5501 四、Nginx Rewrite 相关功能 Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求此功能依靠 PCRE(perl compatible regular expression)因此编译之前要安装PCRE库rewrite是nginx服务器的重要功能之一用于实现URL的重写URL的重写是非常有用的功能比如它可以在我们改变网站结构之后不需要客户端修改原来的书签也无需其他网站修改我们的 链接就可以设置为访问另外还可以在一定程度上提高网站的安全性 4.1ngx_http_rewrite_module 模块指令 官方文档Module ngx_http_rewrite_module 4.1.1 if 指令 用于条件匹配判断并根据条件判断结果选择不同的Nginx配置可以配置在server或location块中进行 配置Nginx的if语法仅能使用if做单次判断不支持使用if else或者if elif这样的多重判断用法如下 if 条件匹配 { action } 使用正则表达式对变量进行匹配匹配成功时if指令认为条件为true否则认为false变量与表达式之间 使用以下符号链接 #比较变量和字符串是否相等相等时if指令认为该条件为true反之为false ! #比较变量和字符串是否不相等不相等时if指令认为条件为true反之为false ~ #区分大小写字符可以通过正则表达式匹配满足匹配条件为真不满足匹配条件为假 !~ #区分大小写字符,判断是否匹配不满足匹配条件为真满足匹配条件为假 ~* #不区分大小写字符可以通过正则表达式匹配满足匹配条件为真不满足匹配条件为假 !~* #不区分大小字符,判断是否匹配满足匹配条件为假不满足匹配条件为真 -f 和 !-f #判断请求的文件是否存在和是否不存在 -d 和 !-d #判断请求的目录是否存在和是否不存在 -x 和 !-x #判断文件是否可执行和是否不可执行 -e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件目录软链接) #注意 #如果$变量的值为空字符串或0则if指令认为该条件为false其他条件为true。 #nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false4.1.2 set 指令 指定key并给其定义一个变量变量可以调用Nginx内置变量赋值给key另外set定义格式为set $key valuevalue可以是text, variables和两者的组合。 4.1.3 break 指令 用于中断当前相同作用域(location)中的其他Nginx配置与该指令处于同一作用域的Nginx配置中位于它前面的配置生效 位于后面的 ngx_http_rewrite_module 模块中指令就不再执行Nginx服务器在根据配置处理请求的过程中遇到该指令的时候回到上一层作用域继续向下读取配置该指令可以在server块和locationif块中使用。 注意如果break指令在location块中后续指令还会继续执行,只是不执行 ngx_http_rewrite_module 模块的指令,其它指令还会执行。 4.1.4 return 指令 return用于完成对请求的处理并直接向客户端返回响应状态码比如:可以指定重定向URL(对于特殊重 定向状态码301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等)处于此指令后的所有配 置都将不被执行return可以在server、if 和 location块进行配置。 语法格式 return code; #返回给客户端指定的HTTP状态码 return code [text];#返回给客户端的状态码及响应报文的实体内容 #可以调用变量,其中text如果有空格,需要用单或双引号 return code URL; #返回给客户端的URL地址 4.2rewrite 指令 通过正则表达式的匹配来改变URI可以同时存在一个或多个指令按照顺序依次对URI进行匹配 rewrite主要是针对用户请求的URL或者是URI做具体处理。 语法格式 rewrite regex replacement [flag]; rewrite将用户请求的URI基于regex所描述的模式进行检查匹配到时将其替换为表达式指定的新的URI。 注意如果在同一级配置块中存在多个rewrite规则那么会自下而下逐个检查;被某条件规则替换完成 后会重新一轮的替换检查隐含有循环机制,但不超过10次;如果超过提示500响应码[flag]所表示的 标志位用于控制此循环机制。 如果替换后的URL是以http://或https://开头则替换结果会直接以重定向返回给客户端, 即永久重定向 301。 正则表达式格式 . #匹配除换行符以外的任意字符 w #匹配字母或数字或下划线或汉字 s #匹配任意的空白符 d #匹配数字#匹配单词的开始或结束 ^ #匹配字付串的开始 $ #匹配字符串的结束 * #匹配重复零次或更多次#匹配重复一次或更多次 ? #匹配重复零次或一次 (n) #匹配重复n次 {n,} #匹配重复n次或更多次 {n,m} #匹配重复n到m次 *? #匹配重复任意次但尽可能少重复 ? #匹配重复1次或更多次但尽可能少重复 ?? #匹配重复0次或1次但尽可能少重复 {n,m}? #匹配重复n到m次但尽可能少重复 {n,}? #匹配重复n次以上但尽可能少重复 W ? #匹配任意不是字母数字下划线汉字的字符 S #匹配任意不是空白符的字符 D #匹配任意非数字的字符 B #匹配不是单词开头或结束的位置 [^x] #匹配除了x以外的任意字符 [^lee] #匹配除了magedu 这几个字母以外的任意字符4.2.1rewrite flag 使用介绍 利用nginx的rewrite的指令可以实现url的重新跳转rewrite有四种不同的flag分别是redirect(临时 重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型的flag后两种是代理型。 跳转型指由客户端浏览器重新对新地址进行请求代理型是在WEB服务器内部实现跳转 rewrite 格式 Syntax: rewrite regex replacement [flag]; #通过正则表达式处理用户请求并返回替换后的数据 包。 Default: — Context: server, location, if flag 说明 redirect; #临时重定向重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端 #由客户端重新发起请求;使用相对路径,或者http://或https://开头状态码302 permanent; #重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端 #由客户端重新发起请求状态码301 break; #重写完成后,停止对当前URL在当前location中后续的其它重写操作 #而后直接跳转至重写规则配置块之后的其它配置结束循环建议在location中使用 #适用于一个URL一次重写 last; #重写完成后,停止对当前URI在当前location中后续的其它重写操作 #而后对新的URL启动新一轮重写检查不建议在location中使用 #适用于一个URL多次重写要注意避免出现超过十次以及URL重写后返回错误的给用户 4.2.2rewrite案例: 域名永久与临时重定向 名的临时的调整后期可能会变之前的域名或者URL可能还用、或者跳转的目的域名和URL还会跳 转这种情况浏览器不会缓存跳转,临时重定向不会缓存域名解析记录(A记录)但是永久重定向会缓存。 示例: 因业务需要将访问源域名 www.qisheng.org 的请求永久重定向到 www.qisheng.com location / {? root /data/nginx/html/pc;? index index.html;? rewrite / http://www.qisheng.com permanent;? #rewrite / http://www.qisheng.com redirect;}#重启Nginx并访问域名 http://www.qisheng.org 进行测试4.2.2.1永久重定向301 域名永久型调整即域名永远跳转至另外一个新的域名之前的域名再也不使用跳转记录可以缓存到 客户端浏览器。 永久重定向会缓存DNS解析记录, 浏览器中有 from disk cache 信息,即使nginx服务器无法访问,浏览器也 会利用缓存进行重定向。 比如: 京东早期的域名 www.360buy.com 由于与360公司类似于是后期永久重定向到了 www.jd.com。 示例 [rootNginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf server {listen 80;server_name ou.qisheng.org;root /webdata/nginx/qisheng.org/ou/html;location / {? #rewrite / http://ou.qisheng.com redirect;? rewrite / http://lee.qisheng.com permanent;} } server {listen 80;server_name ou.qisheng.com;root /webdata/nginx/qisheng.com/ou/html; } 4.2.2.2临时重定向302 域名临时重定向告诉浏览器域名不是固定重定向到当前目标域名后期可能随时会更改因此浏览器 不会缓存当前域名的解析记录而浏览器会缓存永久重定向的DNS解析记录这也是临时重定向与永久 重定向最大的本质区别。 即当nginx服务器无法访问时,浏览器不能利用缓存,而导致重定向失败。 示例 [rootNginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf server {listen 80;server_name ou.qisheng.org;root /webdata/nginx/qisheng.org/ou/html;location / {? rewrite / http://ou.qisheng.com redirect;? #rewrite / http://ou.qisheng.com permanent;} } server {listen 80;server_name ou.qisheng.com;root /webdata/nginx/qisheng.com/ou/html; }4.2.3rewrite 案例: break 与 last 测试 访问break请求被rewrite至test1而访问test1转递请求再次被rewrite发送至test2此测试last和break 分别有什么区别。 4.2.3.1break和last区别案例 [rootNginx ~]# mkdir /webdata/nginx/qisheng.org/ou/html/{test1,test2,break} [rootNginx ~]# echo test1 /webdata/nginx/qisheng.org/ou/html/test1/index.html [rootNginx ~]# echo test2 /webdata/nginx/qisheng.org/ou/html/test2/index.html [rootNginx ~]# echo break /webdata/nginx/qisheng.org/ou/html/break/index.html [rootcentos8 ~]#cat /usr/local/nginx/conf.d/vhosts.conf server {listen 80;server_name ou.qisheng.org;root /webdata/nginx/qisheng.org/ou/html;location /break {? root /webdata/nginx/qisheng.org/ou/html;? rewrite ^/break/(.*) /test1/$1 last;? rewrite ^/test1/(.*) /test2/$1 break;}location /last {? root /webdata/nginx/qisheng.org/ou/html;? rewrite ^/last/(.*) /test1/$1 last;? rewrite ^/test1/(.*) /test2/$1 last;}location /test1 {? ? default_type text/html;? ? return 666 new test1;}location /test2 {? root /webdata/nginx/qisheng.org/ou/html;} } [rootclient ~]# curl -L ou.qisheng.org/break/index.html test1 [rootclient ~]# curl -L ou.qisheng.org/last/index.html new test1[rootclient ~]#4.2.4rewrite案例: 自动跳转 https 案例基于通信安全考虑公司网站要求全站 https因此要求将在不影响用户请求的情况下将http请求全 部自动跳转至 https另外也可以实现部分 location 跳转。 1、创建认证目录 mkdir -p /usr/local/nginx/certs 2、生成证书 openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/qisheng.org.key -x509 -days 365 -out /usr/local/nginx/certs/qisheng.org.crt 3、编辑配置文件 vim /usr/local/nginx/conf.d/vhosts.conf [rootcentos8 ~]#vim /usr/local/nginx/conf.d/vhosts.conf server {listen 443 ssl;listen 80;ssl_certificate /usr/local/nginx/certs/qisheng.org.crt;ssl_certificate_key /usr/local/nginx/certs/qisheng.org.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name ou.qisheng.org;location / { ? ?#针对全站跳转? root /data/nginx/html;? index index.html;? ?if ($scheme http ){ ? #如果没有加条件判断会导致死循环? rewrite / https://$host redirect;? } ?}location /login { ? ? #针对特定的URL进行跳转https if ($scheme http ){ ? #如果没有加条件判断会导致死循环? rewrite / https://$host/login redirect;? } } } #重启Nginx并访问测试 [rootcentos7 ~]#curl -ikL www.timinglee.org4、测试结果 4.2.5rewrite 案例: 判断文件是否存在 案例当用户访问到公司网站的时输入了一个错误的URL可以将用户重定向至官网首页 1、编辑配置文件 vim /usr/local/nginx/conf.d/vhosts.conf 2、重启nginx并测试 nginx -s reload 4.3 nginx 防盗链 防盗链基于客户端携带的referer实现referer是记录打开一个页面之前记录是从哪个页面跳转过来的标 记信息如果别人只链接了自己网站图片或某个单独的资源而不是打开了网站的整个页面这就是盗 链referer就是之前的那个网站域名正常的referer信息有以下几种 1none 请求报文首部没有referer首部 比如用户直接在浏览器输入域名访问web网站就没有referer信息。 2blocked 请求报文有referer首部但无有效值比如为空。 3server_names referer首部中包含本主机名及即nginx 监听的server_name。 4arbitrary_string 自定义指定字符串但可使用*作通配符。 5regular expression 被指定的正则表达式模式匹配到的字符串,要使用~开头。 4.3.1实现盗链 在一个web 站点盗链另一个站点的资源信息比如:图片、视频等 新建一个主机172.25.254.20,盗取另一台主机ou.qisheng.org/images/logo.png的图片 1、安装httpd yum install httpd -y 2、准备盗链web页面 vim /var/www/html/index.html htmlhead? meta http-equivContent-Type contenttext/html;charsetutf-8? title盗链/title /headbody? img srchttp://ou.qisheng.org/images/logo.png ? h1 stylecolor:red欢迎大家/h1? pa hrefhttp://ou.qisheng.org点击/a有惊喜!!!/p/body /html3、重启apche服务并访问测试 重启apache并访问http://172.25.254.20 测试验证两个域名的日志是否会在被盗连的web站点的日志中出现以下盗链日志信息。 ootNginx ~]# cat /usr/local/nginx/logs/access.log 4.3.2 实现防盗链 基于访问安全考虑nginx支持通过ngx_http_referer_module模块,检查访问请求的referer信息是否有效 实现防盗链功能。 官方文档:Module ngx_http_referer_module 1、定义防盗链 [rootNginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf server {listen 80;server_name ou.qisheng.org;root /webdata/nginx/qisheng.org/ou/html;location /images {? valid_referers none blocked server_names *.qisheng.org ~.baidu.;? if ($invalid_referer){? ? #return 403;? ? rewrite ^/ http://ou.qisheng.org/daolian.png permanent;? }} }2、重启nginx并访问测试 五、nginx反向代理功能 Nginx反向代理功能 实现Nginx四层负载均衡 六、实现FastCGI CGI的由来 最早的Web服务器只能简单地响应浏览器发来的HTTP请求并将存储在服务器上的HTML文件返回给浏 览器也就是静态html文件但是后期随着网站功能增多网站开发也越来越复杂以至于出现动态技 术比如像php(1995年)、java(1995)、python(1991)语言开发的网站但是nginx/apache服务器并不 能直接运行 php、java这样的文件apache实现的方式是打补丁但是nginx缺通过与第三方基于协议实 现即通过某种特定协议将客户端请求转发给第三方服务处理第三方服务器会新建新的进程处理用户 的请求处理完成后返回数据给Nginx并回收进程最后nginx在返回给客户端那这个约定就是通用网 关接口(common gateway interface简称CGI)CGI协议 是web服务器和外部应用程序之间的接口 标准是cgi程序和web服务器之间传递信息的标准化接口。 为什么会有FastCGI CGI协议虽然解决了语言解析器和 Web Server 之间通讯的问题但是它的效率很低因为 Web Server 每收到一个请求都会创建一个CGI进程PHP解析器都会解析php.ini文件初始化环境请求结束的时候 再关闭进程对于每一个创建的CGI进程都会执行这些操作所以效率很低而FastCGI是用来提高CGI性 能的FastCGI每次处理完请求之后不会关闭掉进程而是保留这个进程使这个进程可以处理多个请 求。这样的话每个请求都不用再重新创建一个进程了大大提升了处理效率。 什么是PHP-FPM PHP-FPM(FastCGI Process Manager FastCGI进程管理器)是一个实现了Fastcgi的程序并且提供进程管理的功能。进程包括master进程和worker进程。master进程只有一个负责监听端口接受来自web server 的请求。worker进程一般会有多个每个进程中会嵌入一个PHP解析器进行PHP代码的处理。 6.1FastCGI配置指令 Nginx基于模块ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm处 理其配置指令如下 fastcgi_pass address:port; #转发请求到后端服务器address为后端的fastcgi server的地址可用位置location, if in location fastcgi_index name; #fastcgi默认的主页资源示例fastcgi_index index.php; fastcgi_param parameter value [if_not_empty]; #设置传递给FastCGI服务器的参数值可以是文本变量或组合可用于将Nginx的内置变量赋值给自定义 key fastcgi_param REMOTE_ADDR ? ? ? ?$remote_addr; #客户端源IP fastcgi_param REMOTE_PORT ? ? ? ?$remote_port; #客户端源端口 fastcgi_param SERVER_ADDR ? ? ? ?$server_addr; #请求的服务器IP地址 fastcgi_param SERVER_PORT ? ? ? ?$server_port; #请求的服务器端口 fastcgi_param SERVER_NAME ? ? ? ?$server_name; #请求的server name Nginx默认配置示例? location ~ .php$ {? ? root ? ? ? ? ? /scripts;? ? fastcgi_pass ? 127.0.0.1:9000;? ? fastcgi_index index.php;? ? fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #默认脚本路径? ? #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;? ? include ? ? ? fastcgi_params; ? ?#此文件默认系统已提供,存放的相对路径为 prefix/conf? }6.2FastCGI实战案例 : Nginx与php-fpm在同一服务器 编译安装更方便自定义参数或选项所以推荐大家使用源码编译 官方网站PHP: Hypertext Preprocessor 源码编译php 1、安装php依赖 [rootNginx ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel 2、解压源码并安装 [rootNginx ~]# ./configure –prefix/usr/local/php #安装路径 –with-config-file-path/usr/local/php/etc #指定配置路径 –enable-fpm #用cgi方式启动程序 –with-fpm-usernginx #指定运行用户身份 –with-fpm-groupnginx –with-curl #打开curl浏览器支持 –with-iconv #启用iconv函数转换字符编码 –with-mhash #mhash加密方式扩展库 –with-zlib #支持zlib库用于压缩http压缩传输 –with-openssl #支持ssl加密 –enable-mysqlnd #mysql数据库 –with-mysqli –with-pdo-mysql –disable-debug #关闭debug功能 –enable-sockets #支持套接字访问 –enable-soap #支持soap扩展协议 –enable-xml #支持xml –enable-ftp #支持ftp –enable-gd #支持gd库 –enable-exif #支持图片元数据 –enable-mbstring #支持多字节字符串 –enable-bcmath #打开图片大小调整,用到zabbix监控的时候用到了这个模块 –with-fpm-systemd #支持systemctl 管理cgi php相关配置优化 [rootNginx ~]# cd /usr/local/php/etc [rootNginx etc]# cp php-fpm.conf.default php-fpm.conf [rootNginx etc]# vim php-fpm.conf 去掉注释 pid run/php-fpm.pid #指定pid文件存放位置 [rootNginx etc]# cd php-fpm.d/ [rootNginx php-fpm.d]# cp www.conf.default www.conf #生成主配置文件 [rootNginx php-fpm.d]# cd /root/php-8.3.9 [rootNginx php-8.3.9]# cp php.ini-production /usr/local/php/etc/php.ini [rootNginx ~]# vim /usr/local/php/etc/php.ini [Date] ; Defines the default timezone used by the date functions ; https://php.net/date.timezone date.timezone Asia/Shanghai #修改时区#生成启动文件 [rootNginx ~]# cd /root/php-8.3.9/ [rootNginx php-8.3.9]# cp sapi/fpm/php-fpm.service /lib/systemd/system/ # Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit. #ProtectSystemfull #注释该内容[rootNginx php-8.3.9]# systemctl start php-fpm.service [rootNginx php-8.3.9]# netstat -antlupe | grep php 准备php测试页面 [rootNginx ~]# mkdir /data/php -p [rootcentos8 ~]# cat /data/php/index.php #php测试页面 ?php phpinfo(); ?Nginx配置转发 Nginx安装完成之后默认生成了与fastcgi的相关配置文件一般保存在nginx的安装路径的conf目录当 中比如/apps/nginx/conf/fastcgi.conf、/apps/nginx/conf/fastcgi_params。 [rootNginx ~]# vim /usr/local/nginx/conf.d/php.conf server {listen 80;server_name php.timinglee.org;root /data/php;location ~ .php$ {? fastcgi_pass 127.0.0.1:9000;? fastcgi_index index.php;? include fastcgi.conf;} }重启nginx并访问web测试 [rootNginx ~]# nginx -s reload 添加php环境变量 [rootNginx ~]# vim .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then. ~/.bashrc fi # User specific environment and startup programs PATH$PATH:$HOME/bin:/apps/nginx/sbin:/usr/local/php/bin export PATH[rootNginx ~]# source .bash_profile 6.3php的动态扩展模块php的缓存模块 软件下载PECL :: Package :: memcache 安装memcache模块 [rootNginx ~]# tar zxf memcache-8.2.tgz [rootNginx ~]# cd memcache-8.2/ [rootNginx memcache-8.2]# yum install autoconf [rootNginx memcache-8.2]# phpize [rootNginx memcache-8.2]# ./configure make make instal 复制测试文件到nginx发布目录中 [rootNginx ~]# cd memcache-8.2/ [rootNginx memcache-8.2]# cp example.php memcache.php /data/php/ [rootNginx ~]# vim /data/php/memcache.php define(ADMIN_USERNAME,admin); ? // Admin Username define(ADMIN_PASSWORD,123456); ? // Admin Password define(DATE_FORMAT,Y/m/d H:i:s); define(GRAPH_SIZE,200); define(MAX_ITEM_DUMP,50); $MEMCACHE_SERVERS[] localhost:11211; // add more as an array #$MEMCACHE_SERVERS[] mymemcache-server2:11211; // add more as an array配置php加载memcache模块 [rootNginx ~]# vim /usr/local/php/etc/php.ini ;extensionzip extensionmemcache ;zend_extensionopcache [rootNginx ~]# systemctl reload php-fpm [rootNginx no-debug-non-zts-20230831]# php -m | grep mem memcache部署memcached [rootNginx ~]# yum install memcached -y [rootNginx ~]# systemctl enable --now memcached.service [rootNginx ~]# cat /etc/sysconfig/memcached PORT“11211” USER“memcached” MAXCONN“1024” CACHESIZE“64” OPTIONS“-l 127.0.0.1,::1” 测试 访问 http://ou.qisheng.org/example.php 不断刷新 访问 http://ou.qisheng.org/memcache.php 查看命中效果 性能对比 压测 ab -n500 -c10 http://ou.qisheng.org/example.php ab -n500 -c10 http://ou.qisheng.org/index.php 6.4 php高速缓存 部署方法在我们安装的nginx中默认不支持memc和srcache功能需要借助第三方模块来让nginx支持此功能所 以nginx需要重新编译。 [rootNginx ~]# cd nginx-1.26.2/ [rootNginx nginx-1.26.2]# ./configure --prefix/apps/nginx --usernginx – groupnginx --with-http_ssl_module --with-http_v2_module --withhttp_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module – add-module/root/memc-nginx-module-0.20 --add-module/root/srcache-nginx-module0.33 [rootNginx nginx-1.26.2]# make make install [rootNginx ~]# vim /usr/local/nginx/conf.d/php.conf upstream memcache {? server 127.0.0.1:11211;? keepalive 512; } server {listen 80;server_name ou.qisheng.org;root /data/php;location /memc {? internal;? memc_connect_timeout 100ms;? memc_send_timeout 100ms;? memc_read_timeout 100ms;? set $memc_key $query_string; #使用内置变量$query_string来作为key? set $memc_exptime 300; #缓存失效时间300秒? memc_pass memcache;}location ~ .php$ {set $key $uri$args; #设定key的值? srcache_fetch GET /memc $key; #检测mem中是否有要访问的php? srcache_store PUT /memc $key; #缓存为加载的php数据? fastcgi_pass 127.0.0.1:9000;? fastcgi_index index.php;? include fastcgi.conf;} }[rootNginx ~]# systemctl start nginx.service 测试结果 七、nginx 二次开发版本 7.1openresty Nginx 是俄罗斯人发明的 Lua 是巴西几个教授发明的中国人章亦春把 LuaJIT VM 嵌入到 Nginx 中 实现了 OpenResty 这个高性能服务端解决方案。 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台其内部集成了大量精良的 Lua 库、第三方 模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服 务和动态网关。 OpenResty 通过汇聚各种设计精良的 Nginx 模块主要由 OpenResty 团队自主开发从而将Nginx 有效地变成一个强大的通用 Web 应用平台。这样Web 开发人员和系统工程师可以使用 Lua 脚本语言 调动 Nginx 支持的各种 C 以及 Lua 模块快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高 性能 Web 应用系统。 OpenResty 由于有功能强大且方便的的API,可扩展性更强,如果需要实现定制功能,OpenResty是个不错的 选择。 官网:OpenResty? - 开源官方站 7.2 编译安装 openresty [rootNginx ~]#dnf -yq install gcc pcre-devel openssl-devel perl [rootNginx ~]#useradd -r -s /sbin/nologin nginx [rootNginx ~]#cd /usr/local/src [rootNginx src]#wget https://openresty.org/download/openresty-1.17.8.2.tar.gz [rootNginx src]#tar xf openresty-1.17.8.2.tar.gz [rootNginx src]#cd openresty-1.17.8.2/ [rootNginx openresty-1.17.8.2]#./configure –prefix/apps/openresty –usernginx --groupnginx –with-http_ssl_module –with-http_v2_module –with_http_realip_module –with-http_stub_status_module –with-http_gzip_static_module --with-pcre --with-stream –with-stream_ssl_module –with-stream_realip_module [rootNginx openresty-1.17.8.2]#make make install [rootNginx openresty-1.17.8.2]#ln -s /apps/openresty/bin/* /usr/bin/ [rootNginx openresty-1.17.8.2]#openresty -v nginx version: openresty/1.17.8.2 [rootNginx openresty-1.17.8.2]#openresty [rootNginx openresty-1.17.8.2]#ps -ef |grep nginx [rootNginx ~]#curl 10.0.0.18
http://www.w-s-a.com/news/62974/

相关文章:

  • o2o网站建设教程计算机培训班培训费用
  • 赤峰网站制作php智能建站系统
  • 做高防鞋 哪个网站能上架net网站开发net网站开发
  • 做网站公司郑州推广计划步骤
  • 网站建设计无形资产外国做美食视频网站
  • 创立一个网站需要什么网推技巧
  • 网站的会员功能怎么做wordpress主题开拓右边栏
  • 做个一般的网站要多少钱nas 建网站
  • 网页设计作品源代码彼岸花坊网站seo测评
  • 用什么软件做动漫视频网站好环保网站设计价格
  • 合肥网站设计服投稿网站源码
  • 为什么很多网站用php做上海口碑最好的装修公司排名
  • 运城网站推广找人做小程序要多少钱
  • 做外链哪个网站好seo诊断网站
  • 网站建设与管理考查方案上海公司免费起名
  • 哪个网站做h5好做汽车网站
  • 汝州网站制作住房和城乡建设部官网进行查询
  • 怎么做整人点不完的网站获取网站访客qq号码源码
  • 自建网站软件网站如何减少404跳转
  • 我想学制作网站吗公司起名网站十大排名
  • 广州白云手机网站建设淘宝店铺怎么推广
  • 青海省住房与城乡建设厅网站珠海高端网站制作公司
  • 深圳个性化建网站公司简便网站建设
  • 网站安全狗十大免费ppt网站在线
  • 进网站后台显示空白图片模板 网站源码
  • dedecms 英文网站怎么在网站上做模式题库
  • 轻网站怎么建立国外做评论的网站
  • 拉米拉网站建设乐清网站网站建设
  • 获取网站全站代码申请免费域名的方法
  • 网站制作建设公司哪家好wordpress仪表盘打不开