Skip to content

Nginx 介绍

中文文档: https://blog.redis.com.cn/doc/index.html

官方文档: http://nginx.org/en/docs/

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 开源版

http://nginx.org/

Nginx 开源版是官方维护得一个免费版本,也是目前使用最多的版本。

Nginx 自推出以来,一直专注于低资源消耗、高稳定、高性能的并发处理能力,除了提供 Web 服务器的功能外,还实现了访问代理、负载均衡、内容缓存、访问安全及带宽控制等功能。其基于模块化的代码架构及可与其他开发语言(如 Perl、JavaScript 和 Lua)有效集成的可编程特性,使其具有强大的扩展能力。

Nginx plus 商业版

https://www.nginx.com

Nginx Plus 是 Nginx 官方推出的商业版本,在开源版本的基础上增加了使用户对 Nginx 的管理和监控更轻松的功能。其代码在单独的私有代码库中维护。它始终基于最新版本的 Nginx 开源版本主线分支,并包含一些封闭源代码特性和功能。因此,除了开源版本中提供的功能外,Nginx Plus 还具有独有的企业级功能,包括实时活动监视数据、通过 API 配置上游服务器负载平衡和主动健康检查等。

Tengine

http://tengine.taobao.org/

Tengine 是由淘宝网技术团队发起的 Nginx 二次开发项目,是在开源版 Nginx 及诸多第三方模块的基础上,针对淘宝网的高并发需求进行的二次开发。其中添加了很多针对互联网网站中使用 Nginx 应对高并发负载、安全及维护等的功能和特性。

openresty

http://openresty.org/cn/

OpenResty 是基于 Nginx 开源版本的扩展版本,它利用 Nginx 的模块特性,使 Nginx 支持 Lua 语言的脚本编程,鉴于 Lua 本身嵌入应用程序中增强应用程序扩展和定制功能的设计初衷,开源版本 Nginx 的可编程性得到大大增强。

ubuntu 安装 Nginx

默认安装

ubuntu 系统默认内置的了 nginx,可以直接使用下面的命令安装 Nginx:

shell
ubuntu@ubuntu$ sudo apt install nginx

安装好了之后目录如下

shell
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 里面存放每个站点的配置文件

然后可以使用以下指令进行操作

shell
ubuntu@ubuntu:~$ sudo service nginx
configtest    force-reload  reload        restart       rotate        
start         status        stop          upgrade

编译安装

0、前期准备

更新系统软件包列表:

shell
sudo apt update

安装编译 Nginx 所需的软件包:

shell
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协议。

环境准备:

先安装准备环境

shell
sudo apt install libgd-dev

1、下载 nginx 源码包并解压

nginx下载地址:http://nginx.org/en/download.html

下载:

shell
wget http://nginx.org/download/nginx-1.21.3.tar.gz

解压:

shell
tar xvzf nginx-1.21.3.tar.gz

配置编译参数:

shell
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 删除干净。

shell
$ nginx -V # 查看原编译参数
$ sudo systemctl stop nginx
$ sudo apt remove --purge nginx* # 卸载 apt 安装的 Nginx

编译安装 Nginx

shell
sudo make
sudo make install

启动 nginx:

shell
/usr/local/nginx/sbin/nginx

验证 nginx 是否成功安装

在浏览器中输入服务器IP地址或者域名,如果能够访问到 nginx 的欢迎页面,说明 nginx 已经成功安装。

注意:如果有防火墙或安全组等安全设备,需要对 nginx 开放相应的端口,比如 80 端口。

查看 nginx 进程:

shell
ps -ef | grep nginx

配置软链接

shell
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

开机启动

在 Ubuntu 上配置 Nginx 开机启动可以使用 systemd 服务来实现。以下是具体的步骤

1、创建Nginx服务文件

使用以下命令创建一个 Nginx 的 systemd 服务文件,文件名为 nginx.service :

shell
sudo nano /etc/systemd/system/nginx.service

在编辑器中输入以下内容:

shell
[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 配置文件,让新的服务文件生效:

shell
sudo systemctl daemon-reload

3、开启 Nginx 服务自启动

shell
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

服务相关命令

shell
ubuntu@ubuntu:~$ sudo service nginx
configtest    force-reload  reload        restart       rotate        
start         status        stop          upgrade

nginx 服务相关命令

shell
$ 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 相关软件

shell
dpkg --get-selections | grep nginx

移除 nginx,包括相关文件

shell
apt --purge remove nginx

apt --purge remove nginx-common

apt --purge remove nginx-core

附录

参考文章: