详解nginx

Nginx是一个高性能的HTTP和反向代理服务器,以其轻量级、高并发处理能力著名。本文详细介绍了Nginx的特性、与Apache的区别、工作模式,以及如何搭建、配置和应用,包括正向代理、反向代理、日志切割等,适用于需要高性能Web服务的场景。
摘要由CSDN通过智能技术生成

nginx

官网
常用模块介绍
nginx代理

nginx是什么?

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

为什么用Nginx?

(1)跨平台、配置简单;
(2)非阻塞、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发;
(3)内存消耗小:开启10个nginx才占150M内存,Nginx采取了分阶段资源分配技术;
(4)nginx处理静态文件好,耗费内存少
(5)内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
(6)节省宽带:支持GZIP压缩,可以添加浏览器本地缓存;
(7)稳定性高:宕机的概率非常小
(8)master/worker结构:一个master进程,生成一个或者多个worker进程。
(9)接收用户请求是异步的:浏览器将请求发送到nginx服务器,它先将用户请求全部接收下来,再一次性发送给后端web服务器,极大减轻了web服务器的压力;
(10)一边接收web服务器的返回数据,一边发送给浏览器客户端;
(11)网络依赖性比较低,只要ping通就可以负载均衡;
(12)事件驱动:通信机制采用epoll模型。

nginx和Apache的区别?

两者最核心的区别在于apache是同步多进程模型,一个request对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。
一般来说,需要性能的web服务,用nginx,如果不需要性能只求稳定,更考虑Apache,后者的各种模块实现的比前者好很多,epoll网络IO模型是nginx处理性能高的根本,但并不是所有情况下epoll大获全胜的,如果本身提供静态服务的只有几个文件,apache的select模型或许比epoll更高性能。当然,这只是一个假设,真正还需要实测了再说。
更通用的方案是,前端nginx抗并发,后端apache集群,配合起来会更好。

工作模式

nginx有两种工作模式:master-worker模式和单进程模式。在master-worker模式下,有一个master进程和至少一个的worker进程,单进程模式顾名思义只有一个进程。这两种模式有各自的特点和适用场景。
在这里插入图片描述

master-worker

该模式下,nginx启动成功后,会有一个master进程和至少一个的worker进程。master进程负责处理系统信号,加载配置,管理worker进程(启动,杀死,监控,发送消息/信号等)。worker进程负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是worker进程。生产环境下一般使用这种模式,因为这种模式有以下优点:

  1. 稳定性高,只要还有worker进程存活,就能够提供服务,并且一个worker进程挂掉master进程会立即启动一个新的worker进程,保证worker进程数量不变,降低服务中断的概率。
  2. 配合linux的cpu亲和性配置,可以充分利用多核cpu的优势,提升性能
  3. 处理信号/配置重新加载/升级时可以做到尽可能少或者不中断服务
    在这里插入图片描述

单进程模式

单进程模式下,nginx启动后只有一个进程,nginx的所有工作都由这个进程负责。由于只有一个进程,因此可以很方便地利用gdb等工具进行调试。该模式不支持nginx的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。
在这里插入图片描述

搭建并部署

安装

nginx大部分常用模块,编译时./configure --help
以–without开头的都默认安装。
–prefix=PATH : 指定nginx的安装目录。默认 /usr/local/nginx
–conf-path=PATH : 设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行 中的-c选项。默认为prefix/conf/nginx.conf
–user=name: 设置nginx工作进程的用户。安装完成后,可以随时在nginx.conf配置文件更改user指令。 默认的用户名是nobody。–group=name类似
–with-pcre : 设置PCRE库的源码路径,如果已通过yum方式安装,使用–with-pcre自动找到库文件。使 用–with-pcre=PATH时,需要从PCRE网站下载pcre库的源码(版本4.4 - 8.30)并解压,剩下的就交给Nginx 的./configure和make来完成。perl正则表达式使用在location指令和 ngx_http_rewrite_module模块中。
–with-zlib=PATH : 指定 zlib(版本1.1.3 - 1.2.5)的源码解压目录。在默认就启用的网络传输压缩 模块ngx_http_gzip_module时需要使用zlib 。
–with-http_ssl_module : 使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与 openssl-devel已安装
–with-http_stub_status_module : 用来监控 Nginx 的当前状态
–with-http_realip_module : 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如XReal-IP 或 X-Forwarded-For),意义在于能够使得后台服务器记录原始客户端的IP地址
–add-module=PATH : 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模 块都要重新编译(Tengine可以在新加入module时无需重新编译)

#1.下载nginx
 
#2.tar zxf nginx-1.14.0.tar.gz
 
#3.cd nginx-1.14.0 ##讲解里面各目录的意义 
1)auto目录:里面有4个子目录,cc是编译使用的,os是判断操作系统类型的,其他都是辅助configure编译的, 也就是操作系统有什么特性供nginx使用
 
2)CHANGES:各版本的改变,bug修复等信息  CHANGES.ru:nginx作者是俄罗斯人,这是俄罗斯版本
 
3)conf: 为了方便运维配置,conf目录里有示例文件,安装好后会拷贝到安装目录
 
4)configure:
 
5)contrib:提供nginx语法检测字体   cp -r contrib/vim/* ~/.vim ##家目录下如果没有.vim目录,手动新建
 
6)html:默认发布目录,50x.html是报500错误时的页面
 
7) src:源码目录
 
8) 编译完成后会生成一个中间目录objs,里面有个ngx_modules.c,表示编译进nginx的模块,可以打开看一下
 
9) make完成后再看objs目录,又有新文件
 
#4.编译 
./configure --prefix=/usr/local/nginx  --with-file-aio
前面lnmp部分已经讲过

升级回退

##1:nginx平滑升级、回退 
#升级 
1)首先将之前的1.14版本的启动脚本备份
cd /usr/local/nginx/sbin 
cp nginx nginx.old
 
2)再编译新版本1.15 
'configure make结束不要make install,这会覆盖原来的nginx' 
cd /root/nginx-1.15.8/objs 
cp -f nginx /usr/local/nginx/sbin/nginx
 
3)向原来的nginx的master进程发送信号,不再接收新的请求,
新的nginx程序开启worker进程,并且开始接收请求 
kill -USR2 3607
##这个时候ps -ef看到两个master进程和其对应的worker进程 
kill -WINCH 3607 
##这个时候ps -ef看到老的worker进程结束,但master进程还在,不影响,是为了升级不成功时版本回退
 
4)执行/usr/local/nginx/sbin/nginx -v ##看到版本已经更新 
/usr/local/nginx/sbin/nginx -V ##还可以看到编译的模块
 
#回退 
1)先还原nginx脚本
 
cd /usr/local/nginx/sbin 
cp -f nginx.old nginx
 
2)重新唤起旧版本的master进程,让其接收请求
kill -HUP 3607 	#-HUP相当于reload
 
3)让新版本的master进程不接收请求,关闭worker进程
 
kill -USR2 6146 
kill -WINCH 6146
 
4)再查看nginx版本,回退到旧版本
 
/usr/local/nginx/sbin/nginx -v ##查看nginx版本 
/usr/local/nginx/sbin/nginx -V ##查看nginx版本及编译参数等
 
一次全部编译 ./configure --prefix=/usr/local/nginx  --with-http_realip_module --withhttp_image_filter_module=dynamic --with-http_ssl_module 
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 

日志切割


##2.nginx日志切割 
#因为nginx的access.log日志会保存所有客户端连接信息,普通网站每天请求量很大,所以要每天切割(可以用 nginx自带的reopen)
1)先查看nginx的access.log日志大小 
[root@server1 logs]# du -sh access.log 
20K access.log
 
2)多次请求页面,再查看日志大小 
[kiosk@foundation0 ~]$ ab -c 1 -n 100000
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值