1。简介Nginx(发音与“engineX”相同)是一个具有异步框架的网络服务器,也可以用作反向代理、负载均衡器和HTTP缓存。特点:与node类似,Nginx采用异步事件驱动的方式处理请求,适合处理io密集型场景。前端为什么要学习:测试环境需要自己部署?遇到网络问题,要有排查问题的能力,有独立解决问题的能力,性能优化上线,指导ops部署。2、推荐通过yum一键安装(centos)安装。通常,您需要知道两个地址。执行地址/usr/local/bin存放可以直接执行的二进制文件,用于启动或重启nginx(查询哪个nginx)配置地址一般为/usr/local/etc/nginx,不同的安装方式可能不同,但是在安装的时候会有信息显示(nginx-tquery)执行地址(start,restart)启动nginxcd/use/local/sbin./nginxrestartnginxcd/usr/sbinnginx-sreload或者直接/usr/sbin/nginx-sreloadorservicenginxrestart/stop/start配置地址nginx-tnginx:配置文件/etc/nginx/nginx.conf语法没问题在/etc/nginx中,我们可以看到有一个文件叫做nginx.conf,也就是基本配置文件,也可以说是一个大配置文件。里面有一句话:include/etc/nginx/conf.d/*.conf;这意味着nginx会读取conf.d中的.conf作为一个小的配置文件。对于不同的项目,我们可以在小配置文件中分别配置,这样结构更清晰,也更容易维护。对于编译参数,我们也可以使用nginx-V查看所有相关路径。这些不是固定的,我们可以在安装的时候指定这些参数来编译安装。您可以在线查看。3、访问日志资源会产生日志。日志分为两种,成功访问日志和失败日志access_.log访问日志error.log错误日志。我们在nginx.conf中可以看到accesslog和log的目录我们看一下/var/log/nginx/access中的格式,确实是按照设置的格式返回的[roo@centos]#cataccess.log[roo@centos]#111.206.87.56--[18/Aug/2021:17:42:47+0800]"GET/HTTP/1.1"2004833"-""Mozilla/5.0(Macintosh;IntelMacOSX10_15_7)AppleWebKit/537.36(KHTML,likeGecko)Chrome/92.0.4515.131Safari/537.36""-"tail-f/var/log/nginx/access.log//实时更新内置变量。上面的log_format里面有一些$xxx。这个东西是nginx的内置变量。更详细的可以在网上查看名称含义$remote_addr客户端地址$remote_user客户端用户名$time_local访问时间和时区$request请求URI和HTTP协议$http_host请求地址,即你在浏览器中输入的地址(IP或域名)$statusHTTP请求状态$body_bytes_sent发送给客户端的文件内容大小$http_user_agent用户代理4.初始配置下的静态页面解释/etc/nginx/nginx.conf#更多配置见:#*官方英文文档:http://nginx.org/en/docs/#*官方俄文文档:http://nginx.org/ru/docs/userroot;#设置nginx服务的系统使用userworker_processesauto;#工作进程数,一般与CPU数相同error_log/var/log/nginx/错误日志;#错误日志地址pid/run/nginx.pid;#错误日志地址#加载动态模块。参见/usr/share/doc/nginx/README.dynamic.include/usr/share/nginx/modules/*.conf;#模块化开发事件{worker_connections1024;#每个进程允许的最大连接数}http{log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';access_log/var/log/nginx/access.logmain;#主日志sendfileon;#没有用户内核tcp_nopushon;#存一波再发送#tcp_nodelayon;#不延迟keepalive_timeout65;#超时types_hash_max_size4096;gzip上;#判断是否开启gzip模块,on表示开启,off表示关闭;gzip_min_length1k;#设置页面允许压缩的最小字节(取自Content-Length),当返回内容大于此值时,将使用gzip进行压缩,以K为单位。当值为0时,所有页面将被压缩.建议大于1kgzip_buffers416k;#设置gzip申请内存的大小,其作用是根据块大小的倍数申请内存空间,param2:int(k)后面的单位为k。这里的单位是16k,以16k为单位申请4倍于原始数据大小的内存gzip_http_version1.1;#识别http协议的版本,早期的浏览器可能不支持gzip自解压,用户会看到乱码gzip_comp_level2;#设置gzip压缩级别,级别越低,压缩速度越快,文件压缩比越小,反之,文件压缩比越慢,文件压缩比越大;1-9级,最小压缩速度最快但消耗cpugzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;#设置需要压缩的MIME类型,非设置值不压缩,即匹配的压缩类型gzip_varyon;包括/etc/nginx/mime.types;#文件扩展名和类型映射表default_typeapplication/octet-stream;#从/etc/nginx/conf.d目录加载模块化配置文件。#有关详细信息,请参阅http://nginx.org/en/docs/ngx_core_module.html#include#。包括/etc/nginx/conf.d/*.conf;#子配置服务器{listen80;#portlisten[::]:80;#它用于IPv6配置server_name_;根/usr/share/nginx/html;#rootdirectory#加载默认服务器块的配置文件。包括/etc/nginx/default.d/*.conf;error_page404/404.html;地点=/404.html{}error_page500502503504/50x.html;location=/50x.html{}}#启用TLS的服务器的设置。##配置https的##server{#listen443sslhttp2;#listen[::]:443sslhttp2;#server_name_;#root/usr/share/nginx/html;##ssl_certificate"/etc/pki/nginx/server.crt";#ssl_certificate_key"/etc/pki/nginx/private/server.key";#ssl_session_cacheshared:SSL:1m;#ssl_session_timeout10m;#ssl_ciphersHIGH:!aNULL:!MD5;#ssl_prefer_server_cipherson;###加载默认服务器块的配置文件。#include/etc/nginx/default.d/*.conf;##error_page404/404.html;#location=/40x.html{#}##error_page500502503504/50x.html;#location=/50x.html{#}#}}5.具体应用5.1跨域(反向代理)location~/api{proxy_passhttp://l-test9.dev.cn2.corp.xxx.cn:8080}5.2性能优化缓存expireslocation~.*\.(jpg|png|gif)${expires24h;gzipon;}compressiongzipgzipopenflag,insidetheresponseheader:Content-Encoding:gzip1.3Anti-leechlocation~.*\.(jpg|png|gif)${expires1h;gzip关闭;gzip_http_version1.1;gzip_comp_level3;gzip_types图像/jpeg图像/png图像/gif;#noneNoreferblockedinformalHTTPrequestspecificIP+valid_referersnoneblocked47.104.184.134;+if($invalid_referer){#验证通过则为0,否则为1+return403;+}root/data/图片;}1.4负载均衡varhttp=require('http');varserver=http.createServer(function(request,response){response.end('server3000');});server.listen(3000,function(){console.log('HTTP服务器正在启动,端口:3000');});varserver=http.createServer(function(request,response){response.end('server4000');});server.listen(4000,function(){console.log('HTTP服务器正在启动,端口:4000');});varserver=http.createServer(funaction(request,response){response.end('server5000');});server.listen(5000,function(){console.log('HTTPserverisstarting,port:5000');});upstreamfyy{服务器127.0.0.1:3000权重=10;服务器127.0.0.1:4000;服务器127.0.0.1:5000;}服务器{位置/{proxy_passhttp://fyy;}负载均衡策略类型轮询(默认)每个请求按照时间顺序一一分配给不同的后端服务器。如果后台服务器宕机,可以自动排除权重指定的轮询概率(weightedpolling)。该权重与访问率成正比,用于后端服务器性能。在统一的情况下,ip_hash的每个request是根据访问ip的hash结果分配的,这样每个访问者固定访问一个后端服务器,可以解决sessionleast_conn的问题,以最少的机器为准连接,分发给谁访问url_hash(第三方)URL地址分配请求,每个URL指向同一个后端服务器(缓存)公平(第三方)根据后端的响应时间分配请求endserver,响应时间短的优先分配定义hashhashcustomkey1。5rewritePort:90039004可以实现url改写和重定向使用场景:url页面跳转,维护,转发,比如手机PC的重定向服务器{listen9003;#这是pc网页,但是如果useragent是手机,即使访问pc站也会重定向到手机位置/{if($http_user_agent~*'(Android|webOS|iPhone)'){rewrite^(.*)$http://localhost:9004中断;}root/Users/fengyangyang/Desktop/nginx/pc;indexindex.htmlindex.htm;}}服务器{听9004;#这是手机网页位置/{root/Users/fengyangyang/Desktop/nginx/mobile;indexindex.htmlindex.htm;}}6。传统的可视化配置编写Nginx配置学习和操作的成本比较高。可视化配置:根据你的交互,选择一些条件,动态生成nginx配置文件。比如我选择的基本配置。nignxConfig优点:比较全面,较少接触前端(高度封装),学习成本低缺点:过于全面,不够灵活7.自己实现的一个可视化工具7.1当前项目存在的问题测试环境1.有测试服务器项目太多,端口管理混轮:项目和端口映射混乱---->找不到对应端口(几十个项目谁能记住对应端口)项目和配置文件映射混乱---->找不到配置的地方(比如有些人为了省事,把A项目的配置直接写到B项目的配置里,其他人后期维护起来比较麻烦)2.完成比较麻烦服务器上的各种操作(创建和修改项目配置)对前端级别也有一定的要求7.2解决方案是nginx的在线编辑工具支持following功能:新建一个项目,输入项目名称和端口,在服务器上自动生成相关配置并完成nginx重启,支持在线修改服务器上的配置,修改后自动重启nginx,读取你服务器上的配置in实时,并生成项目名和端口的映射支持自动部署(不会自动创建对应目录)优点:统一维护管理,前端无需直接联系服务器,提高部署效率
