Debian12安装Nginx

前言

​ 还是因为最近在做项目,部署前端项目会用到Nginx,所以来记录一下安装的过程,我的安装方式是编译安装

​ 我的设备是阿里云2核4G的云服务器,系统是DD之后的Debian12,远程连接工具是FinalShell。



简介

Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建,并于2004年首次公开发布。同名公司成立于2011年,以提供支持。

Nginx 是一款免费的开源软件,根据类 BSD 许可证的条款发布。一大部分Web服务器使用 Nginx ,通常作为负载均衡器。


特点

  • 更快:
    • 单次请求会得到更快的响应。
    • 在高并发环境下,Nginx 比其他 WEB 服务器有更快的响应。
  • 高扩展性:
    • Nginx 是基于模块化设计,由多个耦合度极低的模块组成,因此具有很高的扩展性。许多高流量的网站都倾向于开发符合自己业务特性的定制模块。
  • 高可靠性:
    • Nginx 的可靠性来自于其核心框架代码的优秀设计,模块设计的简单性。另外,官方提供的常用模块都非常稳定,每个 worker 进程相对独立,master 进程在一个 worker 进程出错时可以快速拉起新的 worker 子进程提供服务。
  • 低内存消耗:
    • 一般情况下,10000个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗 2.5MB 的内存,这是 Nginx 支持高并发连接的基础。
    • 单机支持10万以上的并发连接:理论上,Nginx 支持的并发连接上限取决于内存,10万远未封顶。
  • 热部署:
    • master 进程与 worker 进程的分离设计,使得 Nginx 能够提供热部署功能,即在 7x24 小时不间断服务的前提下,升级 Nginx 的可执行文件。当然,它也支持不停止服务就更新配置项,更换日志文件等功能。
  • 最自由的 BSD 许可协议:
    • 这是 Nginx 可以快速发展的强大动力。BSD 许可协议不只是允许用户免费使用 Nginx ,它还允许用户在自己的项目中直接使用或修改 Nginx 源码,然后发布。


环境准备

编译安装时,需要自行安装:gccpcrezlib以及openssl


安装gcc编译器

首先,我们需要安装gcc编译器用于make编译,Debian可以通过安装build-essential来安装GCC编译器:

1
2
3
apt install -y build-essential

apt show build-essential | grep Version #显示版本信息

image-20240514205043085


安装正则库

正则库很关键,我们使用Nginx,在配置文件内location进行目录匹配,就需要正则库。

1
apt install -y libpcre3 libpcre3-dev

image-20240514205554733


安装zlib库

Nginx编译过程和Http相应过程还需要gzip格式的压缩,所以我们还需要安装zlib库用于对HTTP包的内容做gzip格式的压缩。

1
apt install -y zlib1g-dev

image-20240514210102539


安装OpenSSL库

最后,现在SSL协议很重要,Chrome等主流浏览器,都开始默认相应HTTPS了,所以OpenSSL编译环境也很重要。

image-20240514213453449



下载Nginx源码

进入Nginx官网:nginx: download

image-20240514221108591

我们可以看到稳定版本是1.26。

先进入/usr/local/src目录下

1
2
3
4
5
6
7
cd /usr/local/src
# 下载源码
wget http://nginx.org/download/nginx-1.26.0.tar.gz
# 解压源码
tar -xf nginx-1.26.0.tar.gz
# 进入源代码内
cd nginx-1.26.0

image-20240515013303696



配置和编译

接下来就是make环节,编译时候的参数可以参考Nginx 编译参数 | Nginx 入门教程 (xuexb.github.io),和官方文档

先创建一个用户’www’,我设置的是这个用户不能登录系统。

1
useradd -s /sbin/nologin www

下面是我编译时候借鉴的参数,直接复制到终端执行就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module

image-20240515013825919

如果没有问题,会提示信息:

image-20240514224438415

没有报错信息就可以编译了:

1
make

image-20240515172237944



安装

1
make install

image-20240515014124128

image-20240515014237588


systemctl

我们使用systemctl对Nginx进行管理:

  • systemctl start nginx:启动Nginx服务。
  • systemctl reload nginx:Nginx配置重载。
  • systemctl stop nginx:停止Nginx服务。
  • systemctl daemon-reload:重新加载 systemd 管理的单元文件。

创建systemctl守护,管理Nginx:

1
vim /usr/lib/systemd/system/nginx.service

image-20240514233857228

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启动一下:

1
2
3
systemctl daemon-reload  
systemctl start nginx
systemctl status nginx.service

image-20240515014806055

启动出现了报错,缺少/var/cache/nginx目录,添加上即可。

1
2
3
mkdir /var/cache/nginx
systemctl start nginx
lsof -i:80 #显示当前系统中占用端口 80 的进程信息

image-20240515014949726


环境变量

在命令行输入nginx,会报错,说找不到命令,需要加入环境变量

image-20240515110617531

1
2
3
vim /etc/profile
# 按下shift+g将光标定位到最后一行,新增以下内容:
export PATH=$PATH:/usr/local/nginx/sbin

image-20240515112152620

1
2
source /etc/profile  #使文件生效
nginx #没有报错,环境变量配置完毕

image-20240515112701111



具体使用

按我的方法编译,那么,需要注意。

  • /usr/local/nginx:为Nginx编译安装的地址。
  • /usr/local/nginx/nginx.conf:Nginx默认配置文件。

示例

写一个HelloWorld

1
2
cd /usr/local/nginx
vim nginx.conf #编辑配置文件

指向目录/www

image-20240515004556664

1
2
3
4
cd /
mkdir /www
cd www
vim index.html

重载Nginx配置:

1
systemctl reload nginx

最后,浏览器访问成功:

image-20240515015130758



常见错误

端口被占用

systemctl start nginx,报错

1
2
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.

systemctl reload nginx,报错

1
nginx.service is not active, cannot reload.

image-20240515105242239

接着我们使用systemctl status nginx.service来查看一下当前状态

image-20240515105448102

发现处于inactive状态,说明启动失败了。

可以看到可能是因为端口号被占用了。

1
netstat -ntlp | grep 80        #查看端口号是否被占用

image-20240515105835781

发现端口被占用,使用kill来杀死进程后,重新启动即可。



卸载

1
2
3
4
5
6
7
8
# 停止Nginx服务
systemctl stop nginx
# 删除Nginx服务
rm -rf /usr/lib/systemd/system/nginx.service
# 重载配置
systemctl daemon-reload
# 删除Nginx编译文件
rm -rf nginx


参考

详解Debian系统上如何编译安装Nginx - 掘金 (juejin.cn)

Nginx 简介 | Nginx 入门教程 (xuexb.github.io)

使用systemctl reload nginx重启Nginx服务报错【Job for nginx.service invalid】_job for nginx.service invalid.-CSDN博客