Nginx从入门到精通之CentOS7下源代码编译安装Nginx 1.22.0(最新稳定版)

前言

上篇介绍了一下Nginx的市场占比以及Nginx具备的功能,包括Nginx能在那些操作系统运行,因为在生产环境中,Nginx的各使用场景不同,所以尽可能在生产环境中采用源代码编译的方式安装,那么本篇主要就讲解Nginx在CentOS7.6 1810下采用源代码编译的方式安装部署。

首先感谢 华为云 提供以下实验环境

环境准备
操作系统:CentOS Linux release 7.6.1810
Nginx版本:Nginx-1.22.0 (最新稳定版)

准备工作

#关闭防火墙
[root@ecs-ec31-0002 ~]# systemctl stop firewalld
[root@ecs-ec31-0002 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
#关闭selinux
#临时关闭selinux,重启系统后还会开启
[root@ecs-ec31-0002 ~]# setenforce 0
setenforce: SELinux is disabled
#永久关闭selinux,编辑selinux配置文件,改成SELINUX=disabled
[root@ecs-ec31-0002 ~]# vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

创建Nginx用户及用户组

#创建Nginx用户不允许登录并加入组
[root@ecs-ec31-0002 ~]# useradd -M -s /sbin/nologin nginx

安装支持软件

Nginx的配置及运行需要pcre、zlib等软件包的支持,因此因预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。

[root@ecs-88e3-0001 ~]# yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel

创建运行用户及组

Nginx服务程序默认以nobody身份运行,一般生产环境中建议创建专门的用户,以便更准确的控制其访问权限,增加灵活性、降低安全风险。下面命令将创建一个名为nginx的用户,不建立宿主目录同时禁止登录到Shell环境。

[root@ecs-88e3-0001 ~]# useradd -M -s /sbin/nologin nginx

编译安装Nginx

通常编译安装可自定义程序的安装路径以及各个扩展模块,下面实例将安装目录设置为/usr/local/nginx 运行用户和组均设置为nginx,生产环境中一般会使用到ssl,我们也将开启nginx ssl模块。另外Nginx支持众多模块,后续我们将持续更新文章讲解,也可以通过./configure --help 查看更多配置方式。

#通过wget下载Nginx-1.22.0最新稳定源代码包
[root@ecs-88e3-0001 ~]# wget http://nginx.org/download/nginx-1.22.0.tar.gz
[root@ecs-88e3-0001 ~]# ls -lh
total 1.1M
-rw-r--r-- 1 root root 1.1M May 24 22:29 nginx-1.22.0.tar.gz
#源代码包解压
[root@ecs-88e3-0001 ~]# tar zxvf nginx-1.22.0.tar.gz
[root@ecs-88e3-0001 ~]# cd nginx-1.22.0
[root@ecs-88e3-0001 nginx-1.22.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
[root@ecs-88e3-0001 nginx-1.22.0]# make && make install

为了时平时使用Nginx的运行方式更加方便,一般为Nginx主程序创建一个软链接,以便平时管理时直接运行nginx命令就可以调用Nginx的主程序。

[root@ecs-88e3-0001 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@ecs-88e3-0001 ~]# ls -lh /usr/local/sbin/nginx 
lrwxrwxrwx 1 root root 27 Sep  8 21:04 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx

到此我们的Nginx就编译安装完成了。
我们可以通过使用Nginx的运行控制来测试的配置文件是否正确,配置文件nginx.conf默认位于安装路径下conf/目录中,我们安装在/usr/local/nginx/下那么配置文件就在/usr/local/nginx/conf/nginx.conf,若要检查位于其他位置的配置文件可以通过nginx -c 配置文件路径 -t即可。

[root@ecs-88e3-0001 ~]# 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
#若需检查非默认路径的配置文件通过-c命令指定路径即可
[root@ecs-88e3-0001 ~]# nginx -c /usr/local/nginx/conf/nginx.conf -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

通过nginx运行控制检查我们配置文件无问题后我们来启动nginx,因为我们前面做过nginx的软链接,我们可以在任意路径下直接使用nginx来启动nginx服务器。需要注意的是,nginx默认的端口是80,若服务器中已安装httpd或其他web服务软件,应采取修改端口或停用来避免端口冲突。

[root@ecs-88e3-0001 ~]# nginx

Nginx启动成功后我们可以通过检查nginx程序的监听状态以及进程查询或者通过浏览器访问web服务来判断Nginx服务是否正常运行,Linux下也可通过使用curl命令来检查。

#通过监听端口来判断Nginx程序是否运行
[root@ecs-88e3-0001 ~]# netstat -anpt |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      23559/nginx: master
#通过ps命令查询进程判断Nginx程序是否运行
[root@ecs-88e3-0001 ~]# ps -ef|grep nginx
root     23559     1  0 11:14 ?        00:00:00 nginx: master process nginx
nginx    23560 23559  0 11:14 ?        00:00:00 nginx: worker process
root     23608  8047  0 11:18 pts/0    00:00:00 grep --color=auto nginx
#通过curl命令判断Nginx程序是否运行,出现html代码表示Nginx程序运行成功
[root@ecs-88e3-0001 ~]# curl localhost
<title>Welcome to nginx!</title>

停止Nginx

通过使用nginx -s信号向nginx主程序发送信号来操作nginx的重新启动、重新加载、停止、优雅退出等

#快速关闭
[root@ecs-88e3-0001 ~]# nginx -s stop
[root@ecs-88e3-0001 ~]# netstat -anpt |grep nginx
#优雅关闭
[root@ecs-88e3-0001 ~]# nginx -s quit
[root@ecs-88e3-0001 ~]# netstat -anpt |grep nginx
#重新加载配置文件
[root@ecs-88e3-0001 ~]# nginx -s reload
[root@ecs-88e3-0001 ~]# netstat -anpt |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      23768/nginx: master 
#重新生成日志文件(一般用于日志分割,后续专门出一篇文章讲解)
[root@ecs-88e3-0001 ~]# nginx -s reopen
[root@ecs-88e3-0001 ~]# netstat -anpt |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      23782/nginx: master 
#日志分割正常操作流程
#首先mv原来的日志文件,然后发送reopen信号
[root@ecs-88e3-0001 logs]# ls
access.log  error.log  nginx.pid
[root@ecs-88e3-0001 logs]# mv access.log access.`date +%Y-%m-%d-%H:%M:%S`.log
[root@ecs-88e3-0001 logs]# nginx -s reopen
[root@ecs-88e3-0001 logs]# ls
access.2022-09-08-11:39:58.log  access.log  error.log  nginx.pid

以上就是本次源代码编译的方式安装Nginx,通过本章将帮助你完成Nginx的安装,提供静态页面的服务,下一章将讲解Nginx的各个扩展模块。

刚关注本博客【Nginx从入门到精通】文章的小伙伴们可以看一下之前的文章
Nginx从入门到精通之Nginx介绍

上一篇 下一篇