目录
更多精彩博文详见:
一、Nginx概述
Nginx是一个高性能的Web服务器软件,不仅提供Web服务器的功能,还实现了诸如访问路由、正向/反向代理、负载均衡、内容缓存、可编程等应用特性,使得Nginx成为互联网上最受欢迎的开源软件之一。
官方有Nginx开源版本和Nginx Plus商业版本,开源版本是使用最多的版本,商业版本除了具有开源版本的全部功能外,还提供了一些企业级功能。而国内流行的Nginx主要有两个开源版本,一是由淘宝网技术团队维护的分支版本 Tengine 项目;二是由章亦春发起的扩展版本 OpenResty 项目。
本文及后续系列文章,均使用Nginx官方开源版本。
(一)、Nginx安装目录简介
Nginx默认编译安装后,安装路径为/usr/local/nginx/,下面介绍该路径下几个主要的默认子目录。
1、conf目录
该目录下保存Nginx服务所有的配置文件,其中nginx.conf是最核心最主要的配置文件,其他.conf后缀的配置文件则是用来配置Nginx相关的功能的。例如配置fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件。每个配置文件一般都有个样例配置文件,以.default结尾,使用时复制并将.default去掉即可。
2、html目录
该目录下保存Nginx服务的web文件,但是可以更改为其他目录保存web文件。默认有两个web文件50x.html和index.html,50x.html文件是默认的错误提示页面,index.html文件是默认的主页面。
3、sbin目录
该目录下保存Nginx服务的二进制脚本,可以接受不同的参数以实现Nginx服务启动、关闭等功能。
4、log目录
该目录用来保存Nginx服务的访问日志和错误日志等,访问日志文件为access.log,错误日志文件为error.log。log目录可以根据实际需求配置在其他路径,比如/var/log/nginx里面。
(二)、Nginx配置文件简介
Nginx默认编译安装后,配置文件都会保存在/usr/local/nginx/conf目录下。Nginx默认的主配置文件是nginx.conf,这也是Nginx唯一的默认配置文件入口。
1、配置文件目录结构
/usr/local/nginx/conf配置文件目录结构如下:
其中,以“.default”为扩展名的文件是Nginx配置文件的配置样例文件。
- nginx.conf:Nginx默认配置文件,也是唯一的配置文件入口。
- fastcgi_params:Nginx在配置FastCGI代理服务时会根据 fastcgi_params文件的配置向FastCGI服务器传递变量,该配置文件现已由fastcgi.conf代替。
- fastcgi.conf:为了规范配置指令 SCRIPT_FILENAME的用法,引人FastCGI变量传递配置。
- mime.types:MIME类型映射表,Nginx会根据服务端文件后缀名在映射关系中获取所属文件类型,将文件类型添加到HTTP消息头字段“Content-Type”中。
- scgi_params:Nginx在配置SCGI代理服务时会根据scgi_params文件的配置向SCGI服务器传递变量。
- uwsgi _params:Nginx在配置uWSGI代理服务时会根据uwsgi_params文件的配置向uWSGI服务器传递变量。
- koi-utf、koi-win、win-utf:这3个文件是KOI8-R编码转换的映射文件,因为Nginx的作者是俄罗斯人,在Unicode流行之前,KOI8-R是使用最为广泛的俄语编码。
2、主配置文件nginx.conf
Nginx默认的主配置文件是nginx.conf,这也是Nginx唯一的默认配置文件入口。nginx.conf文件主要由不同的功能模块组成,下面将简单介绍其中的核心模块。
nginx.conf配置文件主要结构如下:
(1)、main全局模块
Nginx的根区域,该区域的配置全局有效。nginx.conf的整个文件内容都配置在该区域中。
主要配置项如下:
- user:用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行。
- worker_processes:指定Nginx服务要开启的子进程数量,通常数量是CPU内核数量的整数倍。
- error_log:定义错误日志文件的位置以及日志输出级别(debug/info/notice/warn/error/crit)
- pid:用来指定Nginx进程id存储文件的位置。
(2)、events模块
events模块主要是Nginx事件相关的配置,主要影响Nginx服务与用户的网络连接。比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数等。
主要配置项如下:
- worker_connections:指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker_processes共同决定的。
- multi_accept:配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接
- use epoll:配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue
(3)、http模块
http模块是Nginx服务配置最核心的模块,配置项较多,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这里根据实际需求进行配置。http模块可以包含多个server模块,而一个server模块中又可以包含多个location模块。
(4)、server模块
server模块是http模块中的一个子模块,用来配置一个虚拟主机。在server模块中可以定义虚拟主机监听端口、虚拟主机名称、访问日志文件等内容。一个http模块中可以包含多个server模块,即可以定义多个虚拟主机。同时每个server模块中也可以包含多个location模块。
(5)、location模块
location模块主要用于对用户URI进行访问路由处理的配置。location模块基于Nginx接受到的请求字符串,对用户请求的URI进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存、应答控制、反向代理、负载均衡等功能都是在这部分实现。另外很多第三方模块的配置也是在location模块中配置。location模块是server模块的子模块,一个server模块可以同时定义多个location模块。
(6)、upstream模块
upstream模块与代理模块共同实现HTTP协议的负载均衡功能,也成为“七层负载均衡”。Nginx通过代理模块的反向代理功能,将用户的请求转发到upstream模块,根据不同的负载均衡策略将用户请求最终分配到后端服务器节点。
(7)、stream模块
stream模块主要实现对TCP/UDP协议代理功能的支持。stream模块是在Nginx1.9.0版本上开始添加的,通过在stream模块中的配置,实现TCP/UDP协议的代理功能。
二、Nginx安装部署
(一)、环境规划
- 服务器IP
Nginx01:192.168.110.131
- 系统版本
CentOS Linux release 7.7.1908 (Core)
- 关闭防火墙
此处为方便演示,直接关闭防火墙。生产环境可以根据实际需求开通服务器防火墙策略。
systemctl stop firewalld
systemctl stop iptables
- Nginx版本
此处使用1.27.5版本,可以根据实际情况选择合适的版本。
Nginx源码包官方下载地址:http://nginx.org/download/
- 安装环境相关依赖
[root@Nginx01 ~]# yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel libxm12-devel libxslt-devel gd-devel GeoIP-devel jemalloc-devel libatomic_ops-devel perl-devel perl-ExtUtils-Embed compat-libcap1 compat-libstdc++-33 ksh libaio-devel libstdc++-devel elfutils-libelf-devel fontconfig-devel libXrender-devel
(二)、安装部署
1、下载Nginx源码包
此处Nginx源码包下载至/usr/local/src/路径下。
[root@Nginx01 ~]# cd /usr/local/src/
[root@Nginx01 src]# wget http://nginx.org/download/nginx-1.27.5.tar.gz
2、创建Nginx用户
创建一个名称为nginx的匿名用户,只能用于运行nginx的worker进程,无法登录shell进行操作。
- 创建用户组nginx
[root@Nginx01 ~]# groupadd nginx
- 创建匿名用户nginx
[root@Nginx01 ~]# useradd -g nginx -s /sbin/nologin -M nginx
-g:指定用户组为nginx
-s:指定nginx用户的默认shell
-M:指定不创建nginx用户的home目录
3、编译安装Nginx
(1)、解压Nginx源码包
[root@Nginx01 ~]# cd /usr/local/src/
[root@Nginx01 src]# tar -zxvf nginx-1.27.5.tar.gz
(2)、编译配置Nginx安装参数
Nginx的功能是以模块方式存在的,用户可以根据实际情况选择编译或者不编译指定的功能模块。绝大部分功能模块是默认编译状态,少部分功能模块以及第三方开发的功能模块需要在编译配置参数时显示指定编译该功能模块。
如“--with-threads”表示编译线程池支持模块,“--without-http_gzip_module”表示不编译gzip方式压缩输出模块。
- 进入解压后的Nginx源码包路径
[root@Nginx01 ~]# cd /usr/local/src/nginx-1.27.5
- 执行编译配置参数命令
[root@Nginx01 nginx-1.27.5]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--with-threads \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_gunzip_module \
--with-http_perl_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-pcre \
--with-http_stub_status_module
编译配置参数详解:
--prefix:nginx安装目录
--user:运行nginx应用程序的用户
--group:运行nginx应用程序用户的用户组
--sbin-path:nginx程序可执行文件
--conf-path:nginx主配置文件
--error-log-path:nginx错误日志文件
--http-log-path:nginx访问日志文件
--pid-path:nginx进程号文件
--with-threads:启用线程池支持
--with-http_ssl_module:编译SSL模块
--with-http_v2_module:编译HTTP/2模块
--with-http_realip_module:编译HTTP的真实IP模块
--with-http_gzip_static_module:编译发送gz预压缩文件数据模块
--with-http_gunzip_module:编译gzip压缩兼容模块
--with-http_perl_module:编译Perl脚本支持模块
--with-stream:编译TCP/UDP代理模块
--with-stream_ssl_module:编译TCP/UDP代理SSL支持模块
--with-stream_realip_module:编译TCP/UDP代理真是IP模块
--with-pcre:编译pcre支持模块
--with-http_stub_status_module:编译运行状态模块
--add-module=PATH:添加第三方模块,PATH是第三方模块的路径
--add-dynamic-module=PATH:添加第三方动态模块,PATH是第三方动态模块的路径
- 验证编译配置是否成功
执行命令“echo $?”返回0说明编译配置成功。
[root@Nginx01 nginx-1.27.5]# echo $?
(3)、编译Nginx
- 执行编译
[root@Nginx01 nginx-1.27.5]# make
- 验证编译是否成功
执行命令“echo $?”返回0说明编译成功。
[root@Nginx01 nginx-1.27.5]# echo $?
(4)、安装Nginx
- 执行安装
[root@Nginx01 nginx-1.27.5]# make install
- 验证安装是否成功
执行命令“echo $?”返回0说明编译成功。
[root@Nginx01 nginx-1.27.5]# echo $?
- 查看Nginx安装目录
[root@Nginx01 nginx-1.27.5]# cd /usr/local/nginx/
以上说明Nginx应用程序安装成功!
(三)、启动Nginx应用程序
- 执行Nginx应用程序启动命令
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx
- 查看Nginx应用程序端口
[root@Nginx01 ~]# netstat -tnlp
- 查看Nginx应用程序进程
[root@Nginx01 ~]# ps -ef | grep -v "grep" | grep nginx --color
- 浏览器访问验证
在浏览器中访问Nginx应用程序地址:http://192.168.110.131:80/
以上说明Nginx应用程序安装部署成功!
(四)、常用命令
1、启动Nginx服务
- 启动Nginx服务
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx
[root@Nginx01 ~]# netstat -tnlp
- 指定配置文件启动Nginx服务
此处指定使用/usr/local/nginx/conf/nginx.conf配置文件启动Nginx服务
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@Nginx01 ~]# netstat -tnlp
2、停止Nginx服务
- 快速停止Nginx服务
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@Nginx01 ~]# netstat -tnlp
- 完整有序地停止Nginx服务
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -s quit
[root@Nginx01 ~]# netstat -tnlp
3、验证Nginx服务配置文件是否正确
验证当前Nginx服务配置文件是否正确
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -t
验证当前Nginx服务配置文件是否正确且只输出错误信息
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -t -q
- 验证指定的Nginx服务配置文件是否正确
此处指定验证/usr/local/nginx/conf/nginx.conf配置文件是否正确
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
4、热加载配置文件
Nginx服务配置文件经过调整修改后,执行如下命令即可热加载修改后的配置文件,从而避免重启Nginx服务导致服务中断。
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -s reload
5、重新打开日志文件
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -s reopen
6、显示Nginx服务版本信息及编译配置参数
- 显示Nginx服务版本信息
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -v
- 显示Nginx服务版本信息及编译配置参数
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -V
7、查看Nginx服务命令帮助信息
[root@Nginx01 ~]# /usr/local/nginx/sbin/nginx -h
三、Nginx注册系统服务(可选)
CentOS系统中使用systemd进行系统和服务的管理,可以根据需要将相关的服务进程配置成守护进程,并通过systemctl命令对守护进程进行监测和控制。
为了方便Nginx应用程序的维护和管理,可以把Nginx应用程序注册成系统服务,由systemd进行服务管理。
(一)、创建nginx.service文件
创建nginx.service文件,通过systemd来管理Nginx服务。
[root@Nginx01 ~]# cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=The Nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecReload=/usr/local/nginx/sbin/nginx -t -q
ExecReload=/usr/local/nginx/sbin/nginx -s reload[Install]
WantedBy=multi-user.target
EOF
nginx.service文件详解如下:
[Unit] #记录service文件的通用信息
Description=The Nginx HTTP and reverse proxy server #Nginx服务描述信息
After=network.target remote-fs.target nss-lookup.target #Nginx服务启动依赖,在指定服务之后启动[Service] #记录service文件的service信息
Type=forking #标准UNIX Daemon使用的启动方式
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q #Nginx服务启动前执行配置文件检测
ExecStart=/usr/local/nginx/sbin/nginx #启动Nginx服务
ExecStop=/usr/local/nginx/sbin/nginx -s stop #关闭Nginx服务
ExecReload=/usr/local/nginx/sbin/nginx -t -q #Nginx服务重载配置文件前执行检测
ExecReload=/usr/local/nginx/sbin/nginx -s reload #Nginx服务配置文件重载[Install] #记录service文件的安装信息
WantedBy=multi-user.target #多用户环境下启用
(二)、注册Nginx服务并设置开机自动启动Nginx服务
[root@Nginx01 ~]# systemctl daemon-reload && systemctl enable nginx
(三)、启动Nginx服务
- 启动Nginx服务
[root@Nginx01 ~]# systemctl start nginx
- 查看Nginx服务端口是否启动
[root@Nginx01 ~]# netstat -tnlp
- 查看Nginx服务进程是否启动
[root@Nginx01 ~]# ps -ef | grep -v "grep" | grep nginx --color
- 查看Nginx服务状态信息
[root@Nginx01 ~]# systemctl status nginx
由上可见,Nginx服务已经成功启动。
(四)、关闭Nginx服务
- 关闭Nginx服务
[root@Nginx01 ~]# systemctl stop nginx
- 查看Nginx服务端口是否关闭
[root@Nginx01 ~]# netstat -tnlp
- 查看Nginx服务进程是否关闭
[root@Nginx01 ~]# ps -ef | grep -v "grep" | grep nginx --color
- 查看Nginx服务状态信息
[root@Nginx01 ~]# systemctl status nginx
由上可见,Nginx服务已经成功关闭。
(五)、热加载Nginx服务配置文件
Nginx服务配置文件经过调整修改后,执行如下命令即可热加载修改后的配置文件,从而避免重启Nginx服务导致服务中断。
- 热加载Nginx服务配置文件
[root@Nginx01 ~]# systemctl reload nginx
- 查看Nginx服务状态信息
[root@Nginx01 ~]# systemctl status nginx













































1326

被折叠的 条评论
为什么被折叠?



