Nginx安装和功能模块介绍
写在前面
本篇学习如何在CentOS7上安装Nginx,并在此基础上了解Nginx强大的功能模块、目录结构和文件等信息。
Nginx安装
这里以Centos7系统为例,介绍如何在Linux系统上安装Nginx。
第一步,安装相应的依赖。依次执行如下命令:
1 | yum -y install pcre-devel |
第二步,下载Nginx。使用如下命令:
1 | wget http://nginx.org/download/nginx-1.17.0.tar.gz |
第三步,解压下载的Nginx目录。使用如下所示的命令:
1 | tar -zxvf nginx-1.17.0.tar.gz |
之后并进入到该解压后的文件中,依次执行如下命令来编译和安装Nginx:
1 | ./configure |
之后使用whereis命令可以发现Nginx默认被安装在/usr/local/nginx
目录下。
第四步,启动Nginx。进入到/usr/local/nginx/sbin
目录下,执行./nginx
命令即可启动nginx。
第五步,检查Nginx是否成功启动并访问首页。开发者可以使用如下命令来检查Nginx是否成功启动:
1 | ps -aux|grep nginx |
之后打开浏览器,在地址栏中输入服务器的IP地址,即可访问到Nginx的首页:
这样Nginx就安装并启动成功了,如果修改了Nginx的配置,那么可以使用如下命令来重新加载Nginx:
1 | ./nginx -s reload |
注意,如果无法访问首页,请检查系统是否开启了防火墙。开发者可以使用如下命令来查看防火墙的状态和一些操作防火墙的命令:
1 | # 使用自带命令查看防火墙状态 |
第六步,设置全局Nginx命令。开发者可以使用vi ~/.bash_profile
命令来打开该文件,并在修改其中的PATH代码为如下所示信息:
1 | PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin/ |
之后保存并退出,使用source ~/.bash_profile
命令来让配置立即生效,这样后续就可以全局使用nginx命令,再也不用进入到/usr/local/nginx/sbin
目录了。举个例子,查看nginx的版本,此时就可以使用如下的命令:
1 | [root@envythink ~]# nginx -v |
其实上面那种启动Nginx还是比较复杂的,而且当系统重启后需要开发者进入到/usr/local/nginx/sbin
目录下手动启动Nginx,因此最好的办法就是将其添加到开机服务中,使其开机自启动。
Nginx设置开机自启动
通过nginx.service文件来开机启动
在/etc/systemd/system/
目录下新建一个名为nginx.service
的文件,注意名称必须以.service
结尾,文件中的内容为:
1 | [Unit] |
简单介绍一下上述参数的各个含义:
(1)[Unit]
是服务的说明;(2)Description描述服务;(3)After描述服务类别;(4)[Service]
服务运行参数的设置;(5)Type=forking
表示后台运行;(6)ExecStart为服务的具体运行命令;(7)ExecReload为服务的具体重启命令;(8)ExecStop为服务的具体停止命令;(9)PrivateTmp=True
表示给服务分配独立的临时空间;(10)[Install]
是运行级别下服务安装的相关设置;(11)WantedBy
表示多用户,即系统运行级别为3。
请注意对于[Service]
中配置的ExecStart、ExecReload、ExecStop等参数都必须使用绝对路径。开发者可以使用find / -name nginx
命令来查询Nginx的位置。
完成上述配置之后,接下来就可以使用systemctl enable nginx.service
命令来设置Nginx为开机自启动。
当然还可以借助于systemctl这个Linux系统应用管理工具来对这里添加的Nginx服务进行管理,常用的命令如下:
1 | # 启动Nginx |
通过rc.local文件来开机启动
除了上面的配置nginx.service文件来设置开机启动外,还可以通过rc.local文件来实现。
使用vi /etc/rc.local
命令来打开该文件,然后在该文件内添加如下命令:
1 | /usr/local/nginx/sbin/nginx start |
如果开机后发现自启动脚本没有执行,那么需要确认这个rc.local文件是否具有可执行权限,默认情况下是没有可执行权限的。开发者想要修改rc.local文件的权限,可以使用如下的命令:
1 | chmod +x /etc/rc.d/rc.local |
请注意,这里的/etc/rc.local
是/etc/rc.d/rc.local
文件的软连接,因此需要赋予权限给源文件:
1 | [root@envythink ~]# ls -l /etc/rc.local |
之后重启再次验证,可以发现Nginx开机自启动成功。
尽管上述两种方式都可以设置Nginx的开机自启动,但是在实际工作中笔者更倾向于前者。
Nginx平滑升级
由于前面我们使用的是源码方式来安装Nginx1.17.0,接下来就介绍如何在此基础上进行平滑升级到1.18.0版本,依次使用如下命令进行升级:
1 | wget http://nginx.org/download/nginx-1.18.0.tar.gz |
考虑到后续版本回退的需要,这里将之前的版本进行备份:
1 | cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak |
接着就可以将新版本的Nginx二进制文件替换为已安装的Nginx二进制文件:
1 | cp /usr/local/nginx116/sbin/nginx /usr/local/nginx/sbin/nginx -rf |
之后进入到/usr/local/nginx/sbin
目录,使用如下命令验证是否安装成功:
1 | ./nginx -v |
可以看到页面输出nginx version: nginx/1.18.0
,这就说明已经升级成功了。但是还差最后一步,将Nginx旧的主进程进行停止。首先查看Nginx旧的主进程ID号,然后给它发送一个USR2信号,让新主进程和旧进程同时工作:
1 | kill -USR2 进程PID |
Nginx版本回滚
第一步,使用如下命令将原来的nginx执行脚本进行恢复:
1 | cp /usr/local/nginx/sbin/nginx.bak /usr/local/nginx/sbin/nginx -rf |
第二步,开发者使用使用如下命令来发送HUP信号来唤醒旧版本:
1 | kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin` |
第三步,关闭新版本的主进程和worker进程:
1 | kill -USR2 主进程PID |
第四步,进入到/usr/local/nginx/sbin
目录,使用如下命令验证是否安装成功:
1 | ./nginx -v |
可以看到页面输出nginx version: nginx/1.17.0
,这就说明Nginx版本回滚就已经成功了。
Nginx卸载
如果开发者是直接通过yum命令安装的Nginx,那么就可以直接使用yum remove nginx
命令进行移除。如果是通过上述编译方式进行安装,那么除了需要删除/usr/local/nginx
目录外,还需要删除nginx的开机自启动服务。
Nginx操作常用命令
前面说过,Nginx默认安装在/usr/local
目录下,且其启动程序存在于/usr/local/nginx/sbin
目录中,因此可以执行一些Nginx相关的命令,如下所示:
1 | # 向主进程发送信号,重新加载配置文件(热部署) |
Nginx功能模块介绍
Nginx之所以强大,关键在于它具有很多强大的模块,因此了解和使用这些模块对于提升自己灵活使用Nginx有着非常大的帮助。
Nginx功能模块分为两大类:“核心功能模块”和“标准的HTTP功能模块”。其中“核心功能模块”负责Nginx的全局应用,主要对应于主配置文件中的main区块和events区块,这里面有很多Nginx必须的全局配置参数;“标准的HTTP功能模块”,这些虽然不是Nginx软件必须的,但是很常用,因此默认情况下都会自动安装到Nginx软件中。
其实在企业生产环境中,配置、优化和调整都是根据这些模块的功能来修改相应的参数来实现的。下面列举一下Nginx中常用的HTTP功能模块:
常用的HTTP功能模块 | 模块说明 |
---|---|
ngx_http_core_module | 包括一些核心的http参数配置,对应Nginx配置文件的HTTP区块部分 |
ngx_http_access_module | 访问控制模块,用来控制网站用户对nginx的访问 |
ngx_http_gzip_module | 压缩模块,对nginx返回的数据进行压缩,属于优化性能模块 |
ngx_http_fastcgi_module | FastCGI模块,和动态应用相关的模块,例如:PHP |
ngx_http_proxy_module | proxy代理模块 |
ngx_http_upstaream_module | 负载均衡模块,可以实现网站的负载均衡功能及节点健康检查 |
ngx_http_rewrite_module | URL地址重写模块 |
ngx_http_limit_conn_module | 限制用户并发连接数及请求数模块 |
ngx_http_limit_req_module | 根据定义的key限制nginx的请求速率 |
ngx_http_log_module | 访问日志模块,以指定的格式记录nginx的客户端访问日志 |
ngx_http_auth_basic_module | Web认证模块,设置web用户通过账号,密码访问nginx |
ngx_http_ssl_module | ssl模块,用于加密http连接 |
ngx_http_stub_status_module | 记录nginx基本访问状态信息 |
Nginx目录结构
为了更好地学习Nginx,这里有必要对Nginx软件的目录和文件进行一个较为全面的了解,如下所示:
1 | # 如果提示tree命令找不到,可以使用yum -y install tree |
nginx.conf主配置文件
nginx.conf主配置文件非常重要,后期我们绝大部分的配置都在这个文件中进行。开发者可以使用egrep -v "#|^$" /usr/local/nginx/conf/nginx.conf
命令来去掉里面的注释,此时它的基本内容如下:
1 | worker_processes 1; |
关于这一部分的学习,会在后面有专门的文件进行介绍,这里就忽略。
fastcgi.conf配置文件
如果需要Nginx配合动态服务,如PHP等,那么Nginx还会使用到fastcgi相关的配置文件,这个配置是通过在nginx.conf主配置文件中嵌入include命令来实现的,不过前面默认使用了注释,因此不会生效。
fastcgi.conf配置文件中的初始内容如下所示:
1 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
除此之外,还有一个名为fastcgi_params的默认参数配置文件,其中的代码为:
1 | fastcgi_param QUERY_STRING $query_string; |
由于fastcgi在实际工作中用的不是很多,因此这里就没有添加中文注释。
好了,那么本篇关于如何在CentOS7上安装Nginx和Nginx功能模块、目录结构和文件的学习就到此为止,后续学习其他的知识。