介绍
读音
- Nginx 读作 “engine-ex”。
用途
- Nginx 是一种用于处理并发请求的软件。
使用原因
- Nginx 最重要的功能是反向代理和负载均衡,反向代理将允许我们在端口 80 上托管多个域名,同时使用不同的语言编写后端服务,负载均衡可以把多个提供相同功能的后端服务配置成彼此冗余。
- Nginx 负责访问日志、黑名单、负载平衡和提供静态文件访问,后台 Web 服务则可专注于业务逻辑处理,Nginx 是动静分离架构的入口程序。
- Nginx 支持高并发,内存占用小。
- Nginx 支持配置文件动态修改。
Nginx中的两中进程
nginx 在启动后,会以 daemon 的方式在后台运行,后台进程包含一个 master 进程和多个 worker 进程,worker 进程以非 root 用户运行,可以在配置文件中配置运行 worker 进程的用户。
主进程(master process):负责加载和分析配置文件、管理 worker 进程,平滑升级。
工作进程(worker process):接收客户端请求、将请求一次送入各模块过滤、I/O 调用、数据缓存、发送响应。
主要功能:
主进程:
- 读取 Nginx 配置文件并验证其有效性和正确性
- 按照配置启动、管理和关闭工作进程
- 接受外界指令,比如重启、升级及关闭服务器等指令
- 不中断服务,实现平滑升级,重启服务并应用新的配置
- 开启日志文件
工作进程:
- 接收处理客户端的请求
- 将请求以此送入各个功能模块进行处理
- IO 调用,获取响应数据
- 与后端服务器通信,接收后端服务器的处理结果
- 缓存数据,访问缓存索引,查询和调用缓存数据
- 发送请求结果,响应客户端的请求
- 接收主程序指令,比如重启、升级和退出等
cache相关进程:cache loader (缓存索引重建)与 cache manager( 缓存索引管理)组成
- Cache loader 在 Nginx 服务启动后由主进程生成,根据本地磁盘上缓存建立索引元数据库后退出。
- Cache manager 在元数据更新完成后,对元数据是否过期做出判断。
Nginx中的模块结构
Nginx 的各种功能和操作都由模块来实现。
Nginx 的模块从结构上分为核心模块、基础模块和第三方模块。
核心模块: HTTP 模块、EVENT 模块和 MAIL 模块
基础模块: HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块
第三方模块: HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key 模块及用户自己开发的模块。
这样的设计使得Nginx更方便开发和扩展。
安装(Redhat/CentOS)
两种方式
默认系统仓库安装(方便、但是通常提供的版本较旧)和nginx.org官方仓库安装(设置一次yum仓库,但是版本会是最新的)
在安装过程中如果遇到选项直接y,确认即可。
默认仓库安装
- 安装 EPLE 存储库
EPEL 代表企业 Linux 的额外包。安装 EPEL 将确保 RHEL 或 CentOS 上的 Nginx 保持最新。
$ sudo yum install epel-release
- 更新存储库(需要消耗较长时间,请耐心等待)
$ sudo yum update
- 安装 Nginx
$ sudo yum install nginx
- 检查版本确认是否安装完成
$ sudo nginx -v
修改yum配置安装
- 通过在 /etc/yum.repos.d 中创建文件 nginx.org 为 RHEL 或 CentOS 创建 yum 存储库。
$ sudo vi /etc/yum.repos.d/nginx.repo
- 在nginx.repo中添加以下几行代码
[nginx] name=nginx repo baseurl=https://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1
- 其中这里,
- mainline 指向 NGINX 开源的最新主线版本,如想获得最新的稳定版本可以删除/mainline。
- OS是操作系统的名称,即 rhel 或 centos
- OSRELEASE是版本号,例如 6、6._x、7、7.x 等。
- 如,要获取 CentOS 7 的最新主线包,请使用以下配置。
[nginx] name=nginx repo baseurl=https://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
- 保存
按下ESC 并 输入 :wq保存退出。 - 更新存储库
$ sudo yum update
- 安装 Nginx
$ sudo yum install nginx
- 检查版本确认是否安装完成
$ sudo nginx -v
验证Nginx的安装
检查Nginx是否正在运行
$ ps -ef| grep nginx
如果有如下输出,则已经运行。
root 95217 1 0 19:02 ? 00:00:00 nginx: master process /usr/sbin/nginx nginx 95219 95217 0 19:02 ? 00:00:00 nginx: worker process root 95284 8038 0 19:08 pts/0 00:00:00 grep --color=auto nginx
如果只是输出一行,则没有运行
root 95328 8038 0 19:10 pts/0 00:00:00 grep --color=auto nginx
也可以使用
$ systemctl status nginx.service
查看nginx的运行状态,如果有如下输出,就是正在运行。
Active: active (running)
Nginx启动与重启
启动
这里以CentOS7及以上版本进行说明。
手动启动
$ sudo systemctl start nginx
手动启动只是启动这一次,当系统进行重启后,nginx服务并不会维持在运行状态。而对于nginx来说,我们一般是期望它是开机自启动的。
设置开机自启动
$ sudo systemctl enable nginx.service
源码编译安装的 nginx 启动命令
$ sudo nginx -s start
关闭
普通关闭
$ sudo systemctl stop nginx
向 Nginx 主进程发送 QUIT(正常关机)信号
$ kill -QUIT $( cat /var/run/nginx.pid )
源码编译安装的 nginx 停止命令
$ sudo nginx -s stop
重启
$ sudo systemctl restart nginx
重新加载
$ sudo systemctl reload nginx
源码编译安装的 nginx 重载命令
$ sudo nginx -s reload
查看nginx配置
每当我们对 Nginx 服务器的配置文件进行更改或编辑时,最好在重新启动或重新加载服务之前测试配置。
输出结果:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
如果有任何错误,这些命令将打印详细消息。
访问页面
如果没有出错的话,我们可以尝试去访问Nginx的页面。
这里查看80端口的防火墙是否已经打开了
$ sudo firewall-cmd --query-port=80/tcp
如果输出yes
的话说明防火墙对80端口打开,如果没开就需要打开80端口的防火墙
$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙(因为我们打开了一个端口,只有在重启过后才能正常访问)
$ sudo firewall-cmd --reloa
再次查看80端口是否被放行,这次输出结果应该为yes
$ sudo firewall-cmd --query-port=80/tcp
查看自己的虚拟机或者是服务器的ip
$ sudo ifconfig
我的是这个
然后使用浏览器访问这个ip,就会得到Welcome to CentOS,不同的Nginx初识页面不同。如果是Welcome to Nginx,也是可以正确访问的。
参考教程和文档: