Nginx 介绍
Nginx简介
Nginx (发音同 engine x)是一款基于异步框架的轻量级/高性能的 Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3) 代理服务器,并在一个 BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoev (伊戈尔·赛索耶夫)所开发,最初供俄国大型网站 Rambler.ru 及搜寻引擎 Rambler 使用。
优点:
- 高并发量:基于 epoll/kqueue 模型开发,支持高并发量,官方说其支持高达 5w 并发连接数的响应
- 内存消耗少:善于处理静态文件,相较于其他web(比如:apache),占用更少的内存及资源
- 简单稳定:配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定
- 模块化程度高:功能模块插件化设计,可以自由配置相应的功能。
- 支持Rwrite重写规则:能够根据域名、URL等请求关键点,实现定制化的高质量分发。
- 低成本:Nginx的负载均衡功能很强大而且免费开源,相较于几十万的硬件负载均衡器成本相当低。
- 支持多系统:Nginx代码完全用C语言从头写成,可以在各系统上编译并使用。
缺点:
- 动态处理差:nginx 善于处理静态文件,但是处理动态页面相较于 Apache 之类重量级的 web 软件能力稍欠缺。
- rewrite 弱:虽然 nginx 支持 rewrite 功能多,但是相较于 Apache 之类重量级的 web 软件能力稍欠缺。
版本区别
常用版本分为四大阵营
Nginx 开源版
Nginx 开源版是官方维护得一个免费版本,也是目前使用最多的版本。
Nginx 自推出以来,一直专注于低资源消耗、高稳定、高性能的并发处理能力,除了提供 Web 服务器的功能外,还实现了访问代理、负载均衡、内容缓存、访问安全及带宽控制等功能。其基于模块化的代码架构及可与其他开发语言(如 Perl、JavaScript 和 Lua)有效集成的可编程特性,使其具有强大的扩展能力。
Nginx plus 商业版
Nginx Plus 是 Nginx 官方推出的商业版本,在开源版本的基础上增加了使用户对 Nginx 的管理和监控更轻松的功能。其代码在单独的私有代码库中维护。它始终基于最新版本的 Nginx 开源版本主线分支,并包含一些封闭源代码特性和功能。因此,除了开源版本中提供的功能外,Nginx Plus 还具有独有的企业级功能,包括实时活动监视数据、通过 API 配置上游服务器负载平衡和主动健康检查等。
Tengine
Tengine 是由淘宝网技术团队发起的 Nginx 二次开发项目,是在开源版 Nginx 及诸多第三方模块的基础上,针对淘宝网的高并发需求进行的二次开发。其中添加了很多针对互联网网站中使用 Nginx 应对高并发负载、安全及维护等的功能和特性。
openresty
OpenResty 是基于 Nginx 开源版本的扩展版本,它利用 Nginx 的模块特性,使 Nginx 支持 Lua 语言的脚本编程,鉴于 Lua 本身嵌入应用程序中增强应用程序扩展和定制功能的设计初衷,开源版本 Nginx 的可编程性得到大大增强。
ubuntu 安装 Nginx
默认安装
ubuntu 系统默认内置的了 nginx,可以直接使用下面的命令安装 Nginx:
ubuntu@ubuntu$ sudo apt install nginx
安装好了之后目录如下
ubuntu@ubuntu:~$ tree /etc/nginx/
/etc/nginx/
├── conf.d
├── fastcgi.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── modules-available
├── modules-enabled
│ ├── 50-mod-http-geoip2.conf -> /usr/share/nginx/modules-available/mod-http-geoip2.conf
│ ├── 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf
│ ├── 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf
│ ├── 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf
│ ├── 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf
│ └── 70-mod-stream-geoip2.conf -> /usr/share/nginx/modules-available/mod-stream-geoip2.conf
├── nginx.conf
├── proxy_params
├── scgi_params
├── sites-available
│ └── default
├── sites-enabled
│ └── default -> /etc/nginx/sites-available/default
├── snippets
│ ├── fastcgi-php.conf
│ └── snakeoil.conf
├── uwsgi_params
└── win-utf
nginx.conf
是整个项目的配置文件sites-enabled
里面存放每个站点的配置文件
然后可以使用以下指令进行操作
ubuntu@ubuntu:~$ sudo service nginx
configtest force-reload reload restart rotate
start status stop upgrade
编译安装
0、前期准备
更新系统软件包列表:
sudo apt update
安装编译 Nginx 所需的软件包:
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev libssl-dev
- build-essential: 该包含一些必要的软件包,如编译器和make工具等,用于编译安装Nginx;
- libpcre3: PCRE是Perl兼容正则表达式库,Nginx中默认启用该模块;
- libpcre3-dev: PCRE开发库,用于编译Nginx PCRE模块;
- zlib1g-dev: Zlib库提供了压缩和解压缩数据的函数,该库被 Nginx 使用,并且默认启用 gzip 模块;
- libssl-dev: SSL(Secure Sockets Layer)提供了安全的通信渠道,该模块使Nginx能够支持HTTPS协议。
环境准备:
先安装准备环境
sudo apt install libgd-dev
1、下载 nginx 源码包并解压
nginx下载地址:http://nginx.org/en/download.html
下载:
wget http://nginx.org/download/nginx-1.21.3.tar.gz
解压:
tar xvzf nginx-1.21.3.tar.gz
配置编译参数:
cd nginx-1.21.3
sudo ./configure --prefix=/usr/local/nginx --with-http_ssl_module
–prefix 参数指定 nginx 安装目录,–with-http_ssl_module 参数启用 https 支持。
2、编译
提示
若原来安装了 Nginx 可以参考原编译参数,安装新 Nginx 前务必将老版本 Nginx 删除干净。
$ nginx -V # 查看原编译参数
$ sudo systemctl stop nginx
$ sudo apt remove --purge nginx* # 卸载 apt 安装的 Nginx
编译安装 Nginx
sudo make
sudo make install
启动 nginx:
/usr/local/nginx/sbin/nginx
验证 nginx 是否成功安装
在浏览器中输入服务器IP地址或者域名,如果能够访问到 nginx 的欢迎页面,说明 nginx 已经成功安装。
注意:如果有防火墙或安全组等安全设备,需要对 nginx 开放相应的端口,比如 80 端口。
查看 nginx 进程:
ps -ef | grep nginx
配置软链接
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
开机启动
在 Ubuntu 上配置 Nginx 开机启动可以使用 systemd 服务来实现。以下是具体的步骤
1、创建Nginx服务文件
使用以下命令创建一个 Nginx 的 systemd 服务文件,文件名为 nginx.service :
sudo nano /etc/systemd/system/nginx.service
在编辑器中输入以下内容:
[Unit]
Description=Nginx Web Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意,需要根据实际情况修改 PIDFile 和 ExecStartPre、ExecStart、ExecReload、ExecStop 的路径。
2、重新加载 systemd 配置
使用以下命令重新加载 systemd 配置文件,让新的服务文件生效:
sudo systemctl daemon-reload
3、开启 Nginx 服务自启动
sudo systemctl enable nginx
4、现在可以使用 systemd 命令来启动、停止和重启 Nginx 服务:
- 启动 Nginx 服务:
sudo systemctl start nginx
- 停止 Nginx 服务:
sudo systemctl stop nginx
- 重启 Nginx 服务:
sudo systemctl restart nginx
- 查看 Nginx 服务状态:
sudo systemctl status nginx
服务相关命令
ubuntu@ubuntu:~$ sudo service nginx
configtest force-reload reload restart rotate
start status stop upgrade
nginx 服务相关命令
$ nginx -c /etc/nginx/nginx.conf
# -c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。
# 例如:nginx -t -c /usr/local/nginx/conf/nginx.conf 判断配置文件是否正确
$ nginx -t
# -t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
$ nginx -v
# -v 显示 nginx 的版本。
$ nginx -V
# -V 显示 nginx 的版本,编译器版本和配置参数。
$ nginx -s stop/quit
# stop 会立即停止服务,这种方法比较强硬,无论进程是否在工作,都直接停止进程。
# quit 较 stop 相比就比较温和一些了,需要进程完成当前工作后再停止。
$ nginx -s reload
# reload 会重新加载配置文件,Nginx服务不会中断。而且 reload 时会测试 conf 语法等,
# 如果出错会 rollback 用上一次正确配置文件保持正常运行。
移除相关命令:
查看和 nginx 相关软件
dpkg --get-selections | grep nginx
移除 nginx,包括相关文件
apt --purge remove nginx
apt --purge remove nginx-common
apt --purge remove nginx-core
附录
参考文章: