一款高性能、轻量级Web服务软件,稳定性高,系统资源消耗低
对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求
注意:实际操作之中,很多公司为了服务器的稳定,都会设置在20000个左右
静态文件服务:Nginx 可以直接提供静态文件的服务,例如 HTML、CSS、JavaScript、图像等,高效地处理并响应静态文件的请求
反向代理:Nginx 可以作为反向代理服务器,将客户端的请求转发给后端的多个服务器
它可以实现负载均衡、高可用性和故障转移,提供更好的性能和可靠性。
动态内容处理:Nginx可以与后端应用服务器(如 PHP-FPM、Node.js、Java 应用服务器等)配合使用,
实现动态内容的处理和执行。它可以代理动态请求,并将请求的结果返回给客户端。
SSL/TLS 加密支持:Nginx 支持通过 SSL/TLS 对客户端和服务器之间的通信进行加密,提供安全的 HTTPS 连接
虚拟主机支持:Nginx 可以在同一台服务器上托管多个域名或站点,每个虚拟主机可以拥有独立的配置和资源
URL 重写和重定向:Nginx 支持灵活的 URL 重写和重定向规则,可以对请求的 URL 进行修改和重写,实现 URL 的美化和重定向
缓存机制:Nginx 自带缓存功能,可以缓存静态文件和动态内容,以减轻后端服务器的负载并提供更快的响应速度
日志记录:详细记录访问日志和错误日志,包括记录请求的详细信息,包括访问时间、请求路径、IP、响应状态等,
帮助进行故障排查和性能分析。
access.log:记录访问成功的记录
error.log:记录访问失败的记录
注:系统控制的日志在/var/log/messages中,只有自己的业务日志保存在日志的功能之中
可扩展性和灵活性:Nginx 的模块化架构和强大的配置选项使得它具有很高的可扩展性和灵活性
静态服务器 (图片、视频服务、文本)
动态服务
反向代理,负载均衡
缓存服务
1.因为自身的代码,大量的代码进行了优化,同时自带一个epoll功能模块,支持高并发
2.Nginx是一个master进程控制多个work进程,master进程主要是负责收集和分发请求,work才是实际的执行者
每一个请求进来master都会拉起一个work进程来处理请求,work处理的请求的过程只受内存大小的影响,并且本身处理请求所占用
的内存也很小,所以可以处理大并发
master也负责监听work的状态(work的数量一般是cpu一致或者2倍),二者之间相互依赖相互补充
Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存
(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会耗光服务器资源
Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内
存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
yum -y install pcre-devel.x86_64 zlib-devel.x86_64 openssl-devel.x86_64 gcc gcc-c++ make
(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--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
make -j 4 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #使系统能够识别nginx的操作命令
nginx有两种进程:
master进程(主进程):管理工作进程,启动时读取配置文件
worker进程(工作进程):处理用户连接请求
/usr/local/sbin/nginx #启动nginx,使用绝对路径或者绝对路径
nginx -t #检查配置文件是否配置正确
nginx #启动
扩展
#停止
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
kill -3
kill -s QUIT
killall -3 nginx
killall -s QUIT nginx
#重载
kill -1
kill -s HUP
killall -1 nginx
killall -s HUP nginx
#日志分割,重新打开日志文件
kill -USR1
#平滑升级
kill -USR2
kill的相关编号
| 信号编号 | 信号名 | 含义 |
| -------- | ------ | ------------------------------------------------------------ |
| 0 | EXIT | 程序退出时收到该信息。 |
| 1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
| 2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。 |
| 3 | QUIT | 退出。 |
| 9 | KILL | 杀死进程,即强制结束进程。 |
| 11 | SEGV | 段错误。 |
| 15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
如果在添加之前服务已经打开,需要先关服务,在添加打开
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/run/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
mkdir -p /usr/local/nginx/run/ #创建目录
vim /usr/local/nginx/conf/nginx.conf #修改配置文件
pid /usr/local/nginx/run/nginx.pid; #找到 pid的位置修改systemctl daemon-reload #重新加载配置
systemctl enable --now nginx
#开机自启并立即启动 如果卡主是应为logs下有 nginx.pid 文件 删除即可chown -R nginx.nginx /usr/local/nginx #修改权限
systemctl start nginx.service
systemctl enable nginx.service