欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Nginx 反向代理流程,以及缓冲区详解

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

2024/11/2 1:44:35 来源:https://blog.csdn.net/m0_66705547/article/details/143361124  浏览:    关键词: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

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com