🎈今日推荐——https://cloud.tencent.com/developer/article/2469533
BuildAdmin19:前端项目如何设计一个异步API请求模块——这篇文章介绍了如何在前端项目中设计一个异步API请求模块。文章详细讲解了使用axios创建实例、配置请求参数、设置拦截器,并封装了一个axios工具类。通过创建一个axios实例并配置基础参数,结合拦截器处理请求和响应,最后在api模块中调用封装好的请求方法,实现了前后端分离架构下的API请求。
Nginx 是一个轻量级、高性能的开源 Web 服务器和反向代理服务器,以其高并发处理能力和灵活的配置成为现代 Web 架构中不可或缺的一部分。
时间节点 | 发展事件 |
---|---|
2004 | Nginx 发布第一个版本。 |
2011 | Nginx 公司成立,推出商业版 Nginx Plus。 |
2019 | F5 Networks 收购 Nginx,增强企业支持能力。 |
2023 | Nginx 在云原生和微服务架构中应用广泛。 |
随着互联网业务规模的增长,Nginx 已从一个简单的 Web 服务器演变为支持反向代理、负载均衡、内容缓存以及安全网关等功能的全面解决方案。
特性 | 描述 |
---|---|
高并发 | 单进程多事件机制,每秒可处理数万并发连接。 |
反向代理 | 能够转发客户端请求到后端服务器,并实现负载均衡。 |
静态文件服务 | 高效提供静态资源,如 HTML、CSS、JS 和图片。 |
模块化设计 | 支持灵活扩展功能,如 Gzip 压缩、SSL、认证等模块。 |
热加载 | 配置文件修改后无需重启服务即可生效。 |
场景 | 描述 |
---|---|
Web 服务器 | 作为静态网站和动态内容的主要服务引擎。 |
反向代理服务器 | 分发请求到多个后端服务器,并隐藏真实服务器地址。 |
负载均衡器 | 在后端服务器之间分配流量,提升系统性能与可靠性。 |
缓存服务器 | 缓存静态和动态内容,减少服务器压力并提升访问速度。 |
安全网关 | 提供 HTTPS 加密、访问控制和防火墙功能。 |
更新系统包管理器:
sudo apt update
安装 Nginx:
sudo apt install nginx
启动并验证 Nginx:
sudo systemctl start nginx
sudo systemctl status nginx
测试服务是否运行:
在浏览器中访问 http://<服务器IP>
,应该能看到默认的 Nginx 欢迎页面。
Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf
。其结构如下:
# 主配置部分
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# 事件模块
events {
worker_connections 1024; # 每个 worker 的最大连接数
}
# HTTP 模块
http {
include /etc/nginx/mime.types; # 文件类型映射
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 服务器配置
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html index.htm;
}
}
}
准备静态文件
将 HTML 文件放入 /var/www/mywebsite
目录。例如:
sudo mkdir -p /var/www/mywebsite
echo "<h1>Welcome to My Website</h1>" | sudo tee /var/www/mywebsite/index.html
配置 Nginx 服务
在 /etc/nginx/sites-available/mywebsite
中创建配置文件:
server {
listen 80;
server_name mywebsite.com;
location / {
root /var/www/mywebsite;
index index.html;
}
}
创建符号链接并重载配置:
sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
在浏览器中访问 http://mywebsite.com
,应该能看到网站内容。
Nginx 不仅仅是一个简单的 Web 服务器,还可以通过配置实现反向代理、负载均衡、HTTPS 加密以及缓存等高级功能,为现代 Web 应用提供高性能和灵活的解决方案。
反向代理是 Nginx 的核心功能之一,用于将客户端请求转发到后端服务器。同时,Nginx 提供多种负载均衡算法,将请求均匀分布到后端集群中,提高服务的可用性和性能。
常用负载均衡算法
Nginx 提供以下几种主要的负载均衡算法:
算法 | 描述 |
---|---|
轮询(Round Robin) | 默认算法,请求依次分发到每台后端服务器。 |
最少连接数(Least Connections) | 将请求分发给当前活动连接数最少的服务器,适合处理长连接应用场景。 |
IP 哈希(IP Hash) | 根据客户端 IP 计算哈希值,将请求固定分发到特定后端服务器,用于保持会话状态。 |
权重(Weight) | 根据服务器的处理能力分配权重,权重高的服务器处理更多请求。 |
假设有两台后端服务器,IP 地址分别为 192.168.1.101
和 192.168.1.102
,以下是 Nginx 的反向代理和负载均衡配置示例。
# 定义后端服务器集群
upstream backend {
server 192.168.1.101; # 第一台服务器
server 192.168.1.102; # 第二台服务器
}
# 配置服务器监听端口
server {
listen 80; # 监听 HTTP 请求的端口
location / {
proxy_pass http://backend; # 转发请求到 backend 集群
proxy_set_header Host $host; # 传递客户端的原始主机名
proxy_set_header X-Real-IP $remote_addr; # 将客户端 IP 转发到后端服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 支持多级代理的客户端 IP 跟踪
}
}
配置说明:
upstream backend
定义后端服务器的地址列表。proxy_pass http://backend
将所有客户端请求转发到后端集群。proxy_set_header
负责设置请求头信息,确保后端服务器能够识别客户端的原始请求。配置验证与测试
确认 Nginx 配置语法正确:
sudo nginx -t
重启 Nginx 服务应用新配置:
sudo systemctl reload nginx
模拟客户端请求,观察请求是否被均匀分发:
curl -I http://<nginx_server_ip>
HTTPS 是加密的 HTTP 通信协议,通过 SSL/TLS 提供数据加密和身份验证,保护数据传输的安全性。Nginx 提供完善的 HTTPS 支持,并可与免费的 Let's Encrypt 证书工具集成。
准备工作
安装 Let's Encrypt 的 Certbot 工具:
sudo apt install certbot python3-certbot-nginx
获取免费 SSL/TLS 证书
运行以下命令获取证书并自动配置 Nginx:
sudo certbot --nginx -d example.com
说明:
-d example.com
指定域名,请替换为实际的域名。配置示例
生成的 HTTPS 配置类似如下:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # 强制将 HTTP 重定向到 HTTPS
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # SSL 证书路径
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 私钥路径
location / {
root /var/www/html;
index index.html;
}
}
配置验证与续期
验证配置文件:
sudo nginx -t
重载 Nginx 配置:
sudo systemctl reload nginx
自动续期证书: Certbot 默认安装了 cron
任务来自动续期证书,无需手动干预。
Nginx 的缓存功能通过存储后端服务器的响应数据,提高客户端请求的响应速度,同时减少后端负载。
缓存路径与参数
在 http
模块中添加缓存路径配置:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
参数说明:
/var/cache/nginx
:缓存文件存储路径。levels=1:2
:缓存文件存储目录的层级结构。keys_zone=my_cache:10m
:定义缓存区域名称和共享内存大小。inactive=60m
:未被访问的缓存内容会在 60 分钟后过期。max_size=1g
:限制缓存占用磁盘空间为 1GB。配置缓存使用
在特定的 server
或 location
块中启用缓存:
server {
listen 80;
location / {
proxy_cache my_cache; # 启用缓存
proxy_pass http://backend;
add_header X-Cache-Status $upstream_cache_status; # 添加缓存状态到响应头
}
}
说明:
proxy_cache my_cache
指定缓存区域。add_header X-Cache-Status $upstream_cache_status
返回缓存命中状态,如 HIT
、MISS
或 EXPIRED
。验证缓存功能
重启 Nginx:
sudo systemctl reload nginx
访问目标 URL,并观察返回头部信息:
curl -I http://<nginx_server_ip>
验证 X-Cache-Status
是否为 HIT
表示缓存生效
参数 | 描述 |
---|---|
worker_processes | 设置为 CPU 核心数,提升并发性能。 |
worker_connections | 每个 worker 的最大连接数。 |
sendfile | 启用高效文件传输模式。 |
gzip
压缩响应数据,减少传输量:
gzip on;
gzip_types text/plain text/css application/json;
listen 443 ssl http2;
Nginx 凭借其轻量化和高性能的架构,已成为现代 Web 架构的核心组件之一。从静态文件服务到复杂的反向代理和负载均衡,它都能胜任。同时,通过持续学习和优化配置,可以充分发挥 Nginx 的潜力,为企业带来高效可靠的 Web 服务。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有