当前位置: 首页 > Linux

Linux下玩转nginx系列(一)——nginx初识与入门

时间:2023-04-06 02:45:34 Linux

1.初识nginx及通用TCP/UDP代理服务器。它由俄罗斯程序员IgorSysoev开发,被俄罗斯大型门户网站和搜索引擎Rambler(俄语:Рамблер)使用。其特点是占用内存少,并发能力强。事实上,nginx的并发能力在同类型的web服务器中确实表现的更好。nginx以稳定、丰富的模块库、灵活的配置和低系统资源消耗着称。业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级替代品,不仅因为它对静态页面的响应非常快,而且它的模块数量是Apache的2/3。对proxy和rewrite模块的支持非常彻底,同时也支持mod_fcgi、ssl、vhosts,适用于mongrel集群的前端HTTP响应。与Apache一样,nginx采用模块化设计。nginx模块包括内置模块和第三方模块。内置模块包括主模块和事件模块。2、nginx可以提供的服务Web服务负载均衡(反向代理)web缓存(webcache)3、nginx的优点是并发度高,小的静态文件占用资源少。20000个并发,10个线程,几百M的内存消耗。函数种类很多。Web、缓存、代理。每个功能都没有特别支持epoll模型,这样nginx就可以支持高并发了。Nginx配合动态服务,Apache不同(FASTCGI接口)。利用nginx可以限制IP速度,限制连接数。配置简单,更灵活。四、nginx应用静态服务器(图片、视频服务),如html、js、css、flv、jpg、gif等动态服务,nginx-fastcgi模式运行PHP、JSP。(PHP并发500-1500左右,MySQL并发300-1500左右)反向代理,负载均衡。如果每日PV在2000W以下,可以直接使用nginx作为代理缓存服务。类似于SQUID、VARNISH5.nginx5.1的特点模块化设计,更好的扩展性所以作为程序员,可以为nginx设计第三方模块,但与httpd不同的是,nginx早期是模块化的,包括现在的版本。就是说我们可以开发第三方模块来扩展Nginx,但是nginx不支持动态加载和卸载模块,也就是说,只能静态直接编译成nginx,用nginx启动启动,也就是modules编译后可以直接使用,但是只能直接编译成nginx的一个组件。只要nginx启动,这个模块就一定会启动。它不支持动态加载和卸载。但是Tengine对nginx的改进使得Tengine可以支持模块的动态加载和卸载。5.2高可靠性已被市场广泛验证;它的高可靠性是通过其特殊的工作机制实现的,其高可靠性是通过主控进程和工作进程或工作线程的架构实现的。虽然说是特别,其实httpd也是这样工作的。nginx的组件其实是由一个主进程master和多个子进程worker组成的。它有一个主进程主控。主进程不负责接收和响应任何用户请求。master进程负责生成多个worker进程worker。它的主控进程主要负责读取和验证即解析配置文件、创建绑定或关闭socket、启动或终止维护工作进程数、在不重启进程的情况下在新配置文件中加载新配置。完成顺利的版本升级等工作。有许多类型的工作子进程。一些worker实现了缓存加载,这只在他们的反向代理模式下有用,而一些worker则负责响应用户请求。说白了就是接收传入和处理客户端连接请求。另外,worker进程中还有一个叫做CacheManager的进程来实现缓存管理。5.3低内存消耗由于Nginx使用一块内存来响应n个请求,所以它的内存消耗非常低。有人统计过,10000个处于keep-alive状态或模式的连接,Nginx只需要消耗2.5M内存来维护。5.4支持热部署所谓热部署就是说如果我们的配置文件更新了,新的配置文件就会生效,不需要重启nginx。连nginx的版本都更新了。如果你现在使用的是1.19版本,想升级到1.21,1.19版本不需要关闭,1.21版本会慢慢切入。1.21的切换完成后,1.19就可以再次下线了。所以支持热部署,所以这里的热部署指的是在不停机的情况下更新配置文件或者替换日志文件,也就是日志文件的滚动,包括程序版本的升级等都可以实现.这就是热部署的功能。5.5支持事件驱动机制,AIO(异步IO),mmap(内存映射机制)5.6可以通过gap(mod_secdownload)实现文件URL地址加密。六、nginx实战流程6.1安装依赖包小编使用的操作系统是CentOS7.6。nginx安装依赖于GCC、openssl-devel、pcre-devel、zlib-devel软件库。pcre全称(PerlCompatibleRegularExpressions),中文perl兼容正则表达式,pcre官方网站。1.yuminstallpcrepcre-devel-y2.yuminstallopensslopenssl-devel-ynginx官方源码下载地址:https://nginx.org/en/download...6.2开始编译使用./configure--帮助查看各个模块的使用情况,使用--without-http_ssi_module关闭不需要的模块。可以使用--with-http_perl_modules安装所需的模块。6.2.1编译命令1.tar-zxvfnginx-1.21.5.tar.gz2.cdnginx-1.21.5/3../configure--prefix=/usr/local/nginx-1.21.5--user=nginx--group=nginx--with-http_ssl_module--with-http_stub_status_module4.5.useraddnginx-M-s/sbin/nologin6.make&&makeinstall7.ln-s/usr/local/nginx-1.21。5/usr/local/nginx6.2.2测试nginx配置文件是否正常1./usr/local/nginx/sbin/nginx-t2.nginx:配置文件/usr/local/nginx-1.21.5/conf/nginx.conf语法ok3.nginx:配置文件/usr/local/nginx-1.21.5/conf/nginx.conf测试成功6.2.3启动nginxserver1./usr/local/nginx/sbin/nginx-t#查看配置文件2./usr/local/nginx/sbin/nginx#确认nginx服务3.netstat-lntup|grepnginx#查看进程是否正常4.curlhttp://localhost#确认结果6.2.4其他nginx命令1.nginx-ssignal2.signal:3.stop—快速关闭4.quit—优雅关闭5.reload—重新加载配置文件6.reopen—重新打开日志文件7.用于打开日志文件,让nginx将新的日志信息写入到这个新文件中/usr/local/nginx/sbin/nginx-V查看编译好的参数使用kill命令来操作nginx。格式:kill-signalPIDsignalnameTERM,INT快速关闭QUIT优雅关闭,保持吸收部分客户端连接HUP重启并应用新配置文件USR1重新打开日志文件USR2升级程序WINCH优雅关闭工作进程示例1.kill-QUITcat/usr/local/nginx/nginx.pid2.kill-HUPcat/usr/local/nginx/nginx.pid七、nginx基本配置文件配置基本配置文件1.worker_processes1;2.events{worker_connections1024;4.}5.http{includemime.types;default_typeapplication/octet-stream;sendfileon;keepalive_timeout65;server{listen80;server_namelocalhost;location/{roothtml;indexindex.htmlindex.htm;}error_page500502503504/50x.html;location=/50x.html{roothtml;}}22.}测试配置文件是否正常1.shell>/usr/local/nginx/sbin/nginx-t2.nginx:配置文件/usr/local/nginx-1.21.5/conf/nginx.conf语法ok3.nginx:配置文件/usr/local/nginx-1.21.5/conf/nginx.conf测试成功4.shell>curl-Ihttp://localhost5.HTTP/1.1200OK8.如何监控nginx开启nginx监控服务8.1打开状态页面1.#设置查看nginx状态地址2.location/status{stub_statuson;#表示打开stubStatusaccess_logoff的工作状态统计功能;#access_log关闭;关闭access_log日志记录功能。auth_basic“状态”;#auth_basic是nginx的一种认证机制。auth_basic_user_fileconf/htpasswd;#用于指定密码文件的位置。7.}8.2配置登录密码1.yuminstall-yhttpd-tools2./usr/local/apache/bin/htpasswd-c/usr/local/nginx/conf/htpasswdbiglittleant3.新密码:将在/中htpasswd文件生成在usr/local/nginx/conf/目录下。8.3访问URL1.curlhttp://127.0.0.1/status2.3.Activeconnections:204.serveracceptshandledrequests3636386.Reading:0Writing:2Waiting:0activeconnections–activeconnectionsserveracceptshandledrequests-total处理了16个连接,成功创建了16次握手,一共处理了18个请求。Reading——读取客户端连接数WritingResponsedatatotheclientWaiting数启用keep-alive时,该值等于active-(读+写),即Nginx已经处理完等待的常驻连接下一个请求命令8.4编写zabbix监控脚本1.nginx_status_fun(){NGINX_PORT=$1NGINX_COMMAND=$2nginx_active(){/usr/bin/curl"http://127.0.0.1:"$NGINX_PORT"/status/"2>/开发/空|grep'活动'|awk'{print$NF}'}nginx_reading(){/usr/bin/curl"http://127.0.0.1:"$NGINX_PORT"/status/"2>/dev/null|grep'阅读'|awk'{print$2}'}nginx_writing(){/usr/bin/curl"http://127.0.0.1:"$NGINX_PORT"/status/"2>/dev/null|grep'写作'|awk'{print$4}'}nginx_waiting(){/usr/bin/curl"http://127.0.0.1:"$NGINX_PORT"/status/"2>/dev/null|grep'等待'|awk'{print$6}'}nginx_accepts(){/usr/bin/curl"http://127.0.0.1:"$NGINX_PORT"/status/"2>/dev/null|awkNR==3|awk'{print$1}'}nginx_handled(){/usr/bin/curl"http://127.0.0.1:"$NGINX_PORT"/status/"2>/dev/null|awkNR==3|awk'{print$2}'}nginx_requests(){/usr/bin/curl"http://127.0.0.1:"$NGINX_PORT"/status/"2>/dev/null|awkNR==3|awk'{print$3}'}case$NGINX_COMMANDinactive)nginx_active;;;reading)nginx_reading;;;writing)nginx_writing;;;waiting)nginx_waiting;;;accepts)nginx_accepts;;;handled)nginx_handled;;;requests)nginx_requests;esac47.}nginx的功能很多,使用的时候需要注意的知识点也很多,小编将分nginx分成几篇下篇分享一些使用心得,一起学习使用nginx,一起进步。//www.cnblogs.com/biglittleant/p/8979063.html)nginx-官方文档nginx优化