作为一款轻量级、高性能的Web服务器软件,Nginx不仅能够作为反向代理服务器、邮件代理服务器使用,还能胜任负载均衡器和HTTP缓存等角色,广泛应用于各种规模的网络系统当中。本文将详细介绍Nginx的源代码安装过程。
一、Nginx简介
在处理高并发、低资源消耗的网络流量时,选择合适的服务器软件至关重要。俄罗斯的Nginx(发音为”engine x”)便是一款备受推崇的Web服务器软件,源自于2004年由伊戈尔(Igor)创建并开源。最初作为代理服务器推出,2015年成立了Nginx公司,其后在2019年被F5 Networks公司以6.7亿美元收购。
二、Nginx和负载均衡
在反向代理和负载均衡领域,Nginx与LVS、HAProxy等工具存在竞争与补充的关系。其中,LVS以其强大的负载能力、简洁的配置及稳定的表现著称;而Nginx则在HTTP分流策略、正则规则处理等方面显示出更高的灵活性。尽管Nginx仅支持HTTP、HTTPS、Email协议,其活跃的社区和丰富的第三方模块确保了广泛的应用场景。
1、LVS(Linux Virtual Server)
(1)优点:
- 强大的负载均衡能力,工作在网络的第四层,仅用于分发;
- 配置简单,易于使用,稳定性高。支持完整的双机热备方案;
- 广泛适用,几乎支持所有应用;
- 提供多种调度算法,如轮询、加权轮询、最小连接数等。
(2)缺点:
- 不支持正则表达式处理,无法进行动静分离;
- 对于庞大的网站应用,LVS/DR+Keepalived的实施较为复杂;
2、Nginx
(1)优点:
- 工作在网络的第七层,针对HTTP流量做分流策略,支持正则规则,灵活性高;
- 对网络稳定性要求较低,安装配置简单;
- 高负载、高并发下资源消耗低;
- 不仅可作为代理服务器,还可用作Web服务器,且支持缓存静态网页和图片;
- 活跃的社区和丰富的第三方模块。
(2)缺点:
- 适应范围较窄,仅支持HTTP、HTTPS、Email协议;
- 对后端服务器的健康检查仅支持通过端口检测,不支持URL检测。
3、HAProxy
(1)优点:
- 支持虚拟主机,工作在第四、第七层,支持多网段;
- 补充了Nginx的一些缺点,如支持Session保持、Cookie引导等;
- 可以通过获取指定的URL检测后端服务器状态;
- 负载均衡速度较快,在并发处理上优于Nginx;
- 支持TCP协议的负载均衡转发,可用于对MySQL读的负载均衡。
(2)缺点:
- 不支持POP/SMTP协议,SPDY协议以及HTTP缓存功能;
- 配置重载需要重新启动进程;
- 多进程模式的支持不足。
三、Nginx基础特性
Nginx 是一个高性能的开源 Web 服务器,具有许多基础特性和功能。其模块化设计使得它具有良好的扩展性,可以根据需要灵活添加功能。
1、Nginx基础特性:
- 模块化设计和高扩展性: Nginx 采用模块化的架构,允许用户通过添加新的模块来扩展其功能,同时保持高性能和稳定性;
- 高可靠性: Nginx 被广泛用于高流量的网站和应用,因为它具有稳定可靠的性能,能够处理大量并发连接而不会出现系统崩溃或性能下降;
- 支持热部署: Nginx 允许在不停机的情况下更新配置文件、升级版本和更换日志文件,这使得系统的维护更加灵活和便捷;
- 低内存消耗: 即使在有大量长连接的情况下,Nginx 的内存消耗也非常低。例如,在处理 10000 个 keep-alive 的非活动连接时,仅需 2.5MB 的内存;
- 事件驱动和异步非阻塞: Nginx 使用事件驱动的架构来处理请求,通过异步非阻塞的方式处理 I/O 操作,提高了服务器的性能和并发能力;
- 支持 sendfile 和内存映射: Nginx 支持 sendfile 技术,可以在文件传输过程中将数据直接从磁盘发送到网络,提高了文件传输的效率。同时,它还支持内存映射,可以将文件映射到内存中进行读写操作,加速数据的访问。
2、Nginx基本功能
- 静态资源的 Web 服务器: Nginx 可以作为静态资源的 Web 服务器,快速、高效地提供静态文件的访问服务;
- HTTP 协议的反向代理: Nginx 可以作为反向代理服务器,将客户端的请求转发到多个后端服务器,并将响应返回给客户端,实现负载均衡和高可用性;
- 支持 FastCGI 和 uWSGI: Nginx 可以与 FastCGI 或 uWSGI 等协议的应用服务器进行集成,实现动态内容的处理和网站应用的部署;
- 邮件反向代理: Nginx 可以作为 POP3/IMAP4 邮件服务器的反向代理,实现邮件服务的负载均衡和高可用性;
- 模块化架构: Nginx 提供了丰富的标准模块,如 ngx_http_、ngx_mail_、ngx_upstream_* 等,同时还支持第三方模块的扩展,如压缩、SSL 加密等功能;
3、Master/Worker结构
Nginx 的 Master/Worker 结构进一步提升了其性能和稳定性:
- Master 进程: 主要负责读取 Nginx 的配置文件,验证配置的有效性和正确性,建立、绑定和关闭网络连接,接受外部指令并执行,如重启、开启、关闭服务等操作。在升级版本或配置文件时,Master 进程可以实现平滑的不中断服务,保证了系统的稳定性;
- Worker 进程: 主要负责处理客户端的请求,根据配置的模块进行请求处理,进行 I/O 调用,与后端服务器通信,进行数据缓存和请求结果的发送。Worker 进程与 Master 进程相互通信,接受其指令并执行相应的操作,保证了系统的协调运行。
四、Nginx安装
Nginx基于C语言开发,因此需要预先安装C语言编译环境。在Linux系统下,通过简单的命令即可完成安装:
1、安装依赖包:
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
2、下载并解压Nginx:
wget https://nginx.org/download/nginx-1.16.1.tar.gz tar -zxvf nginx-1.16.1.tar.gz
3、配置及编译安装Nginx:
cd nginx-1.16.1 ./configure --prefix=/usr/local/nginx make & make install
安装完成后,可查看Nginx目录结构,其中”conf/nginx.conf”是核心配置文件。
五、Nginx常用命令与环境变量配置
1、查看版本、检查配置文件合法性、启动、停止、重新加载等操作可通过以下命令执行:
./nginx -v ./nginx -t ./nginx ./nginx -s stop ./nginx -s reload
2、为便于操作,建议将Nginx的sbin目录添加到PATH环境变量中,实现在任意位置执行Nginx命令。
通过vim编辑器,打开/etc/profile文件, 在PATH环境变量中增加nginx的sbin目录,如下:
五、Nginx应用
1、配置文件结构
nginx的配置文件(conf/nginx.conf)整体上分为三部分:
- 全局块、配置和nginx运行相关的全局配置;
- events块:配置和网络连接相关的配置;
- http块 :配置代理、缓存、日志记录、虚拟主机等配置。
在http块中可以包含多个server块,每个server块可以配置多个location块。
2、部署静态资源
Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源。
将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。
server { listen 80; #监听端口 server_name localhost; #服务器名称 location / { #匹配客户端请求url root html; #指定静态资源根目录 index index.html; #指定默认首页 } }
将静态资源上传到 /usr/local/nginx/html 目录。
启动nginx。
访问。
我们也可以通过修改指定默认首页的路径的方式来修改访问路径。
配置文件修改后,需要重新加载一下,才可以生效 :nginx -s reload。
3、反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。 在nginx中,我们可以在nginx.conf中配置反向代理:
进入nginx的安装目录,并编辑配置文件nginx.conf:
cd /usr/local/nginx/conf/ vim nginx.conf
在http块中,再添加一个server块虚拟主机的配置,监听82端口,并配置反向代理proxy_pass:
server { listen 82; server_name localhost; location / { proxy_pass http://192.168.200.201:8080; #反向代理配置,将请求转发到指定服务 } }
上述配置的含义为: 当我们访问nginx的82端口时,根据反向代理配置,会将请求转发到http://192.168.200.201:8080 对应的服务上。
检查配置文件,并重新加载:
nginx -t nginx -s reload
到此安装和配置结束。
-
广告合作
-
QQ群号:707632017