Nginx 介绍
Nginx(发音为“engine x”)是由伊戈尔·赛索耶夫开发的一个高性能的HTTP和反向代理服务器,支持反向代理,负载均衡,资源压缩,url重写,网站跳转等等功能。nginx以高效的epoll、kqueue、eventport作为网络IO模型,在高并发场景下,nginx能够轻松支持5W+的并发流量,并且消耗的服务器内存CPU资源很低,运行起来非常稳定。
要让Nginx支持高并发,如5万并发甚至百万级并发,需要进行一系列的配置优化和性能调优。以下是一些关键的优化步骤和考虑因素:
一、硬件与基础架构优化
1. 选择高性能硬件:使用多核CPU、大内存和高速存储的服务器硬件,确保Nginx能够充分利用硬件资源。
2. 负载均衡:使用负载均衡技术(如Nginx的负载均衡模块、HAProxy等)将请求分发到多个Nginx服务器上,实现水平扩展。
3. 网络连接:确保服务器拥有足够的网络带宽和低延迟的网络连接,以处理大量并发请求。
二、Nginx配置优化
1. worker进程数:根据CPU核心数调整worker_processes的值,通常设置为CPU核心数或核心数的两倍。
2. 事件驱动模型:使用epoll或kqueue等高效的事件驱动模型,以提高并发处理能力。
3. 连接数调整:增加worker_connections的值,以支持更多的并发连接。
4. 开启gzip压缩:通过gzip指令开启gzip压缩功能,减少传输的数据量,提高响应速度。
5. 调整缓存策略:合理配置缓存策略,如设置缓存期限、缓存大小等,以减少对后端服务器的请求压力。
6. 禁用不必要的模块:禁用不需要的Nginx模块,减少内存占用和CPU负载。
三、性能调优
1. TCP参数调优:调整TCP相关的参数,如tcp_nopush、tcp_nodelay、so_keepalive等,以优化网络传输性能。
2. 文件描述符限制:增加系统级别的文件描述符限制(ulimit -n),以支持更多的并发连接。
3. 内核参数调优:根据需要进行内核参数调优,如调整网络参数、IO调度策略等。
四、安全加固
1. 限制访问频率:使用Nginx的limit_req模块限制客户端的请求频率,防止DDoS攻击。
2. 限制并发连接数:使用limit_conn模块限制单个客户端的并发连接数。
3. HTTPS配置:启用HTTPS,配置SSL/TLS证书,确保数据传输的安全性。
五、监控与日志分析
1. 配置监控工具:使用如Nginx自带的ngx_http_stub_status模块、Prometheus、Grafana等工具进行性能监控和告警。
2. 日志分析:定期分析Nginx的访问日志和错误日志,找出性能瓶颈和潜在问题。
Nginx企业作用
1.提供静态页面展示,网页服务
2.提供多个网站、多个域名的网页服务
3.提供反向代理服务(结合动态应用程序)
4.提供简单资源下载服务(密码认证) ftp服务
5.用户行为分析(日志功能)
master进程
包工头进程,管理nginx的数据,创建worker工作进程。
1.启动时检查nginx.conf是否正确,语法错误;
2.根据配置文件的参数创建、且监控worker进程的数量和状态;
3.监听socket,接收client发起的请求,然后worker竞争抢夺链接,获胜的可以处理且响应请求。
4.接收运维发送的管理nginx进程的信号,并且将信号通知到worker进程。
5.如果运维发送了reload命令,则读取新配置文件,创建新的worker进程,结束旧的worker进程。
worker进程
1.实际处理client网络请求的是worker
2.master根据nginx.conf决定worker的数量
3.有client用户请求到达时,worker之间进程竞争,获胜者和client建立连接且处理用户请求;
4.接收用户请求后,若需要代理转发给后端,则后端处理完毕后接收处理结果,再响应给用户
5.接收并处理master发来的进程信号,如启动、重启、重载、停止。
Nginx 安装
- 源代码编译安装,优点
- 版本,可以获取官网最新的软件包,甚至最新测试版,都可以直接编译安装
- 还有稳定版本
- 自由定义,安装路径自由定义,
- 自由定义第三方插件
- 缺点,安装步骤繁琐,耗时太长,看你要装多少个模块,编译添加的模块多,安装的就更久
- rpm安装
- 得提前准备好nginx本身的rpm包,以及相关依赖的rpm包
- 用于离线安装nginx的环境
- yum安装,你会用哪些形式的仓库?
- 阿里云第三方仓库(centos-base.repo,epel.repo)
- 这个其实都不靠谱。
- 自建yum仓库(得提前准备好nginx本身的rpm包,以及相关依赖的rpm包)
- nginx官网仓库(获取官网最新稳定版的yum源仓库)
- yum一键安装,省心省事,版本也是有一定的保障的,rpm的安全性也是有保障的
- 阿里云第三方仓库(centos-base.repo,epel.repo)
官网yum仓库
源代码编译
离线的rpm安装(yum 自建仓库)
编译安装
在CentOS上编译安装Nginx,你可以按照以下步骤进行:
- 首先,确保你的系统已经安装了所有必要的依赖项。你可以使用以下命令来安装GCC编译器、PCRE库、zlib库和OpenSSL库:
sudo yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
- 接下来,下载Nginx的源代码包。
wget http://nginx.org/download/nginx-x.x.x.tar.gz
请将x.x.x
替换为你下载的Nginx版本号。
3. 解压下载的源代码压缩包:
tar -zxvf nginx-x.x.x.tar.gz
同样,将x.x.x
替换为你下载的Nginx版本号。
4. 进入解压后的Nginx源代码目录:
cd nginx-x.x.x
- 配置编译选项。你可以使用
./configure
命令来配置Nginx的编译选项。例如,如果你想指定Nginx的安装目录为/usr/local/nginx
,并且以nginx
用户和用户组的身份运行,你可以使用以下命令:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
这将配置Nginx以使用/usr/local/nginx
作为安装目录,并以nginx
用户和用户组的身份运行。这有助于提高系统的安全性和管理性。
6. 编译并安装Nginx。在配置好编译选项后,你可以使用以下命令来编译和安装Nginx:
make && make install
这将开始编译过程,并在编译完成后安装Nginx。
7. 安装完成后,你可以通过以下命令来检查Nginx的状态:
/usr/local/nginx/sbin/nginx -t
如果返回的是syntax is ok
和test is successful
,那么表示Nginx安装成功并且配置正确。
8. 启动Nginx并检查是否启动成功:
/usr/local/nginx/sbin/nginx
然后,你可以使用浏览器访问你的服务器的IP地址或域名,看看是否能正常显示Nginx的欢迎页面。如果能显示,那么表示Nginx已经成功启动并且可以正常工作了。
请注意,上述步骤中的版本号x.x.x
应替换为你实际下载的Nginx版本号。另外,如果你还没有创建nginx
用户和用户组,你需要先创建它们,可以使用以下命令:
sudo useradd -s /sbin/nologin nginx
这样,你就完成了在CentOS上编译安装Nginx的过程。
yum安装
更新系统软件包
sudo yum update
安装Nginx
sudo yum install nginx
Nginx.conf配置文件详解
# 定义Nginx运行的用户和用户组
user nginx;
# 启动进程,通常设置为CPU的核心数
worker_processes auto;
# 全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log warn;
# 进程PID文件位置
pid /var/run/nginx.pid;
# 一个nginx工作进程最大打开文件数
worker_rlimit_nofile 1024;
# 事件模块
events {
# 每个进程的最大连接数
worker_connections 1024;
}
# HTTP服务器配置
http {
# 文件扩展名与文件类型映射表
include /etc/nginx/mime.types;
# 默认文件类型
default_type application/octet-stream;
# 日志格式定义
#log_format main '$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.log main;
# 是否开启发送文件的时间戳
sendfile on;
# 开启tcp_nopush,减少网络发送次数
tcp_nopush on;
# 开启tcp_nodelay,减少网络延迟
tcp_nodelay on;
# 保持连接时间
keepalive_timeout 65;
# 包含其他的配置文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
# 设置服务器的标志图标
server_tokens on;
Nginx 使用
Nginx的常用命令包括:
-
启动Nginx服务。可以在Nginx的安装目录下的sbin文件夹中进入,然后执行命令
./nginx
来启动Nginx服务。12 -
检查Nginx配置文件。使用命令
./nginx -t
来检查Nginx配置文件是否有语法错误。12 -
重新加载Nginx配置。在修改了Nginx的配置文件后,可以使用命令
./nginx -s reload
来重新加载配置,使修改后的配置文件生效。13 -
停止Nginx服务。可以使用命令
./nginx -s stop
来快速停止Nginx服务,这种方式可能会丢失未保存的信息。或者使用命令./nginx -s quit
来完整有序地停止Nginx服务,并保存相关信息。 -
查看Nginx进程号。使用命令
ps -ef | grep nginx
可以查看Nginx的进程号。 -
平滑重启Nginx。使用命令
kill -HUP 主进程号
来进行平滑重启。13 -
强制停止Nginx。使用命令
kill -9 主进程号
来强制停止Nginx。 -
从容停止Nginx。使用命令
kill -QUIT 主进程号
来从容停止Nginx。 -
快速停止Nginx。使用命令
kill -TERM 主进程号
来快速停止Nginx。
在线自动生成nginx配置文件
可以自由选择所需的应用,生成nginx配置作为参考。
根据你的业务需求,自动生成复杂的nginx配置文件,提供你作为参考,非常好用