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万远未封顶。
- 一般情况下,10000个非活跃的
- 热部署:
- master 进程与 worker 进程的分离设计,使得 Nginx 能够提供热部署功能,即在 7x24 小时不间断服务的前提下,升级 Nginx 的可执行文件。当然,它也支持不停止服务就更新配置项,更换日志文件等功能。
- 最自由的 BSD 许可协议:
- 这是 Nginx 可以快速发展的强大动力。BSD 许可协议不只是允许用户免费使用 Nginx ,它还允许用户在自己的项目中直接使用或修改 Nginx 源码,然后发布。
环境准备
编译安装时,需要自行安装:gcc
、pcre
、zlib
以及openssl
安装gcc编译器
首先,我们需要安装gcc编译器用于make
编译,Debian可以通过安装build-essential
来安装GCC编译器:
1 | apt install -y build-essential |
安装正则库
正则库很关键,我们使用Nginx,在配置文件内location
进行目录匹配,就需要正则库。
1 | apt install -y libpcre3 libpcre3-dev |
安装zlib库
Nginx编译过程和Http相应过程还需要gzip
格式的压缩,所以我们还需要安装zlib库
用于对HTTP包的内容做gzip格式的压缩。
1 | apt install -y zlib1g-dev |
安装OpenSSL库
最后,现在SSL协议很重要,Chrome等主流浏览器,都开始默认相应HTTPS了,所以OpenSSL编译环境也很重要。
下载Nginx源码
进入Nginx官网:nginx: download
我们可以看到稳定版本是1.26。
先进入/usr/local/src目录下
1 | cd /usr/local/src |
配置和编译
接下来就是make环节,编译时候的参数可以参考Nginx 编译参数 | Nginx 入门教程 (xuexb.github.io),和官方文档。
先创建一个用户’www’,我设置的是这个用户不能登录系统。
1 | useradd -s /sbin/nologin www |
下面是我编译时候借鉴的参数,直接复制到终端执行就可以了。
1 | ./configure \ |
如果没有问题,会提示信息:
没有报错信息就可以编译了:
1 | make |
安装
1 | make install |
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 |
1 | [Unit] |
启动一下:
1 | systemctl daemon-reload |
启动出现了报错,缺少/var/cache/nginx目录,添加上即可。
1 | mkdir /var/cache/nginx |
环境变量
在命令行输入nginx,会报错,说找不到命令,需要加入环境变量
1 | vim /etc/profile |
1 | source /etc/profile #使文件生效 |
具体使用
按我的方法编译,那么,需要注意。
/usr/local/nginx
:为Nginx编译安装的地址。/usr/local/nginx/nginx.conf
:Nginx默认配置文件。
示例
写一个HelloWorld
1 | cd /usr/local/nginx |
指向目录/www
:
1 | cd / |
重载Nginx配置:
1 | systemctl reload nginx |
最后,浏览器访问成功:
常见错误
端口被占用
systemctl start nginx,报错
1 | Job for nginx.service failed because the control process exited with error code. |
systemctl reload nginx,报错
1 | nginx.service is not active, cannot reload. |
接着我们使用systemctl status nginx.service来查看一下当前状态
发现处于inactive状态,说明启动失败了。
可以看到可能是因为端口号被占用了。
1 | netstat -ntlp | grep 80 #查看端口号是否被占用 |
发现端口被占用,使用kill来杀死进程后,重新启动即可。
卸载
1 | # 停止Nginx服务 |
参考
详解Debian系统上如何编译安装Nginx - 掘金 (juejin.cn)