当前位置: 首页 > news >正文

Nginx 反向代理流程,以及缓冲区详解

Nginx 反向代理流程

  1. 客户端请求

    • 客户端(如浏览器)发送 HTTP 请求到 Nginx 服务器。
  2. Nginx 接收请求

    • Nginx 监听特定的端口(通常是 80 或 443),接收到客户端的请求。
  3. 匹配 server 块

    • Nginx 根据请求中的 Host 头信息或其他条件(如 IP 地址或端口号)匹配相应的 server 块。
  4. 匹配 location 块

    • 在匹配到的 server 块中,Nginx 根据请求的 URI 匹配相应的 location 块。
  5. 处理指令

    • 在 location 块中,Nginx 执行各种指令,如 proxy_pass 将请求转发到后端服务器。
  6. 与后端服务器通信

    • Nginx 将请求转发到指定的后端服务器。
    • 后端服务器处理请求并返回响应。
  7. 响应客户端

    • Nginx 接收后端服务器的响应,并将其返回给客户端。

缓冲区的作用

  • 减少 I/O 操作:通过在内存中缓存数据,减少对磁盘的读写操作,从而提高性能。
  • 优化网络传输:通过一次性读取更多的数据,减少网络传输次数,提高效率。
  • 处理大文件:对于大文件或大数据流,缓冲区可以帮助更高效地处理数据。

环境

  • 两台后端应用服务器:backend1 和 backend2
  • 使用 SSL/TLS 加密
  • 使用 Nginx 作为反向代理和负载均衡器
  • 使用 Nginx 缓存静态资源
  • 使用合理的缓冲区配置优化性能

 

安装 Nginx

如果你还没有安装 Nginx,可以使用以下命令进行安装(以 Ubuntu 为例):

sudo apt-get update
sudo apt-get install nginx

生成 SSL 证书

为了启用 HTTPS,你需要一个有效的 SSL 证书。你可以使用 Let's Encrypt 免费获取证书,或者从其他 CA 获取。

sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Nginx 配置文件

编辑 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/ 目录下的某个 .conf 文件。以下是一个完整的配置示例:

# 全局配置
user www-data;
worker_processes auto;
pid /run/nginx.pid;events {worker_connections 768;
}http {# 日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log;# 上游服务器组upstream backend {server backend1:8080;server backend2:8080;# 负载均衡算法:轮询(默认)# least_conn;  # 最少连接# ip_hash;    # IP 哈希}# 主服务器块 (HTTP)server {listen 80;server_name example.com www.example.com;# 将 HTTP 请求重定向到 HTTPSreturn 301 https://$host$request_uri;}# 主服务器块 (HTTPS)server {listen 443 ssl http2;server_name example.com www.example.com;# SSL 证书和私钥路径ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;  # 如果有 CA 捆绑包# 强制 HSTSadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 安全头add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block";add_header Referrer-Policy "no-referrer-when-downgrade";# 缓冲区设置proxy_buffers 8 16k;  # 设置代理缓冲区数量和每个缓冲区的大小proxy_buffer_size 32k;  # 单个缓冲区的大小proxy_busy_buffers_size 64k;  # 尝试释放的缓冲区最大总大小proxy_temp_file_write_size 64k;  # 写入临时文件的最小数据量client_body_buffer_size 128k;  # 客户端请求体缓冲区大小client_header_buffer_size 1k;  # 客户端请求头缓冲区大小large_client_header_buffers 4 8k;  # 大型客户端请求头缓冲区数量和大小# 默认 location 块location / {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_set_header X-Forwarded-Proto $scheme;# 缓存配置proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;add_header X-Proxy-Cache $upstream_cache_status;# 缓冲区相关指令proxy_buffers 8 16k;proxy_buffer_size 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;}# 静态资源缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;proxy_pass http://backend;proxy_cache my_cache;proxy_cache_valid 200 302 30d;proxy_cache_valid 404 1m;add_header X-Proxy-Cache $upstream_cache_status;# 缓冲区相关指令proxy_buffers 8 16k;proxy_buffer_size 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;}}# 缓存配置proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
}

详细解释

1. 全局配置
  • user www-data;:指定运行 Nginx 的用户。
  • worker_processes auto;:根据 CPU 核心数自动设置工作进程数。
  • events 块:设置每个工作进程的最大连接数。
2. 日志格式
  • log_format:定义日志格式。
  • access_log 和 error_log:指定访问日志和错误日志的位置。
3. 上游服务器组
  • upstream backend:定义后端服务器组,包含两台后端服务器 backend1 和 backend2
4. 主服务器块 (HTTP)
  • listen 80;:监听 80 端口。
  • server_name example.com www.example.com;:匹配域名。
  • return 301 https://$host$request_uri;:将所有 HTTP 请求重定向到 HTTPS。
5. 主服务器块 (HTTPS)
  • listen 443 ssl http2;:监听 443 端口并启用 SSL 和 HTTP/2。
  • ssl_certificate 和 ssl_certificate_key:指定 SSL 证书和私钥的路径。
  • ssl_trusted_certificate:如果需要 CA 捆绑包,指定其路径。
  • add_header:添加安全相关的 HTTP 头,如 HSTS、X-Frame-Options 等。
6. 缓冲区设置
  • proxy_buffers 8 16k;:设置 8 个 16KB 的缓冲区,总共 128KB。
  • proxy_buffer_size 32k;:单个缓冲区的大小为 32KB。
  • proxy_busy_buffers_size 64k;:尝试释放的缓冲区最大总大小为 64KB。
  • proxy_temp_file_write_size 64k;:写入临时文件的最小数据量为 64KB。
  • client_body_buffer_size 128k;:客户端请求体的缓冲区大小为 128KB。
  • client_header_buffer_size 1k;:客户端请求头的缓冲区大小为 1KB。
  • large_client_header_buffers 4 8k;:大型客户端请求头的缓冲区数量和大小。
7. 默认 location 块
  • proxy_pass http://backend;:将请求转发到后端服务器组。
  • proxy_set_header:设置转发请求时的头部信息。
  • proxy_cache 和 proxy_cache_valid:配置缓存策略。
8. 静态资源缓存
  • location ~* \.(jpg|jpeg|png|gif|ico|css|js)$:匹配静态资源。
  • expires 30d;:设置静态资源的过期时间为 30 天。
  • proxy_cache 和 proxy_cache_valid:配置缓存策略。
9. 缓存配置
  • proxy_cache_path:定义缓存存储路径、层级、键区域大小、最大缓存大小和不活跃时间。

测试和应用配置

  1. 测试配置

    sudo nginx -t
  2. 重新加载 Nginx

    sudo systemctl reload nginx

    或者

    sudo service nginx reload

 


http://www.mrgr.cn/news/61788.html

相关文章:

  • 【http作业】
  • 沪深A股上市公司数据报告分析
  • 一篇文章入门傅里叶变换
  • [QUIC] Packets 和 Frames 概述
  • Java三大特性之继承
  • 【C#/C++】C++使用托管式的导出dll的方式给C#调用
  • 才正式发布两个月GitHub高达星标29.7K!如果你想入门LLM大模型,那这就是最好的教程!
  • LoRA微调,真的有毒!
  • 一篇文章让你彻底掌握 Python【可保存下载】
  • 沈阳乐晟睿浩科技有限公司抖音小店运营创新
  • Hierarchical Supervised Contrastive Learning for Multimodal Sentiment Analysis
  • 没有对象来和我手撕红黑树吧
  • keepalived+脚本抢占模式和非抢占模式
  • ComfyUI 轻松实现二次元线稿上色,快速生成精美动漫图像(附工作流)
  • 直播美颜SDK平台开发指南:美颜API的应用与性能提升方案详解
  • 图解Redis 07 | HyperLogLog数据类型的原理及应用场景
  • 供需指标(Supply and Demand ),供给与需求,寻找支撑压力位神器 MT4免费公式!
  • DICOM标准:深入详解DICOM数据模型,理解DICOM数据模型
  • SAP系统与快递100系统集成案例
  • Helm全链路精通:从入门到实战,Kubernetes应用管理新高度
  • 机器学习中回归任务、分类任务常用的算法
  • CSP/信奥赛C++刷题训练:经典前缀和例题(4):洛谷P3662:Why Did the Cow Cross the Road II S
  • 技术星河中的璀璨灯塔 —— 青云交的非凡成长之路
  • 2024网鼎杯青龙组Web+Misc部分WP
  • 群控系统服务端开发模式-应用开发-业务架构逻辑开发Base开发总结
  • 【测试】——接口测试入门