网站设计时间,郑州网站建设公司服务公司,免费企业邮箱申请,wordpress 自适应主题 rclean文章目录 1. Nginx 基础概念1-1、什么是 Nginx1-2、Nginx 的工作原理1-3、Nginx 的核心特点1-4、Nginx 的常见应用场景1-5、Nginx 与 Apache 的区别1-6、 Nginx 配置的基本结构1-7、Nginx 常见指令 2. Nginx 配置基础2-1、Nginx 配置文件结构2-2、全局配置 (Global Block)2-3、… 文章目录 1. Nginx 基础概念1-1、什么是 Nginx1-2、Nginx 的工作原理1-3、Nginx 的核心特点1-4、Nginx 的常见应用场景1-5、Nginx 与 Apache 的区别1-6、 Nginx 配置的基本结构1-7、Nginx 常见指令 2. Nginx 配置基础2-1、Nginx 配置文件结构2-2、全局配置 (Global Block)2-3、HTTP 配置 (HTTP Block)2-4、Server 配置 (Server Block)2-5、Location 配置 (Location Block)2-6、配置反向代理2-7、配置负载均衡 3. Nginx 作为 Web 服务器3-1、Nginx Web 服务器基本概念**Web 服务器的作用****Nginx 的工作方式** 3-2、配置 Nginx 作为 Web 服务器**配置静态文件服务****配置动态请求例如 PHP****配置访问日志和错误日志****配置文件的热重载** 3-3、Nginx 配置优化**启用 Gzip 压缩****配置缓存****配置负载均衡**轮询Round Robin最少连接Least ConnectionsIP 哈希IP Hash总结 配置 SSL/TLS 加密 3-4、Nginx 作为 Web 服务器的优势备注什么是事件驱动 4. Nginx 反向代理4-1、反向代理的优势4-2、反向代理配置**配置负载均衡****配置负载均衡策略****配置 SSL 终结****配置缓存** 4-3、反向代理的常见用途**负载均衡****安全性****SSL/TLS 终结****缓存和加速** 4-4、Nginx 反向代理配置总结 5. Nginx 负载均衡**5-1、负载均衡的基本概念**5-2、Nginx 的负载均衡配置**基本的负载均衡配置****负载均衡策略****后端服务器的权重****健康检查与故障转移****加权负载均衡与健康检查Nginx Plus** 5-3、负载均衡示例5-4、总结 6. Nginx 安全与性能优化6-1、Nginx 安全优化6-2、Nginx 性能优化**配置工作进程数****静态文件缓存****代理缓存** 6-3、启用 Gzip 压缩6-4、配置适当的客户端请求大小6-5、使用异步 I/O6-6、调整 TCP 配置6-7、总结**安全优化要点****性能优化要点** 7. Nginx 与 PHP 结合7-1、Nginx 与 PHP 的结合原理7-2、配置 Nginx 与 PHP 的结合**编辑 PHP-FPM 配置文件** 7-3、配置 Nginx**编辑 Nginx 配置文件****关键配置项说明** 7-4、重启 Nginx 和 PHP-FPM7-5、测试 PHP 是否正常工作7-6、安全配置7-7、总结 8. Nginx 日志管理8-1、Nginx 日志的基本概念8-2、配置 Nginx 日志8-3、查看和分析 Nginx 日志8-4、总结 9. Nginx 高级功能9-1、Nginx 的高级功能概述9-2、负载均衡9-3、健康检查9-4、缓存机制注意proxy_cache 和 fastcgi_cache的区别9-4、WebSocket 支持9-5、SSL/TLS 加密9-6、限制请求和流量控制9-7、访问控制9-8、配置文件热更新9-9、动态模块支持9-10、异步处理与性能优化9-11、总结 10. Nginx 常见问题及排查10-1、Nginx 启动或重启失败10-2、Nginx 无法访问网站10-3、性能问题10-4、日志问题10-5、SSL/TLS 问题10-6、文件上传问题10-7、常见错误码及排查10-8、总结 1. Nginx 基础概念
Nginx发音为 “Engine-X”是一个高性能的 Web 服务器反向代理服务器负载均衡器以及 HTTP 和反向代理缓存系统。它最初由 Igor Sysoev 开发目标是提供高性能的 Web 服务能够处理高并发的连接。
1-1、什么是 Nginx
Nginx 是一个开源的 Web 服务器软件最初设计为一个高性能的 HTTP 服务器后来也被广泛用于反向代理、负载均衡、缓存和其他网络服务。
Web 服务器Nginx 最常用的角色是作为 Web 服务器它可以处理静态文件如 HTML、图片、CSS 和 JavaScript 等并能通过反向代理将动态请求转发给其他服务如 PHP、Node.js 等。反向代理服务器反向代理是将客户端请求转发到后端服务器并将响应返回给客户端。Nginx 可以作为反向代理服务器广泛用于负载均衡、请求路由等场景。负载均衡器Nginx 能够分配进入的请求到多个后端服务器如 Web 应用服务器从而实现负载均衡确保系统的高可用性和可扩展性。HTTP 缓存Nginx 能够缓存后端响应减少后端服务器的负载提高响应速度。
1-2、Nginx 的工作原理
Nginx 的工作原理基于事件驱动的架构能够处理大量的并发连接。与传统的进程/线程模型不同Nginx 采用异步、事件驱动模型确保能够高效地处理大量并发请求。
事件驱动模型Nginx 使用事件驱动模型在收到请求后它并不立即启动新的进程或线程而是将请求分配给 worker 进程来处理。worker 进程会在一个事件循环中处理请求这种方式避免了传统 Web 服务器的进程切换和上下文切换的性能开销。主进程master process和工作进程worker process主进程负责管理工作进程包括启动、停止和重新加载配置。工作进程每个工作进程处理来自客户端的请求。Nginx 使用多工作进程的设计以便可以并行处理多个请求提高并发性能。
1-3、Nginx 的核心特点
高性能Nginx 采用异步事件驱动模型能够高效处理成千上万的并发请求且每个请求只占用一个线程因此能够有效减少系统资源的消耗。轻量级Nginx 的内存占用和 CPU 消耗较少能够在资源有限的服务器上运行并能支持高并发的访问。反向代理和负载均衡Nginx 可以将请求转发到多个后端服务器支持多种负载均衡策略如轮询、最少连接等。灵活的配置Nginx 配置灵活可以根据需要进行调整如设置反向代理、缓存、SSL 配置等。高可用性Nginx 能够与多个后端服务器共同工作支持健康检查、自动故障转移等机制提高系统的可靠性。
1-4、Nginx 的常见应用场景
静态内容的服务Nginx 通常用于提供静态文件的服务例如 HTML 文件、CSS 文件、JavaScript 文件以及图片、音频和视频等。反向代理Nginx 被广泛用于反向代理其他应用服务器如将请求代理到 Node.js、PHP 或其他后端服务。负载均衡当有多个 Web 应用服务器时Nginx 可以作为负载均衡器将请求分发到后端服务器平衡负载并提高应用的可扩展性。API 网关Nginx 还可以作为 API 网关将请求路由到不同的服务和微服务架构中。SSL/TLS 加密Nginx 可以用于配置 HTTPS 连接对 Web 流量进行加密提高安全性。
1-5、Nginx 与 Apache 的区别
Nginx 和 Apache 都是最常用的 Web 服务器但它们的工作方式和适用场景有所不同。
性能差异Nginx 在高并发的场景下表现更加优越因为它基于事件驱动模型而 Apache 是基于多进程或多线程模型。在高并发的情况下Apache 会消耗更多的系统资源。配置复杂度Nginx 的配置文件语法简单、清晰而 Apache 的配置更为复杂。资源消耗Nginx 占用的内存和 CPU 比 Apache 更少这使得 Nginx 更适合处理大量并发请求。反向代理和负载均衡Nginx 天生支持反向代理和负载均衡而 Apache 则需要额外的模块支持。
1-6、 Nginx 配置的基本结构
Nginx 配置文件nginx.conf采用模块化配置结构通常包含以下几个部分
全局设置包括设置工作进程数、用户、日志路径等。HTTP 块配置 HTTP 服务的相关选项如静态文件处理、反向代理、缓存等。Server 块每个 Server 块对应一个虚拟主机的配置指定如何处理特定域名的请求。Location 块在 Server 块内Location 块用于定义如何处理特定路径的请求。
1-7、Nginx 常见指令
worker_processes设置工作进程数通常设为 CPU 核心数。worker_connections每个工作进程最多能处理的连接数。server_name配置服务器名称匹配域名请求。listen指定监听的端口。location定义请求路径的处理规则如 font stylecolor:#DF2A3F;/api//font、font stylecolor:#DF2A3F;/static//font。proxy_pass配置反向代理指定后端服务器的地址。access_log定义访问日志的存储路径。error_log定义错误日志的存储路径。
Nginx 是一个强大、灵活且高效的 Web 服务器适用于各种 Web 服务场景。它不仅能高效处理静态文件还能通过反向代理和负载均衡功能将请求分发到后端服务器提高系统的扩展性和可用性。
2. Nginx 配置基础
Nginx 配置文件nginx.conf采用层次化的模块化配置结构灵活且强大。
2-1、Nginx 配置文件结构
Nginx 配置文件一般位于 /etc/nginx/nginx.conf其中包含了全局配置、HTTP 配置以及 Server 配置等内容。配置文件的基本结构如下
# 全局配置
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;# HTTP 配置
http {include /etc/nginx/mime.types;default_type application/octet-stream;server {listen 80;server_name localhost;# 网站根目录和索引文件root /usr/share/nginx/html;index index.html index.htm;location / {try_files $uri $uri/ 404;}}
}配置文件主要分为4个区域
全局配置用于全局的 Nginx 配置。HTTP 配置用于配置 HTTP 服务和网络处理规则。Server 配置配置虚拟主机、域名和处理规则。Location 配置细化 Server 配置处理不同路径的请求。
2-2、全局配置 (Global Block)
全局配置部分用于定义 Nginx 进程的行为通常包含以下指令
user指定运行 Nginx 的用户和用户组。
user www-data;worker_processes指定 Nginx 启动的工作进程数通常设为 CPU 核心数。
worker_processes 1;error_log指定错误日志文件的路径。
error_log /var/log/nginx/error.log;pid指定存储 Nginx 进程 ID 的文件路径。
pid /var/run/nginx.pid;worker_connections设置每个工作进程的最大连接数。
worker_connections 1024;2-3、HTTP 配置 (HTTP Block)
HTTP 块是配置 HTTP 服务的地方包含了常见的 Web 服务器配置例如虚拟主机、代理、缓存等。http 块可以包含多个 server 块定义不同的虚拟主机。
常用的 HTTP 配置指令
include引入外部配置文件。
include /etc/nginx/mime.types;default_type指定默认的文件类型。
default_type application/octet-stream;server定义一个虚拟主机的配置。
server {listen 80;server_name example.com;root /var/www/html;
}server_name指定虚拟主机的域名或 IP。
server_name example.com;listen指定服务器监听的端口号。
listen 80;access_log指定访问日志文件的路径。
access_log指定访问日志文件的路径。root指定站点的根目录。
root /var/www/html;2-4、Server 配置 (Server Block)
Server 块是虚拟主机的配置用于处理不同域名、端口号的请求。每个 server 块可以包含多个 location 块用于处理不同路径的请求。
常见的 Server 配置指令
location用于匹配请求的 URL 路径可以用于配置静态文件、反向代理等。
location / {try_files $uri $uri/ 404;
}index定义默认的索引文件。
index index.html index.htm;try_files尝试访问多个文件或路径。
try_files $uri $uri/ /index.php?$query_string;proxy_pass设置反向代理将请求转发到后端服务器。
location /api/ {proxy_pass http://backend_server;
}rewrite重写请求的 URL 地址。
rewrite ^/old-url$ /new-url permanent;error_page自定义错误页面。
error_page 404 /404.html;2-5、Location 配置 (Location Block)
Location 块用于处理特定路径的请求通常用来进行重定向、反向代理、静态资源路径等配置。它可以嵌套在 server 块内。
常见的 Location 配置指令
精准匹配 表示精准匹配路径。
location /favicon.ico {log_not_found off;access_log off;
}前缀匹配不带任何符号表示匹配路径前缀。
location /images/ {root /var/www;
}正则匹配用 ~ 表示启用正则表达式匹配。
location ~ \.php$ {fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;
}通配符匹配用 * 表示匹配所有路径。
location / {try_files $uri $uri/ 404;
}内部重定向用 internal 标识表示只能从 Nginx 内部访问。
location /images/ {internal;
}2-6、配置反向代理
反向代理是将客户端请求转发到后端服务器。常用于负载均衡、API 网关等场景。
反向代理配置示例
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;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}proxy_pass指定后端服务器的地址。proxy_set_header传递请求头信息例如传递客户端 IP 地址等。
2-7、配置负载均衡
Nginx 支持多种负载均衡策略如轮询、最少连接、IP hash 等。
负载均衡配置示例
http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}}
}upstream定义一组后端服务器。proxy_pass将请求转发到 upstream 定义的服务器集群。
Nginx 配置的基本结构由全局配置、HTTP 配置、Server 配置和 Location 配置组成。通过灵活的配置文件语法Nginx 可以实现反向代理、负载均衡、静态资源服务、URL 重写等多种功能。掌握 Nginx 配置的基本概念和常用指令能够帮助开发者更好地部署和优化 Web 应用。
3. Nginx 作为 Web 服务器
NginxEngine-X是一个高性能的 Web 服务器、反向代理服务器和负载均衡器。作为 Web 服务器它的主要作用是处理和响应客户端的 HTTP 请求提供静态文件、处理动态请求或者将请求转发给应用服务器。
Nginx 因其高并发、低内存消耗、灵活的配置而广泛用于 Web 服务和反向代理。与传统的 Apache 服务器相比Nginx 更适用于高并发和高流量的场景。
3-1、Nginx Web 服务器基本概念
Web 服务器的作用
Web 服务器主要负责以下任务
接收请求监听客户端如浏览器发起的请求通常是 HTTP 请求。提供响应根据请求提供静态资源如 HTML、CSS、图片等或者将请求转发给动态处理程序如 PHP、Python。处理请求根据请求的 URL 或者路径查找对应的文件如果找到了文件则将其发送给客户端如果找不到文件则返回错误页面。
Nginx 的工作方式
Nginx 的核心特点是使用 事件驱动模型不同于传统的 Apache 服务器采用的多进程/线程模型。Nginx 使用少量的工作进程和异步非阻塞 I/O 处理请求这使得它能高效地处理大量并发连接。
3-2、配置 Nginx 作为 Web 服务器
Nginx 中配置 Web 服务的核心步骤
配置虚拟主机
虚拟主机Virtual Host是指在同一个物理服务器上针对不同的域名或 IP 地址配置不同的 Web 服务。Nginx 使用 server 块来配置虚拟主机。
例如配置一个基本的虚拟主机来服务 example.com 的 HTTP 请求
server {listen 80; # 监听 80 端口server_name example.com; # 配置域名root /var/www/html; # 网站根目录index index.html index.htm; # 默认首页文件# 处理请求location / {try_files $uri $uri/ 404; # 如果请求的文件不存在返回 404 错误}
}Nginx 会监听 example.com 域名的请求并从 /var/www/html 目录提供静态文件。
配置静态文件服务
Nginx 非常适合提供静态文件服务如 HTML、CSS、图片、视频等。可以通过 location 块配置不同路径的静态文件访问规则
server {listen 80;server_name example.com;root /var/www/html;index index.html;# 配置静态文件路径location /images/ {root /var/www;}location /css/ {root /var/www;}
}配置动态请求例如 PHP
Nginx 本身不直接处理 PHP、Python 等动态请求但是它可以通过配置反向代理将请求转发给应用服务器如 PHP-FPM。
server {listen 80;server_name example.com;root /var/www/html;index index.php index.html;# 将 PHP 请求转发给 PHP-FPM 处理location ~ \.php$ {fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}这里Nginx 会将 .php 文件的请求转发给 PHP-FPM 进程处理。fastcgi_pass 指定了 PHP-FPM 的地址fastcgi_param 用来传递请求的文件路径。
配置访问日志和错误日志
Nginx 会记录每个请求的日志默认会生成访问日志和错误日志。可以通过 access_log 和 error_log 指令来指定日志文件路径。
server {listen 80;server_name example.com;root /var/www/html;index index.html;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;location / {try_files $uri $uri/ 404;}
}access_log记录客户端请求的信息。error_log记录服务器错误信息。
配置文件的热重载
Nginx 支持配置文件的热重载可以在不停止服务的情况下应用新的配置。执行如下命令来重新加载配置
sudo nginx -s reload3-3、Nginx 配置优化
启用 Gzip 压缩
通过启用 Gzip可以减少传输的数据量提高加载速度。可以通过在 http 块中加入以下配置启用
http {gzip on;gzip_types text/plain text/css application/javascript application/json;gzip_min_length 1000;
}gzip on;启用 Gzip 压缩。gzip_types设置需要压缩的文件类型。gzip_min_length设置启用压缩的最小文件大小。
配置缓存
为提高性能可以配置静态文件缓存。通过 expires 或者 cache-control 可以控制文件缓存的过期时间。
location /images/ {root /var/www;expires 30d; # 缓存 30 天add_header Cache-Control public;
}这里配置了 /images/ 路径下的图片文件缓存 30 天。
配置负载均衡
Nginx 作为负载均衡器可以分担请求到多个后端服务器。
常见的负载均衡策略有轮询、最少连接、IP 哈希等。
轮询Round Robin
轮询是一种最简单的负载均衡算法它会将请求按顺序依次分配给每一台后端服务器直到所有服务器都分配一次请求后再从头开始分配。这种方法适用于后端服务器性能相当且请求负载比较均匀的情况。
最少连接Least Connections
最少连接算法将请求分配给当前活动连接数最少的后端服务器。也就是说每当一个请求到来时负载均衡器会选择那些当前正在处理的连接数最少的服务器来处理请求。
IP 哈希IP Hash
IP 哈希算法根据客户端的 IP 地址计算出一个哈希值然后根据哈希值将请求分配给固定的后端服务器。也就是说相同 IP 地址的客户端请求始终会被分配给同一台服务器从而实现“会话粘性”session persistence。
总结
轮询适用于负载相对均衡的情况。最少连接适用于负载差异较大的场景能够更智能地分配请求。IP 哈希适用于需要会话粘性的应用确保同一客户端的请求始终由同一台服务器处理。
配置 SSL/TLS 加密
为了保障 Web 安全可以通过 SSL/TLS 对网站进行加密。Nginx 提供了对 HTTPS 的支持配置方式如下
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;root /var/www/html;index index.html;
}在此配置中Nginx 会监听 443 端口并启用 SSL 加密。需要提供 SSL 证书文件和密钥文件。
3-4、Nginx 作为 Web 服务器的优势
高性能Nginx 可处理大量并发连接适用于高流量网站。低资源消耗Nginx 采用事件驱动模型使用少量的内存和 CPU 资源。反向代理与负载均衡Nginx 提供反向代理和负载均衡功能可以用于分担负载和提高可用性。易于配置与扩展Nginx 的配置文件灵活易于根据需求进行定制支持多种模块扩展。支持 HTTPS通过 SSL/TLS 配置Nginx 能够提供安全的加密通信。
备注什么是事件驱动
4. Nginx 反向代理
反向代理 是一种服务器配置客户端请求首先到达代理服务器然后由代理服务器将请求转发给实际处理请求的内部服务器客户端无法直接与这些内部服务器通信。在 Nginx 中反向代理的主要功能是转发请求并返回后端服务器的响应Nginx 在其中充当“中介”角色。
4-1、反向代理的优势
负载均衡Nginx 可以把流量分发到多个后端服务器上以实现负载均衡提升性能和可扩展性。安全性反向代理可以隐藏内部服务器的 IP 地址和架构减少攻击面增加系统的安全性。SSL 终结Nginx 可以处理所有的 SSL 加密/解密工作后端服务器只需要处理 HTTP 请求减轻负担。缓存功能Nginx 能缓存后端服务器的响应减少数据库查询次数和处理延迟。带宽控制和流量控制Nginx 作为反向代理可以对请求进行限流防止恶意请求。
4-2、反向代理配置
基本的反向代理配置
基本的反向代理配置会将所有请求转发到后端服务器如 Apache、Node.js 或其他 Web 服务器
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; # 保留客户端真实 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 保留代理链中的所有 IP}
}proxy_pass指定请求要转发的目标服务器http://backend_server 可以是一个域名或 IP 地址。proxy_set_header这些配置确保将客户端的原始请求头如主机、IP 地址等转发到后端服务器这对于一些后端日志分析和安全性很有帮助。
配置负载均衡
Nginx 可以通过负载均衡将请求分发到多个后端服务器以提高可用性和扩展性
upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;
}server {listen 80;server_name example.com;location / {proxy_pass http://backend; # 请求会被均匀分发到 upstream 中的多个服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}upstream指定多个后端服务器地址Nginx 会按顺序将请求分发到这些服务器。默认的负载均衡策略是 轮询Round Robin即依次将请求发往下一个服务器。也可以配置其他负载均衡策略。
配置负载均衡策略
Nginx 提供多种负载均衡策略
轮询默认按照顺序依次转发请求。最少连接将请求转发给当前连接数最少的服务器。IP 哈希根据客户端的 IP 地址的哈希值决定请求发往哪个服务器。
最少链接
upstream backend {least_conn;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}使用 IP 哈希 策略
upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}配置 SSL 终结
Nginx 可以处理客户端和服务器之间的 SSL/TLS 加密/解密操作减轻后端服务器的负担
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {proxy_pass http://backend; # 转发到后端 HTTP 服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}ssl_certificate 和 ssl_certificate_key 用于配置 SSL 证书。该配置会处理 HTTPS 请求解密后再通过 HTTP 发送到后端服务器。
配置缓存
Nginx 作为反向代理时还可以缓存从后端服务器返回的响应。这样可以减少后端服务器的负担提高性能尤其是在大量的相同请求场景下。
server {listen 80;server_name example.com;location / {proxy_cache my_cache; # 启用缓存proxy_cache_valid 200 1h; # 缓存 200 响应 1 小时proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}proxy_cache指定缓存区域。proxy_cache_valid设置缓存的有效期。
4-3、反向代理的常见用途
负载均衡
当网站流量较大时可以通过反向代理将流量分配给多个后端服务器。这样不仅能提高系统的可用性还能实现流量的平滑分配。
安全性
通过反向代理可以隐藏后端服务器的真实 IP 地址保护它们不受外部攻击。另外反向代理服务器也能执行访问控制限制不合法的请求。
SSL/TLS 终结
Nginx 可以处理所有的 SSL 终结工作即加密和解密操作。后端服务器只需要处理 HTTP 请求不需要处理 SSL减轻后端的负担。
缓存和加速
反向代理服务器可以缓存从后端返回的静态内容减少后端的负载并加速页面加载。
4-4、Nginx 反向代理配置总结
proxy_pass用来指定请求转发的目标服务器。upstream用来定义一组后端服务器支持负载均衡。proxy_set_header转发请求头信息。proxy_cache开启缓存机制。proxy_cache_valid设置缓存的有效期。
5. Nginx 负载均衡
Nginx 作为反向代理服务器广泛用于实现 负载均衡。负载均衡指的是将流量均匀分配到多个后端服务器上确保系统的高可用性、可靠性、性能和可扩展性。
Nginx 提供了多种负载均衡策略可以根据不同需求进行配置。以下是 Nginx 负载均衡的基本概念、配置方法和策略。
5-1、负载均衡的基本概念
负载均衡的目标是确保多个服务器之间的请求均衡分配从而提高处理能力并优化响应时间。它可以解决以下问题
性能优化分散请求压力提升整体性能。高可用性避免单一服务器故障减少系统宕机风险。可扩展性支持随时添加新的服务器来应对流量增长。
5-2、Nginx 的负载均衡配置
基本的负载均衡配置
Nginx 的负载均衡配置通过 upstream 模块来实现。在 upstream 模块中我们可以定义一组后端服务器Nginx 会根据负载均衡策略将请求转发到这些服务器。
基本配置如下
http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend; # 请求转发到 upstream 定义的后端服务器}}
}upstream定义一个名为 backend 的后端服务器池包含三个服务器。proxy_pass将客户端请求转发到 backend 服务器池。
在此配置中Nginx 会使用默认的 轮询 策略将请求依次转发给后端服务器。
负载均衡策略
Nginx 提供了多种负载均衡策略常用的包括
轮询默认按顺序依次将请求分发到后端服务器。最少连接least_conn将请求分发给当前连接数最少的后端服务器。IP 哈希ip_hash根据客户端的 IP 地址的哈希值来决定请求发往哪个服务器。
后端服务器的权重
你可以为不同的后端服务器配置权重权重越大分配的请求数量越多。默认情况下每个服务器的权重为 1。
upstream backend {server backend1.example.com weight3; # 权重为3分配更多请求server backend2.example.com weight1; # 权重为1分配较少请求
}健康检查与故障转移
Nginx 本身不支持主动健康检查但它支持 被动健康检查。
当某个服务器不可用时Nginx 会自动跳过该服务器继续将请求转发到其他健康的服务器。
可以通过设置 max_fails 和 fail_timeout 来控制失败次数和超时进行被动故障转移
upstream backend {server backend1.example.com max_fails3 fail_timeout30s;server backend2.example.com;server backend3.example.com;
}加权负载均衡与健康检查Nginx Plus
对于企业版 Nginx Plus提供了更强大的负载均衡和健康检查功能。它支持主动健康检查、加权负载均衡、会话保持等高级特性。
upstream backend {zone backend 64k;server backend1.example.com weight3;server backend2.example.com;server backend3.example.com;health_check;
}health_check启用主动健康检查Nginx Plus 会定期检查后端服务器的健康状况并自动将请求路由到健康的服务器。
5-3、负载均衡示例
基本轮询负载均衡
http {upstream backend {server backend1.example.com;server backend2.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend; # 请求将被均匀地分发到 backend1 和 backend2}}
}最少连接负载均衡
http {upstream backend {least_conn; # 使用最少连接策略server backend1.example.com;server backend2.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}}
}IP 哈希负载均衡
http {upstream backend {ip_hash; # 使用 IP 哈希策略server backend1.example.com;server backend2.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}}
}处理服务器故障
http {upstream backend {server backend1.example.com max_fails3 fail_timeout30s;server backend2.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}}
}5-4、总结
Nginx 的负载均衡 使得多台后端服务器能够共享请求负载提高系统的可用性和扩展性。通过 upstream 模块可以定义多个后端服务器使用不同的负载均衡策略如轮询、最少连接、IP 哈希等。通过 权重、健康检查 和 故障转移可以提高系统的容错能力和稳定性。
6. Nginx 安全与性能优化
Nginx 是一个高性能、高可靠性的 Web 服务器和反向代理服务器广泛用于提供高可用性的网站服务。为了确保 Nginx 的安全性和性能合理的配置和优化非常重要。下面我们将详细介绍如何在 Nginx 上进行 安全优化 和 性能优化。
6-1、Nginx 安全优化
关闭不必要的功能
Nginx 提供了一些不常用或可能存在安全隐患的功能关闭这些功能可以提高系统的安全性。
禁用 Nginx 的版本信息
http {server_tokens off; # 禁用版本信息
}防止 Nginx 服务器被扫描
http {server_tokens off; # 禁用版本信息error_page 403 404 500 502 503 504 /50x.html; # 自定义错误页面避免泄露详细信息log_not_found off; # 禁用未找到文件的日志记录防止攻击者扫描
}限制 HTTP 请求头
http {client_max_body_size 10M; # 限制客户端请求的最大体积client_header_buffer_size 1k; # 请求头的最大缓冲区大小large_client_header_buffers 4 16k; # 请求头缓冲区大小
}防止跨站请求伪造 (CSRF) CSRFCross-Site Request Forgery跨站请求伪造
CSRF的防御方法CSRF Token令牌使用 SameSite Cookie 属性验证 HTTP Referer 或 Origin 头确保敏感操作使用 HTTP 方法限制多因素认证MFA。
http {add_header X-Content-Type-Options nosniff;add_header X-Frame-Options SAMEORIGIN; # 防止页面被嵌入 iframeadd_header X-XSS-Protection 1; modeblock; # 启用 XSS 保护
}设置 HTTP 头防止点击劫持
http {add_header X-Frame-Options SAMEORIGIN;
}使用 SSL/TLS 加密通信
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3; # 强制使用较新版本的 TLSssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; # 强加安全加密套件
}防止 DoS 攻击DDoS 防护
http {limit_req_zone $binary_remote_addr zonereq_limit_per_ip:10m rate10r/s; # 限制每秒最多 10 个请求limit_req zonereq_limit_per_ip burst20; # 允许突发流量最多 20 次
}6-2、Nginx 性能优化
调整**工作进程和线程配置**
Nginx 的性能主要受工作进程worker processes和工作线程worker connections的影响。
合理配置这些参数可以大大提高 Nginx 的性能。
配置工作进程数
worker_processes 指定 Nginx 使用的工作进程数。一般情况下设置为服务器的 CPU 核心数可以获得较好的性能。
worker_connections 1024; # 每个工作进程最大连接数启用缓存
Nginx 支持多种缓存机制包括内容缓存、代理缓存等能够提高响应速度和减少服务器负载。
静态文件缓存
静态文件如图片、CSS、JS 文件可以缓存到浏览器减少请求响应时间。
http {server {location /images/ {expires 30d; # 设置图片缓存 30 天}location /css/ {expires 7d; # 设置 CSS 缓存 7 天}}
}代理缓存
Nginx 可以缓存反向代理服务器返回的响应减少向后端服务器的请求提高性能。
http {proxy_cache_path /tmp/cache levels1:2 keys_zonecache_zone:10m max_size1g inactive60m use_temp_pathoff;server {location / {proxy_cache cache_zone; # 启用缓存proxy_cache_valid 200 1h; # 设置缓存有效时间}}
}6-3、启用 Gzip 压缩
启用 Gzip 可以减小传输数据的大小提高页面加载速度。
http {gzip on;gzip_comp_level 5; # 压缩级别取值 1-91 最快9 最慢压缩比最大gzip_types text/plain text/css application/javascript text/xml application/xml application/xmlrss text/javascript;
}6-4、配置适当的客户端请求大小
通过调整 client_max_body_size 来控制客户端可以上传的最大文件大小。如果应用涉及到大文件上传可以适当增加此值。
http {client_max_body_size 100M; # 最大请求体为 100MB
}6-5、使用异步 I/O
Nginx 是基于异步 I/O 模型的可以同时处理成千上万的连接。
确保系统的文件描述符足够高以支持大量并发连接。
worker_rlimit_nofile 10240; # 增加文件描述符数目6-6、调整 TCP 配置
优化 Nginx 与客户端之间的 TCP 连接提高处理性能。
http {tcp_nopush on; # 减少发送小的数据包tcp_nodelay on; # 发送小的数据包时关闭 Nagle 算法sendfile on; # 启用高效的文件传输tcp_keepalive_time 600; # 设置 TCP 连接的保持时间
}6-7、总结
安全优化要点
禁用 Nginx 版本信息限制请求头大小启用 HTTP 安全头防护配置 SSL/TLS 加密通信限制并发请求速率防止 DDoS 攻击。
性能优化要点
合理配置工作进程和连接数启用缓存静态文件缓存、代理缓存等启用 Gzip 压缩以减小传输数据调整客户端请求大小限制使用异步 I/O 和调整 TCP 配置。
通过合理的 安全 和 性能优化可以提高 Nginx 的稳定性、安全性和响应速度从而提升网站的整体用户体验。
7. Nginx 与 PHP 结合
Nginx 是一个高效的 Web 服务器而 PHP 是一种广泛使用的动态脚本语言。Nginx 本身并不支持直接处理 PHP 文件它依赖于外部的处理程序来执行 PHP 代码。最常见的方式是通过 FastCGI 与 PHP 结合。在这里我们将介绍如何将 Nginx 与 PHP 结合使用设置 PHP-FPMFastCGI Process Manager作为处理 PHP 请求的后端。
7-1、Nginx 与 PHP 的结合原理
Nginx 是一个轻量级的 Web 服务器主要用于处理静态文件、反向代理、负载均衡等任务。对于动态内容如 PHPNginx 会将请求转发给外部程序如 PHP-FPM进行处理PHP-FPM 会解析 PHP 脚本并将输出返回给 Nginx最后由 Nginx 发送给客户端。
PHP-FPMFastCGI Process Manager是一个 PHP 的 FastCGI 进程管理器可以有效地管理多个 PHP 进程提升性能。
7-2、配置 Nginx 与 PHP 的结合
安装 PHP 和 PHP-FPM
首先需要在服务器上安装 PHP 和 PHP-FPM。如果你使用的是 Linux 系统可以通过以下命令进行安装。
安装 PHP 和 PHP-FPM以 Ubuntu 为例
sudo apt update
sudo apt install php php-fpm php-mysql其他 PHP 扩展通过 apt 安装。例如安装 php-gd、php-mbstring 等扩展
sudo apt install php-gd php-mbstring php-xml php-cli配置 PHP-FPM
安装完成后配置 PHP-FPM。编辑 php-fpm 配置文件来确保 PHP-FPM 监听正确的地址。
默认情况下PHP-FPM 使用 Unix Socket 或 TCP 协议监听请求。
编辑 PHP-FPM 配置文件
在 /etc/php/7.x/fpm/pool.d/www.conf 文件中7.x 是 PHP 的版本号找到 listen 配置项。你可以选择使用 Unix Socket 或 TCP。
使用 Unix Socket推荐
listen /run/php/php7.x-fpm.sock使用 TCP 协议不推荐
listen 127.0.0.1:9000在选择使用 Unix Socket 时确保 Nginx 有权限访问该 Socket 文件。
7-3、配置 Nginx
接下来需要在 Nginx 的配置文件中设置 FastCGI 代理将 PHP 请求转发给 PHP-FPM 进行处理。
编辑 Nginx 配置文件
假设你的网站根目录是 /var/www/html可以按照以下步骤配置 Nginx
打开 Nginx 的配置文件通常位于 /etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf。配置 server 块以处理 PHP 请求。
server {listen 80;server_name example.com;root /var/www/html;index index.php index.html index.htm;location / {try_files $uri $uri/ 404;}# 配置 PHP 请求处理location ~ \.php$ {include snippets/fastcgi-php.conf; # 包含 fastcgi 配置fastcgi_pass unix:/run/php/php7.x-fpm.sock; # PHP-FPM 使用的 Unix Socketfastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 传递 PHP 脚本的路径include fastcgi_params; # 包含默认的 FastCGI 参数}# 错误页面配置error_page 404 /404.html;location /404.html {root /var/www/html;}
}关键配置项说明
root /var/www/html;指定网站根目录。index index.php index.html index.htm;设置默认的索引文件优先加载 index.php。location ~ \.php$所有以 .php 结尾的请求都会经过这个配置处理。fastcgi_pass unix:/run/php/php7.x-fpm.sock;指定 PHP-FPM 的监听地址这里是 Unix Socket。fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;设置 PHP 脚本文件的路径。include fastcgi_params;包含一些默认的 FastCGI 参数如请求方法、客户端 IP 等。
7-4、重启 Nginx 和 PHP-FPM
配置完成后需要重启 Nginx 和 PHP-FPM 以使配置生效。
sudo systemctl restart nginx
sudo systemctl restart php7.x-fpm7-5、测试 PHP 是否正常工作
为了验证配置是否正确可以创建一个简单的 PHP 文件进行测试。
创建 info.php 文件
echo ?php phpinfo(); ? /var/www/html/info.php7-6、安全配置
禁用访问 **info.php** 由于 info.php 页面包含了服务器的敏感信息建议在生产环境中禁用该文件的访问
location ~ ^/info.php {deny all;
}7-7、总结
安装 PHP 和 PHP-FPM首先需要在服务器上安装 PHP 和 PHP-FPM。配置 PHP-FPM确保 PHP-FPM 配置正确特别是监听方式Unix Socket 或 TCP。配置 Nginx通过配置 fastcgi_pass 来将 PHP 请求转发给 PHP-FPM 进行处理。重启服务完成配置后重启 Nginx 和 PHP-FPM 使配置生效。测试 PHP 页面通过创建 info.php 测试 PHP 是否能够正确工作。
8. Nginx 日志管理
Nginx 日志对于监控服务器状态、排查问题、分析访问流量等方面至关重要。Nginx 提供了详细的访问日志和错误日志可以帮助我们跟踪服务器的工作状态和定位问题。以下是 Nginx 日志管理的详细内容。
8-1、Nginx 日志的基本概念
Nginx 有两种主要的日志类型
访问日志Access Logs记录客户端请求的信息。错误日志Error Logs记录 Nginx 在处理请求过程中遇到的错误信息。
访问日志
访问日志记录了所有进入 Nginx 的请求包括客户端的 IP 地址、请求的时间、请求的 URL、返回状态码、响应时间等信息。它对于了解网站的访问情况非常有用。
默认情况下访问日志记录格式类似于
192.168.1.1 - - [19/Jan/2025:10:01:23 0000] GET /index.html HTTP/1.1 200 1024 http://example.com Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36错误日志
错误日志记录了 Nginx 在处理请求过程中出现的各种错误包括配置错误、程序错误等。
根据日志的级别错误日志的详细程度不同。
错误日志记录的格式通常为
2025/01/19 10:02:25 [error] 12345#0: *1 open() /var/www/html/index.html failed (2: No such file or directory), client: 192.168.1.1, server: example.com, request: GET /index.html HTTP/1.1, host: example.com8-2、配置 Nginx 日志
Nginx 日志的配置通常在主配置文件 nginx.conf 中进行。Nginx 的日志配置项包括日志格式和日志文件的位置。
配置访问日志
Nginx 允许自定义访问日志的格式。
可以使用 log_format 指令来定义日志格式。
默认情况下Nginx 使用标准的日志格式
log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;上面的格式包括了以下信息
$remote_addr客户端的 IP 地址。$remote_user客户端的用户名如果启用了基本认证。$time_local本地时间。$request请求的详细信息。$status响应状态码。$body_bytes_sent响应体的字节数。$http_referer请求来源页面即 Referer 头。$http_user_agent客户端的 User-Agent 字段。$http_x_forwarded_for通过代理服务器时包含的客户端真实 IP 地址。
可以使用以下配置来启用访问日志
access_log /var/log/nginx/access.log main;配置错误日志
错误日志通过 error_log 指令进行配置。可以指定日志文件的路径以及日志的级别。
常见的错误日志级别有
debug最详细的日志级别包含调试信息。info包含常规信息。notice记录普通的运行信息。warn记录警告信息。error记录错误信息。crit记录严重错误信息。alert记录需要立即处理的错误。emerg记录紧急错误信息通常是系统崩溃的情况。
例如配置错误日志文件和级别
error_log /var/log/nginx/error.log warn;日志轮转Log Rotation
为了防止日志文件过大需要对 Nginx 的日志进行轮转。使用工具 ulogrotate/u 来定期备份和清理日志文件。示例
/var/log/nginx/*.log {dailymissingokrotate 30compressdelaycompressnotifemptycreate 0640 www-data www-data
}daily日志每天轮转一次。rotate 30保留最近的 30 个日志文件。compress压缩旧的日志文件。create 0640 www-data www-data为新日志文件设置权限和所有者。
条件化日志记录
Nginx 还支持按条件记录日志。例如如果请求的状态码不是 200可以记录该请求
if ($status ! 200) {access_log /var/log/nginx/error_access.log;
}8-3、查看和分析 Nginx 日志
查看日志
使用 tail 命令查看实时访问日志
tail -f /var/log/nginx/access.log分析日志
对于大量的日志数据手动查看可能很困难。这时可以使用一些工具来帮助分析。
GoAccess
GoAccess 是一个实时的 Web 日志分析工具能够直接解析 Nginx 日志并提供图形化界面。
安装和使用 GoAccess
sudo apt install goaccess
goaccess /var/log/nginx/access.log -o report.html --log-formatCOMBINED生成一个 report.html 文件可以在浏览器中查看分析结果。
AWStats
AWStats 是一个强大的 Web 日志分析工具适用于访问日志的深入分析支持图形化展示。
Nginx 日志常见问题排查
通过查看错误日志和访问日志你可以分析一些常见的问题
404 错误检查访问日志中是否有请求返回 404 错误如果有检查文件路径是否正确或者请求是否指向了一个不存在的资源。502 错误502 错误通常表示后端服务如 PHP-FPM不可用检查错误日志并确保后端服务正常运行。慢请求如果某些请求响应慢在访问日志中查看响应时间并根据响应时间对服务器进行性能调优。
8-4、总结
Nginx 的日志功能对 Web 服务器的监控、问题排查、性能优化等至关重要。
通过合理配置访问日志和错误日志结合日志分析工具可以帮助管理员快速定位并解决问题。
访问日志记录客户端的请求信息。错误日志记录服务器处理请求时出现的错误信息。日志配置通过 log_format 和 error_log 配置来管理日志的格式和存储路径。日志轮转通过 logrotate 定期备份和清理日志文件。日志分析使用 GoAccess 或 AWStats 等工具分析 Nginx 日志。排查问题通过日志分析可以发现请求问题、性能瓶颈等进而优化服务器配置。
掌握 Nginx 日志的配置和管理方法可以大大提升服务器的运维效率帮助你及时发现并解决潜在的问题。
9. Nginx 高级功能
Nginx 是一个功能强大的 Web 服务器除了常见的反向代理和负载均衡外它还提供了很多高级功能可以帮助管理员在处理高并发、复杂配置和安全性要求时提供更多灵活性和可扩展性。以下是 Nginx 的一些高级功能及其应用场景
9-1、Nginx 的高级功能概述
负载均衡缓存机制WebSocket反向代理与微服务架构SSL/TLS 加密限制请求和流量控制访问控制配置文件热更新动态模块支持异步处理与性能优化集成第三方模块
9-2、负载均衡
轮询Round Robin默认的负载均衡算法Nginx 会按照顺序轮流将请求分配给各个后端服务器。加权轮询Weighted Round Robin在轮询的基础上为不同的服务器设置不同的权重权重较大的服务器会接收到更多的请求。最少连接Least Connections将请求转发给连接数最少的服务器适合负载差异较大的服务器。IP 哈希IP Hash根据客户端的 IP 地址来选择后端服务器保证来自同一 IP 的请求总是转发到同一台后端服务器。
9-3、健康检查
Nginx 可以定期检查后端服务器的健康状态确保请求只会转发到健康的服务器。
如果某台服务器故障Nginx 会自动将流量转发到其它正常的服务器。
upstream backend {server backend1.example.com;server backend2.example.com;# 定期检查后端服务器的健康状态check interval5000 rise2 fall3 timeout1000;
}9-4、缓存机制
静态内容缓存
Nginx 可以缓存静态内容如图片、CSS 文件等减少后端服务器的负载提高访问速度。
可以通过 proxy_cache 和 fastcgi_cache 实现缓存。
http {proxy_cache_path /var/cache/nginx levels1:2 keys_zonecache_zone:10m inactive60m;server {location / {proxy_cache cache_zone;proxy_cache_valid 200 1h;proxy_pass http://backend;}}
}动态内容缓存
Nginx 可以缓存通过 FastCGI如 PHP、uWSGI 或其他协议传递的动态内容这有助于减少对数据库的请求提高性能。
注意proxy_cache 和 fastcgi_cache的区别
proxy_cache 和 fastcgi_cache 都是 Nginx 中用于缓存内容的机制旨在提高网站性能减少后端服务器的负载。不过它们的使用场景、缓存对象和工作原理有所不同。
proxy_cache反向代理缓存
用于缓存通过 Nginx 代理的内容主要针对通过 HTTP 请求访问的内容例如从其他服务器或服务获取的页面或资源。
fastcgi_cacheFastCGI 缓存
专门为 FastCGI 应用程序例如 PHP-FPM、Python WSGI 等 配置的缓存机制用于缓存通过 FastCGI 协议处理的动态请求。
9-4、WebSocket 支持
Nginx 支持 WebSocket 协议它可以通过反向代理将 WebSocket 请求转发到后端服务器。
WebSocket 是一种全双工协议通常用于实时通信场景。
server {listen 80;location /ws/ {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;}
}9-5、SSL/TLS 加密
Nginx 支持 SSL/TLS 加密可以为网站启用 HTTPS。
配置 SSL/TLS 时主要是设置 SSL 证书、私钥并配置相关的加密协议。
基本 SSL 配置
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:...;location / {proxy_pass http://backend;}
}强制使用 HTTPS
为了确保所有用户都通过 HTTPS 访问网站可以通过以下配置进行强制重定向。
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}9-6、限制请求和流量控制
Nginx 支持对请求进行速率限制以防止恶意请求和减少 DDoS 攻击的风险。
可以使用 limit_req 指令来限制请求频率。
限制请求速率
http {limit_req_zone $binary_remote_addr zonereq_zone:10m rate1r/s;server {location / {limit_req zonereq_zone burst5;}}
}限制连接数
通过 limit_conn 指令Nginx 可以限制每个客户端的最大连接数以避免某些用户占用过多的资源。
http {limit_conn_zone $binary_remote_addr zoneconn_zone:10m;server {location / {limit_conn conn_zone 1;}}
}9-7、访问控制
Nginx 提供了多种方式来控制对资源的访问包括基于 IP 地址、用户名等。
基于 IP 地址的访问控制
server {location /admin {allow 192.168.1.0/24; # 允许来自 192.168.1.x 网段的请求deny all; # 拒绝其他所有请求}
}基于 HTTP 基本认证的访问控制
使用 .htpasswd 文件进行 HTTP 基本认证。
server {location /admin {auth_basic Restricted Access;auth_basic_user_file /etc/nginx/.htpasswd;}
}9-8、配置文件热更新
Nginx 支持热更新配置文件无需重启服务器即可使新的配置生效。
使用以下命令可以重新加载配置
sudo nginx -s reload9-9、动态模块支持
Nginx 支持动态模块意味着 Nginx 本身不需要重新编译就可以加载外部模块。这使得 Nginx 的扩展更加灵活。
可以使用 --add-dynamic-module 编译选项来动态加载模块
./configure --add-dynamic-module/path/to/module
make
sudo make install9-10、异步处理与性能优化
Nginx 的核心优势之一就是其基于异步事件驱动模型的架构可以高效处理大量并发请求。在性能优化方面Nginx 提供了一些重要的配置选项如
使用 **worker_processes** 和 **worker_connections** 优化性能
worker_processes auto;
worker_connections 1024;worker_processes定义 Nginx 启动的工作进程数通常可以设置为 uauto/u让 Nginx 自动根据 CPU 核心数进行调整。worker_connections设置每个工作进程的最大连接数合理调整以提高并发处理能力。
使用缓存和压缩
通过合理配置缓存和启用 gzip 压缩可以显著提高 Nginx 的响应速度和服务器的吞吐量。
9-11、总结
Nginx 提供了丰富的高级功能使其成为高性能、高可用性的 Web 服务器。通过灵活的配置Nginx 可以处理各种负载均衡、缓存、SSL 加密、访问控制等需求并提供了卓越的性能和安全性。
负载均衡通过不同的负载均衡算法和健康检查确保请求分发到健康的服务器。缓存机制减少后端负载提高响应速度。WebSocket 支持处理实时通信应用。SSL/TLS 加密确保数据传输的安全性。流量控制限制请求频率防止滥用。访问控制通过 IP 地址、认证等方式
10. Nginx 常见问题及排查
Nginx 是一个非常稳定和高效的 Web 服务器但在使用过程中可能会遇到一些常见问题。了解这些问题的排查方法能够帮助你快速解决服务器故障提高运维效率。
10-1、Nginx 启动或重启失败
配置文件语法错误
Nginx 在启动或重启时首先会检查配置文件的语法如果语法错误则会导致启动失败。
使用 nginx -t 命令来检测配置文件语法。
sudo nginx -t提示如果配置文件没有错误输出会显示 nginx: configuration file /etc/nginx/nginx.conf test is successful。如果有错误错误信息会提供出错的位置和原因。
权限问题
Nginx 启动时需要访问特定的文件或目录如日志文件、证书文件、配置文件等。如果这些文件或目录的权限设置不正确也会导致启动失败。
检查 Nginx 进程是否有访问配置文件和目录的权限。
ls -l /etc/nginx/nginx.conf
ls -l /var/log/nginx确保 Nginx 用户通常是 www-data 或 nginx有相应的读取权限。
端口被占用
Nginx 启动时会尝试绑定指定的端口如 80 或 443。如果端口被其他程序占用则会导致启动失败。
使用 netstat 或 ss 命令检查端口占用情况。
sudo netstat -tuln | grep :80如果发现端口已经被占用可以使用 kill 命令杀死占用端口的进程或者修改 Nginx 配置文件中的端口。
10-2、Nginx 无法访问网站
防火墙设置
防火墙设置不当可能会导致 Nginx 不能正常访问尤其是云服务器如 AWS、阿里云、腾讯云等的防火墙设置。
使用 ufw、firewalld 或 iptables 命令检查防火墙规则。确保防火墙允许访问 HTTP80和 HTTPS443端口。
sudo ufw allow 80,443/tcp配置错误
Nginx 配置文件中的错误会导致无法访问站点例如错误的 server_name 或错误的 proxy_pass。
使用 nginx -t 检查配置文件。检查 server 块中的 server_name 是否正确。确保 location 配置正确且后端服务可访问。
后端服务问题
如果 Nginx 配置了反向代理而后端服务不可用或崩溃Nginx 也会无法提供服务。
检查后端服务是否运行使用 ps 或 systemctl 命令查看服务状态。
sudo systemctl status nginx
sudo systemctl status apache2 # 或其他 Web 服务检查后端服务的端口是否正确并且 Nginx 配置中的 proxy_pass 设置正确。
10-3、性能问题
Nginx 响应慢
当网站响应较慢时可能是由于以下原因
Nginx 配置不当如 worker_processes 或 worker_connections 配置不合适。后端服务器性能瓶颈数据库、应用服务器等。资源文件如图片、JS、CSS未缓存。
排查方法
调整 Nginx 的 worker_processes 和 worker_connections 参数。
worker_processes auto;
worker_connections 1024;检查后端服务的性能瓶颈CPU、内存、磁盘、网络。启用文件缓存、静态资源压缩等优化手段。
内存或 CPU 占用过高
如果 Nginx 进程的 CPU 或内存占用过高可能是由于配置不当或恶意请求导致的。
排查方法
使用 top 或 htop 检查系统资源占用情况。检查 Nginx 日志文件如 /var/log/nginx/error.log中是否有大量的错误信息可能会指示某些异常请求或攻击。
10-4、日志问题
日志文件过大
随着时间的推移Nginx 的日志文件可能会变得非常大占用大量磁盘空间。
排查方法
定期轮换日志文件使用 logrotate 工具。
sudo vi /etc/logrotate.d/nginx配置示例
/var/log/nginx/*.log {dailymissingokrotate 14compressdelaycompressnotifemptycreate 0640 www-data www-data
}手动清理旧的日志文件。
sudo rm /var/log/nginx/access.log.*日志无法记录
如果日志无法记录可能是日志路径权限设置错误或日志文件被删除。
排查方法
检查日志路径和日志文件的权限。
ls -l /var/log/nginx10-5、SSL/TLS 问题
SSL 证书错误
如果使用 HTTPS 时出现证书错误可能是证书过期、配置错误或证书链不完整。
排查方法
检查 SSL 证书是否有效并且没有过期。使用 openssl 命令检查证书链是否完整。
openssl s_client -connect example.com:443检查 Nginx 配置中的 ssl_certificate 和 ssl_certificate_key 是否正确指向证书和私钥。
10-6、文件上传问题
上传文件大小限制
Nginx 默认限制上传文件的大小可能会导致上传失败。
排查方法
修改 client_max_body_size 配置增加文件上传大小限制。
server {client_max_body_size 100M; # 增加文件上传限制
}10-7、常见错误码及排查
403 Forbidden
原因权限问题Nginx 无权访问资源。排查方法检查文件和目录权限确保 Nginx 进程用户有读取权限。
404 Not Found
原因请求的资源不存在。排查方法检查 server 配置中的 root 或 alias 是否正确。
502 Bad Gateway
原因Nginx 作为反向代理时无法与后端服务器通信。排查方法检查后端服务是否正常运行端口配置是否正确。
504 Gateway Timeout
原因Nginx 与后端服务器通信超时。排查方法增加 proxy_read_timeout 或检查后端服务的响应时间。
10-8、总结
排查 Nginx 的问题时首先要确保配置文件语法正确检查常见的权限、端口占用、防火墙等问题。对于性能问题要分析 Nginx 和后端服务的资源消耗并进行相应的优化。日志管理和 SSL 配置也是常见的故障源通过合理的日志轮换和证书管理可以避免很多问题。
根据以上排查步骤可以快速定位并解决 Nginx 常见的问题。