Nginx 的安装


# Nginx 的安装

# Windows 下安装

Windows 下的 Nginx 不能用于生产,一般用于开发目的或者尝鲜体验。

# 下载 Nginx

官方网站 (opens new window) 下载稳定版本。

以 nginx/Windows-1.24.0 为例,直接下载 nginx-1.24.0.zip,下载后解压即可。

# 启动 Nginx

有两种方法启动 Nginx:

  • 直接双击 nginx.exe,双击后一个黑色的弹窗一闪而过。(不建议用这种方式)
  • 打开 cmd 命令窗口,切换到 Nginx 解压目录下,输入命令 nginx.exe,回车即可。

# 检查 Nginx 是否启动成功

直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功:

Welcome to nginx

(Welcome to nginx)

# 配置监听

Nginx 的配置文件是 conf/ 目录下的 nginx.conf,默认配置的 Nginx 监听的端口为 80,如果 80 端口被占用可以修改为未被占用的端口即可。

server {
    listen       80;
    server_name  localhost;
1
2
3

当我们修改了 Nginx 的配置文件 nginx.conf 时,不需要关闭 Nginx 后重新启动 Nginx,只需要执行命令 nginx -s reload 即可让改动生效。

# 关闭 Nginx

如果使用 cmd 命令窗口启动 Nginx,关闭 cmd 窗口是不能结束 Nginx 进程的,可使用两种方法关闭 Nginx:

  • 输入 Nginx 命令 nginx -s stop(快速停止 Nginx)或 nginx -s quit(完整有序的停止 Nginx)
  • 使用 taskkill:taskkill /f /t /im nginx.exe

taskkill 是用来终止进程的
/f 是强制终止
/t 终止指定的进程和任何由此启动的子进程
/im 根据名字指定要终止的进程

# Linux 下安装

有三种安装方式:

  • 编译安装:根据源码,根据实际业务需求,需要什么功能,编译时添加相应的模块。这种方式可以让 Nginx 最轻量化安装。
  • 自动化安装:配置好安装源,直接通过自动化安装工具安装。这种方式有可能会因为缺少相关依赖而安装失败。
    • CentOS:yum install nginx
    • Ubuntu:apt-get install nginx
  • 二进制安装:类似于绿色免安装版,把编译安装好的程序封装起来的一个包。

一般采用第一种编译安装的方式。

# 准备依赖环境

以下命令,如果你是 root 账户,直接执行即可,不是的话前面加 sudo 获取权限。

Ubuntu(16.04、18.04、20.04):

# 建议先执行下 apt-get 的更新
apt-get update

# 安装 gcc 和 g++ 依赖库
apt-get install build-essential
apt-get install libtool

# 安装 PCRE pcre-devel 依赖库
apt-get install libpcre3 libpcre3-dev

# 安装 zlib 依赖库(注意 lib 后面是阿拉伯数字 1,不是字母 l)
apt-get install zlib1g-dev

# 安装 OpenSSL 依赖库
apt-get install openssl
apt-get install libssl-dev  # 未安装该库会报 SSL modules require the OpenSSL library.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

CentOS(7.6):

# 安装 gcc 依赖库
yum install gcc-c++

# 安装 PCRE pcre-devel 依赖库
yum install -y pcre pcre-devel

# 安装 zlib 依赖库
yum install -y zlib zlib-devel

# 安装 OpenSSL 依赖库
yum install -y openssl openssl-devel
1
2
3
4
5
6
7
8
9
10
11

gcc 依赖库:安装 Nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装。
PCRE pcre-devel 依赖库:PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。Nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 Linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库,Nginx 也需要此库。
zlib 依赖库:lib 库提供了很多种压缩和解压缩的方式,Nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要安装 zlib 库。
OpenSSL 依赖库:OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。Nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要安装 OpenSSL 库。

# 准备源码包

以下命令,如果你是 root 账户,直接执行即可,不是的话前面加 sudo 获取权限。

官方网站 (opens new window) 下载稳定版本到任意目录(例如我一般会把软件放到 /opt),并解压。

# 下载
wget http://nginx.org/download/nginx-1.24.0.tar.gz

# 解压
tar -zxvf nginx-1.24.0.tar.gz
rm nginx-1.24.0.tar.gz
1
2
3
4
5
6

# 编译安装

以下命令,如果你是 root 账户,直接执行即可,不是的话前面加 sudo 获取权限。

首先进入 Nginx 安装包的解压目录:

cd nginx-1.24.0/
1

下面开始安装 Nginx:

# 预编译
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module

# 检查是否编译正确
echo $?  # 如果返回值是 0,就是执行成功;如果是返回值是 0 以外的值,就是失败。

# 编译
make

# 安装
make install
1
2
3
4
5
6
7
8
9
10
11

在 ./configure 命令后跟了一堆参数,它们分别表示:

  • --prefix:指定当前要安装的 Nginx 主程序目录
  • --sbin-path:安装完成后,使用 Nginx 的命令放在该目录下
  • --user:运行 Nginx 的用户
  • --group:运行 Nginx 的用户组
  • --with-(模块名):为 Nginx 添加的模块
  • 比较完整的配置项的含义请参见官方网站 (opens new window)

# 添加 Nginx 用户

一般我们会创建一个不能 ssh 登录的帐号,这类账号专门用于启动服务,只是让服务启动起来,但是不能登录系统(提升安全性)。

# 为 Nginx 创建一个不能 ssh 登陆的用户(预编译命令中指定的用户和用户组)
useradd nginx -s /sbin/nologin -M
1
2

在 useradd 命令后跟了两个参数,它们分别表示:

  • -s:表示指定用户所用的 shell,此处为 /sbin/nologin,表示不登录
  • -M:表示不创建用户主目录

# 验证安装成功

主要通过 Nginx 能否启动来验证是否安装成功,一般我会运行以下这些命令来测试。

# 查找安装路径
whereis nginx

# 查看 Nginx 的安装目录
cd /usr/local/nginx  # 预编译命令中指定的路径
ls

# 查看 Nginx 程序管理命令
cd /usr/local/nginx/sbin  # 预编译命令中指定的路径
ls

# 查看 Nginx 版本
/usr/local/nginx/sbin/nginx -v

# 启动 Nginx
/usr/local/nginx/sbin/nginx

# 查看 Nginx 进程
ps -ef | grep nginx

# 检查 Nginx 启动的端口(默认 0.0.0.0:80)
netstat -lntup | grep nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

接下来通过浏览器访问 Nginx(服务器 IP:80),出现以下页面说明启动成功:

Welcome to nginx

(Welcome to nginx)

如果不能访问,就要先看下服务器是不是开启了防火墙但又没开放端口(你可以选择不开防火墙,或者开完防火墙后记得开需要的端口)。

# 查看状态, 发现当前是 dead 状态, 即防火墙未开启
systemctl status firewalld

# 开启防火墙, 没有任何提示即开启成功
# 再次查看状态, 显示 running 即已开启了
systemctl start firewalld

# 开放默认端口号 80, 提示 success, 表示设置成功
firewall-cmd --permanent --zone=public --add-port=80/tcp

# 修改后需要重新加载配置才生效
firewall-cmd --reload;

# 查看已经开放的端口
firewall-cmd --permanent --list-port

# 关闭默认的端口号 80(如果需要的话, 执行这个命令就行了)
firewall-cmd --permanent --zone=public --remove-port=80/tcp

# 关闭防火墙(如果需要的话, 执行这个命令就行了)
systemctl stop firewalld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

如果使用的是阿里云等云厂家的服务器,80 端口是默认开启的,如果用了其它端口,则需要去云管理平台进行一些设置。大致的入口是:

进入云服务管理控制平台 ——> 进入云服务器 ——> 选择实例 ——> 管理。

  • 阿里云就找到:本实例安全组 --> 配置规则 --> 添加安全组规则。
  • 腾讯云就找到:防火墙 --> 管理规则 --> 添加规则。
  • 新增的规则就参考自带的 80 端口写就好了。

这里就是测一下能不能启停,生产环境要把 Nginx 加到系统自启。现在先关闭 Nginx。

# 关闭 Nginx
/usr/local/nginx/sbin/nginx -s stop
1
2

(完)