1、简介
Nginx 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx 使用了事件驱动和异步非阻塞的处理方式,基于单线程模型和事件循环来处理连接和请求。它的工作原理包括以下几个关键步骤:
🔥 接收请求:Nginx 接收来自客户端的 HTTP 请求。
🔥 选择模块处理:根据配置选择相应的模块来处理请求,如静态文件模块、反向代理模块等。
🔥 处理请求:Nginx 使用非阻塞 I/O 和事件驱动机制处理请求,包括读取请求、处理请求和返回响应。
🔥 响应请求:Nginx 生成响应并将其发送回客户端。

2、优缺点
Nginx 是一款流行的高性能 Web 服务器和反向代理服务器,具有许多优点和适用场景,但也存在一些局限性和缺点。下面将详细列举 Nginx 的优点:
2.1 优点
🔥 高性能和高并发处理能力:
Nginx 使用异步非阻塞的事件驱动架构,能够高效地处理大量并发连接和请求,适用于高流量的网站和应用。
🔥 低系统资源消耗:
Nginx 的设计目标是高性能和低消耗,占用的系统资源较少,内存和 CPU 使用效率高,能够在资源受限的环境下运行良好。
🔥 模块化和灵活的配置:
Nginx 支持丰富的模块化功能,可以通过加载不同的模块扩展其功能,提供灵活的配置选项,可以根据需求定制和优化配置。
🔥 负载均衡和反向代理:
Nginx 内置了负载均衡和反向代理功能,能够将请求分发到多台后端服务器上,提高系统的可用性、可扩展性和性能。
🔥 静态资源服务和缓存:
Nginx 可以高效地提供静态文件服务,支持 gzip 压缩和 HTTP 缓存,有效降低网络传输成本和提升页面加载速度。
🔥 SSL/TLS 支持:
Nginx 提供了强大的 SSL/TLS 加密支持,能够保护数据传输的安全性,支持配置 HTTPS 访问和证书管理。
2.2 缺点
🔥 不支持动态内容处理:
Nginx 主要用于静态文件服务和反向代理,对于动态内容的处理能力相对有限,通常需要配合后端应用服务器(如 PHP-FPM、Node.js)来处理动态请求。
🔥 复杂的配置语法:
对于初学者来说,Nginx 的配置语法相对复杂,需要一定的学习成本和经验来进行有效的配置和优化。
🔥 缺乏完整的管理和监控工具:
Nginx 自身没有提供完整的管理和监控工具,需要借助第三方工具或结合其他系统来进行管理和监控。
3、安装
拉取docker容器最新的Nginx 版本:
docker pull nginx
创建一个测试的实例,使用nginx镜像来创建nginx容器实例:
docker run --name nginx-test -p 80:80 -d nginx
run 创建容器实例
-- name 容器命名
-v 映射目录
-d 设置容器后台运行
-p 本机端口映射 将容器的80端口映射到本机的80端口
创建本机映射目录:
mkdir -p /shop/nginx/www /shop/nginx/logs /shop/nginx/conf
拷贝当前测试实例配置
docker ps -a

拷贝到conf目录下
docker cp 54b0d1bbd107:/etc/nginx/nginx.conf /shop/nginx/conf
停止并删除当前测试实例:
docker stop nginx-test
docker rm 54b0d1bbd107
创建新的实例,并将当前文件映射到容器外面。
docker run -d -p 80:80 --name nginx-web
-v /shop/nginx/www:/usr/share/nginx/html
-v /shop/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /shop/nginx/logs:/var/log/nginx
nginx
在当前www目录下创建一个index.html,能顺利访问就代表已经安装成功:

4、常用模块
以下是一些常见的 Nginx 模块以及它们的使用样例:
4.1 ngx_http_proxy_module(反向代理模块)
用于将客户端的请求转发给后端的应用服务器,实现反向代理和负载均衡。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
4.2 ngx_http_rewrite_module(重写模块)
用于根据请求的 URL 或其他条件重定向请求:
server {
listen 80;
server_name old-domain.com;
location / {
rewrite ^/(.*)$ http://new-domain.com/$1 permanent;
}
}
4.3 ngx_http_ssl_module(SSL 模块)
用于配置 Nginx 支持 HTTPS 协议和 SSL/TLS 加密。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
4.4 ngx_http_gzip_module(Gzip 模块)
用于开启 Gzip 压缩,减小传输内容的大小,提高网络传输效率。
http {
gzip on;
gzip_types text/plain text/css application/json;
}
4.5 ngx_http_geoip_module(GeoIP 模块)
用于基于客户端 IP 地址实现地理位置定位。
http {
geoip_country /path/to/GeoIP.dat;
server {
location / {
if ($geoip_country_code = CN) {
rewrite ^ https://cn.example.com$request_uri? permanent;
}
}
}
}
4.6 ngx_http_upstream_module 模块
Nginx 提供了多种负载均衡模块,用于将流量分发到多个后端服务器。常见的负载均衡模块包括:
🔥 ngx_http_upstream_module:用于 HTTP 和 HTTPS 请求的负载均衡。
🔥 ngx_stream_core_module:用于 TCP 和 UDP 流量的负载均衡。
这些模块可以通过配置文件中的 upstream 块来定义后端服务器池,然后在 location 配置中使用负载均衡方式。下面是一个简单的 HTTP 负载均衡示例,使用 ngx_http_upstream_module 模块:
http {
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
5、使用场景
Nginx 是一款流行的高性能 Web 服务器和反向代理服务器,具有许多适用场景,下面将详细列举 Nginx 主要的使用场景。
🔥 Web 服务器:
Nginx 可以作为高性能的 Web 服务器,用于提供静态文件服务、处理静态页面和前端资源,以及负载均衡。
🔥 反向代理:
Nginx 可以作为反向代理服务器,将请求转发给后端的多台应用服务器,实现负载均衡、缓存和提高系统的稳定性和可用性。
🔥 负载均衡器:
Nginx 可以用于实现 HTTP、TCP 和 UDP 的负载均衡,将请求分发到多个后端服务器上,提高系统的性能和扩展性。
🔥 缓存服务器:
Nginx 可以用作缓存服务器,将静态内容缓存起来,减轻后端服务器的压力,提升网站的响应速度和性能。
🔥 SSL/TLS 终端:
Nginx 可以用作 SSL/TLS 终端,提供 HTTPS 访问,并提供强大的 SSL/TLS 加密功能,保护数据的安全传输。
🔥 反向代理 WebSocket:
Nginx 可以代理 WebSocket 连接,实现 WebSocket 的负载均衡和代理,用于实时通讯和数据推送场景。
6、总结
Nginx 是一款强大而灵活的 Web 服务器和反向代理服务器,具有高性能、模块化扩展和丰富的功能特性。本文介绍了 Nginx 的基本概念和工作原理,以及常见的 Nginx 模块及其使用样例。希望本文能帮助读者更深入地了解 Nginx ,并在实际应用中灵活运用 Nginx 的各种功能。