目录
Nginx服务
Nginx的基本概念
NGINX是一款高性能的开源反向代理服务器、负载均衡器和Web服务器
- 反向代理:NGINX可以作为反向代理服务器,将客户端请求转发给后端的多个服务器,并将响应返回给客户端。这样可以实现负载均衡、缓存、SSL终止等功能。
- 负载均衡:NGINX的负载均衡功能可以将请求均匀地分发给多个后端服务器,提高系统的性能和可用性。
- 静态文件服务:NGINX可以作为静态文件服务器,直接响应客户端对静态文件(如图片、CSS、JavaScript文件)的请求,提供高效的静态文件传输。
- SSL/TLS终止:NGINX可以用作SSL/TLS终止,对收到的加密请求进行解密,并将明文请求发送给后端服务器。
- 缓存:NGINX的缓存功能可以在代理服务器上缓存来自后端服务器的响应,减轻后端服务器的负载,并提供更快的响应时间。
- 动态HTTP内容处理:除了静态内容,NGINX还可以处理动态的HTTP内容,如使用FastCGI、uWSGI等将请求转发给后端应用服务器。
- 访问控制和安全性:NGINX支持访问控制,可以根据访问规则来限制或允许特定的请求。此外,它还提供了一些安全性功能,如DDoS防护和IP黑名单。
总而言之,NGINX是一个灵活、高性能的服务器软件,可以实现反向代理、负载均衡、静态文件服务、SSL终止等多种功能,是构建高可用、高性能Web应用的重要组件之一。
Nginx的主要用途
NGINX的主要用途包括以下几个方面:
- 反向代理服务器:NGINX作为反向代理服务器,可以接收客户端请求,并将请求转发给后端的多个服务器。这样可以实现负载均衡、提高系统的性能和可用性。同时,NGINX还可以进行请求的过滤、缓存、SSL终止等操作。
- 负载均衡器:NGINX的负载均衡功能可以将请求分发给多个后端服务器,使服务器能够均匀地处理请求,提高系统的吞吐量和可伸缩性。
- 静态文件服务器:NGINX可以作为静态文件服务器,直接响应客户端对静态文件的请求。由于NGINX的高性能和高并发处理能力,它能够提供快速的静态文件传输。
- 反向代理缓存服务器:NGINX可以缓存后端服务器返回的响应,减少后端服务器的负载,提高系统的性能。它可以根据缓存策略和缓存规则来存储和更新缓存,并根据客户端请求判断是否使用缓存数据。
- SSL/TLS终止:NGINX可以充当SSL/TLS终止器,接收加密的客户端请求,对其进行解密,然后将明文请求转发给后端服务器。这样可以减轻后端服务器的负载,并且提供更高的安全性。
- 动态HTTP内容处理:除了处理静态文件,NGINX还可以将动态的HTTP请求转发给后端应用服务器,如使用FastCGI、uWSGI等协议进行通信。这样可以实现动态内容的处理,如动态网页、API请求等。
- 代码:Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且处理zlib、PCRE和OpenSSL之外,标准模块值使用系统C库函数。如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。
总结来说,NGINX的主要用途是作为反向代理、负载均衡器、静态文件服务器和缓存服务器。它具有高性能、高并发、可扩展性强的特点,适用于构建高可用、高性能的Web应用环境。
Nginx的特点
- 跨平台
Nginx可以在多数Linux上编译运行,而且也有Windows的移植版本。
- 配置简单
Nginx非常容易上手,配置风格跟程序开发一样简单。
- 非阻塞、高并发连接
数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2万~3万并发连接(这得益于Nginx使用最新的epoll模型)。
- 事件驱动
通信机制采用epoll模型,支持更大的并发连接
Nginx服务架构
Nginx服务器使用Master、Worker多进程模式。主进程(Master Process)启动后,会接收和处理外部信号;主进程启动后,通过函数fork()产尘一个或多个子进程(Work Process),每个子进程会进行进程初始化、模块调用以及对事件的接收和处理等工作。
来看一张图了解Nginx服务架构
主进程
NGINX服务的主进程的主要功能包括:
- 接收和处理信号:NGINX的主进程负责接收和处理各种信号,如启动、停止、重新加载配置等信号。通过接收这些信号,主进程可以控制和管理NGINX的运行。
- 启动和管理工作进程:NGINX使用多进程模型,主进程负责启动和管理工作进程。在启动时,主进程会创建一定数量的工作进程,并在运行过程中监控工作进程的状态。如果某个工作进程异常退出,主进程会重新创建一个新的工作进程来替代它。
- 处理和分发请求:主进程负责接收客户端的请求,并将请求分发给工作进程。它接收到的请求会经过一系列的处理,如连接管理、HTTP协议解析、负载均衡等。然后,主进程选择一个工作进程来处理这个请求,工作进程会根据配置和规则进行相应的处理和响应。
- 监控系统资源和性能:主进程会定期监控系统资源的使用情况,如CPU、内存、磁盘等。通过监控这些信息,主进程可以进行负载均衡调度,将请求发送给资源使用较少的工作进程。此外,主进程还可以收集和记录性能指标,如请求处理时间、连接数等,用于监控和性能分析。
- 定时任务和周期性操作:主进程可以执行一些定时任务和周期性操作,如重新加载配置、日志文件切割、定期清理资源等。这些操作可以保证NGINX的正常运行和服务的稳定性。
总结来说,NGINX服务的主进程的主要功能是接收和处理信号、启动和管理工作进程、处理和分发请求、监控系统资源和性能,以及执行定时任务和周期性操作。它是整个NGINX服务的核心,负责协调和管理各个组件的运行。
子进程
NGINX服务子进程的主要功能是处理客户端的请求。子进程由主进程生成,生成数量可以在配置文件中定义,主要工作包括:
- 接收来自客户端的连接请求;
- 解析客户端请求,包括请求的方法、URI、HTTP协议版本、请求头等;
- 根据请求的内容,将请求转发给合适的上游服务器;
- 通过与上游服务器的通信,获取上游服务器返回的响应;
- 将上游服务器返回的响应发送给客户端;
- 处理客户端的下一次请求。
除了处理客户端请求外,子进程还会执行一些其他任务,如:
- 监听端口,等待客户端的连接请求;
- 负载均衡,根据配置的负载均衡策略将请求转发给不同的上游服务器;
- 缓存处理,将经常请求的静态资源缓存起来,提高响应速度;
- 日志记录,将请求及响应的相关信息记录到日志文件中,用于故障排查和性能分析;
- 进程管理,监控子进程的运行状态,自动重启故障进程。
总之,NGINX服务子进程的主要功能是接收和处理客户端的请求,并与上游服务器通信,将请求转发给上游服务器并将响应返回给客户端。同时,子进程还会执行一些其他任务,如负载均衡、缓存处理和日志记录等。
部署Nginx服务
Linux操作系统的单节点规划准备
基础环境部署
(1)修改主机名
使用远程连接工具连接到虚拟机,并对其虚拟机修改主机名
[root@localhost ~]# hostnamectl set-hostname nginx
[root@localhost ~]# hostnamectl
Static hostname: nginx
上面修改完后使用“bash”或重连终端实现更名
(2)关闭防火墙及SElinux服务
两个节点都关闭防火墙firewalld及SElinux服务
[root@nginx ~]# systemctl stop firewalld
[root@nginx ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@nginx ~]# setenforce 0 //这个只是临时关闭,永久关闭要编辑配置文件/etc/selinux/config
(3)安装配置基础服务
首先拉取网络YUM源
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
安装基础环境
[root@nginx ~]# yum install gcc gcc-c++ openssl-devel zlib-devel zlib pcre-devel -y
创建指定用户,这个nginx用户要和下一篇文章部署的PHP服务器上创建的nginx两者ID一致,这里先创建用户
[root@nginx ~]# groupadd -g 1001 nginx
[root@nginx ~]# useradd -u 900 nginx -g nginx -s /sbin/nologin
[root@nginx ~]# tail -l /etc/passwd
nginx:x:900:1001::/home/nginx:/sbin/nologin
(4)安装配置nginx服务
nginx包下载(选择合适的包即可):nginx: download
因为我们使用的是源码安装,所以我们要将nginx-1.12.2.tar.gz压缩包上传至nginx节点
将压缩包上传至/usr/local/src目录下
[root@nginx ~]# ls /usr/local/src
nginx-1.12.2.tar.gz
解压到当前目录
[root@nginx ~]# cd /usr/local/src/
[root@nginx src]# tar -zxvf nginx-1.12.2.tar.gz
进入nginx-1.12.2 目录,编译并安装
[root@nginx src]# cd nginx-1.12.2
[root@nginx nginx-1.12.2]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@nginx nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx
这行命令这么长我给大家做一个解释方便大家理解:
这是使用 Nginx 构建 Web 服务器的一行命令,正常安装的话我们是直接运行./configure命令,但是我们要为例后续构建web服务器
# `./configure`:运行 Nginx 的配置脚本。
# `--prefix=/usr/local/nginx`:指定 Nginx 安装的路径。
# `--with-http_dav_module`:开启 WebDAV 模块,使 Nginx 支持处理 WebDAV 相关请求。
# `--with-http_stub_status_module`:开启统计模块,可以查看 Nginx 运行状态。
# `--with-http_addition_module`:开启附加模块,如将响应内容附加到指定的响应中。
# `--with-http_sub_module`:开启替换模块,能够在 Nginx 给客户端响应前修改响应中的字符串。
# `--with-http_flv_module`:开启 FLV 流媒体模块,可以使用 Nginx 作为流媒体服务器进行视频的直播和点播。
# `--with-http_mp4_module`:开启 MP4 流媒体模块,可以使用 Nginx 作为流媒体服务器进行视频的点播。
# `--with-http_ssl_module`:开启 SSL 模块,使 Nginx 能够处理 HTTPS 请求。
# `--with-http_gzip_static_module`:开启 Gzip 压缩模块,可以对静态文件进行 Gzip 压缩。
# `--user=nginx`:设置 Nginx 进程所属用户。
# `--group=nginx`:设置 Nginx 进程所属用户组。
安装
[root@nginx nginx-1.12.2]# make && make install
编译和安装都完成后
创建软连接
[root@nginx nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
检查配置是否有问题
[root@nginx nginx-1.12.2]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动nginx
[root@nginx nginx-1.12.2]# nginx
测试查看端口,发现没有命令
[root@nginx nginx-1.12.2]# netstat -ntlp
-bash: netstat: command not found
YUM安装net-tools工具
[root@nginx nginx-1.12.2]# yum install -y net-tools
再次查看
[root@nginx nginx-1.12.2]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4688/nginx: master
发现80端口启动,则表示nginx服务启动成功
打开浏览器访问nginx IP地址来查看是否出现nginx欢迎页面!
至此,Nginx服务环境搭建完成!