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

Nginx 配置文件的完整指南 (二)

文章目录

    • 四、反向代理配置
      • 4.1 proxy_pass
        • 效果1—路径重写
        • 效果2—转发到其他服务器
      • 4.2 proxy_pass使用规则
      • 4.3 proxy_set_header
        • 4.3.1 修改请求协议
    • 五、负载均衡配置
      • 5.1 upstream
      • 5.2 server
      • 5.3 负载均衡策略
        • 5.3.1 轮询
        • 5.3.2 加权轮询
        • 5.3.3 最少连接
        • 5.3.3 ip_hash:基于IP的负载均衡算法
    • 六、SSL/TLS配置
    • 七、缓存配置
    • 八、日志配置
    • 九、性能优化
      • 9.1 gzip:启用压缩配置
      • 9.2 keepalive_timeout:保持连接超时时间
      • 9.3 client_body_buffer_size:客户端请求体缓冲区大小



回顾 Nginx 配置文件的完整指南 (一)

四、反向代理配置


4.1 proxy_pass

  proxy_pass指令用于设置反向代理的目标地址。

效果1—路径重写

  • 请求路径:http://localhost:80/test
  • 最终路径:http://localhost:8800/test1
server {listen 80;  # 监听80端口的所有请求location /test {proxy_pass http://localhost:8800/test1/;}
}

效果2—转发到其他服务器

  • 请求路径:http://localhost:80/test
  • 最终路径:http://xxx.xxx.xxx:8800/test1
server {listen 80;  # 监听80端口的所有请求location /test {proxy_pass http://xxx.xxx.xxx:8800/test1/;}
}

4.2 proxy_pass使用规则

  在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

  • 第一种:url末尾有/
    请求路径:http://127.0.0.1/test/a.html
    最终路径:http://xxx.xxx.xxx/a.html
location /test {proxy_pass http://xxx.xxx.xxx/;
}
  • 第二种:url末尾没/
    请求路径:http://127.0.0.1/test/a.html
    最终路径:http://xxx.xxx.xxx/test/a.html
location /test {proxy_pass http://xxx.xxx.xxx;
}
  • 第三种:
    请求路径:http://127.0.0.1/test/a.html
    最终路径:http://xxx.xxx.xxx/sss/a.html
location /test {proxy_pass http://xxx.xxx.xxx/ssss/;
}
  • 第四种:
    请求路径:http://127.0.0.1/test/a.html
    最终路径:http://xxx.xxx.xxx/ssstest/a.html
location /test/ {proxy_pass http://xxx.xxx.xxx/sss;
}

4.3 proxy_set_header

  用于设置反向代理请求的头信息,我们可以根据需要自定义、修改或删除请求头字段,以满足代理服务器的要求或与后端服务器进行正确的通信。

location / {# 设置请求头中的 Host 字段为当前请求的主机名proxy_set_header Host $host;  # 设置请求头中的 X-Real-IP 字段为客户端的 IP 地址proxy_set_header X-Real-IP $remote_addr;  # 设置请求头中的 X-Forwarded-For 字段为客户端的 IP 地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置请求头中的 User-Agent 字段为客户端的 User-Agent proxy_set_header User-Agent $http_user_agent;  # 将请求转发给名为 "backend" 的后端服务器proxy_pass http://backend;  
}

4.3.1 修改请求协议

  没错,还能修改请求协议,下面的例子是把HTTP协议修改为webSocket:

location /socket {rewrite ^/socket/(.*)$ /$1 break; #拦截标识去除proxy_pass http://cim.tfjy.tech:34567;# 这里是http不是ws,不用怀疑,proxy_http_version  1.1; # http 1.1# 请求协议设置为webSocketproxy_set_header  Upgrade $http_upgrade;proxy_set_header  Connection "upgrade";
}



五、负载均衡配置


5.1 upstream

  upstream指令用于定义后端服务器组,即负载均衡的目标服务器列表。
  upstream指令定义了一个名为backend_servers的后端服务器组,包含了三个服务器

upstream backend_servers {server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;
}

5.2 server

  server块用于配置一个负载均衡服务器。location块中的proxy_pass指令将请求转发到backend_servers后端服务器组。

http {upstream backend_servers {server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;}server {location / {proxy_pass http://backend_servers;   # backend_servers是后端服务器组名,可以任意命名}}
}

5.3 负载均衡策略

  Nginx 负载均衡是指使用 Nginx 作为反向代理服务器,将传入的请求分发到多个后端服务器,以平衡服务器负载并提高系统的可用性和性能。
  在 Nginx 的配置文件中,可以指定不同的负载均衡策略来分配请求到后端服务器。

5.3.1 轮询

  轮询是默认的负载均衡策略,它按照请求的顺序逐个将请求分配给后端服务器。

upstream backend {server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;
}server {location / {proxy_pass http://backend ;}}

5.3.2 加权轮询

  加权轮询策略根据后端服务器的权重值分配请求,权重越高的服务器接收到的请求越多。

upstream backend {server backend1.xxx.com weight=3;server backend2.xxx.com weight=2;server backend3.xxx.com weight=1;
}server {location / {proxy_pass http://backend ;}}

5.3.3 最少连接

  最少连接策略将请求分配给当前连接数最少的后端服务器。

   upstream backend {least_conn;server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;}server {location / {proxy_pass http://backend ;}}

5.3.3 ip_hash:基于IP的负载均衡算法

  基于客户端的IP地址进行负载均衡,使得同一IP的请求始终被转发到同一台后端服务器,解决session不共享问题。

http {upstream backend {ip_hash;server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;}server {location / {proxy_pass http://backend ;}}
}



六、SSL/TLS配置


  通过配置SSL证书路径、SSL证书私钥路径、SSL/TLS协议支持版本和SSL加密算法,可以实现安全的HTTPS通信。

  • ssl_certificate:设置SSL证书的路径。

  • ssl_certificate_key:设置SSL证书的私钥路径为

  • ssl_protocols:设置SSL/TLS协议的支持版本

  • ssl_ciphers :指定SSL加密算法

server {listen 443 ssl;ssl_certificate /path/to/certificate.crt;ssl_certificate_key /path/to/private.key;ssl_protocols TLSv1.2 TLSv1.3;   # 支持版本为TLSv1.2和TLSv1.3ssl_ciphers "AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256";
}



七、缓存配置


  通过配置反向代理缓存路径、缓存键和缓存有效期,可以实现对反向代理响应的缓存。这样可以提高响应速度并减轻后端服务器的负载。根据实际需求,可以进一步调整缓存路径、缓存键和缓存有效期的设置。

  • proxy_cache_path设置了反向代理缓存的存储路径

    • levels=1:2:表示缓存目录的层级结构为1层目录和2层子目录
    • keys_zone=my_cache:10m:定义了缓存区域的名称为my_cache,并分配了10MB的内存空间
  • proxy_cache启用了反向代理缓存,并将缓存区域设置为my_cache

  • proxy_cache_valid设置了缓存的有效期,对于状态码为200的响应,缓存的有效期为1小时

  • proxy_cache_key:缓存的键为$scheme$host$request_uri,即根据请求的协议、主机名和URI来生成缓存的键。

http {proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;server {location / {proxy_pass http://backend_server;proxy_cache my_cache;proxy_cache_valid 200 1h;proxy_cache_key $scheme$host$request_uri;}}
}



八、日志配置


  可以通过配置访问日志路径和格式以及错误日志路径和级别,来记录服务器的访问日志和错误信息。根据实际需求,可以选择合适的日志路径和级别,以及自定义日志格式。

  • access_log:配置访问日志的路径和格式
  • error_log:配置错误日志的路径和级别
http {access_log /path/to/access.log;error_log /path/to/error.log;
}



九、性能优化


9.1 gzip:启用压缩配置

  gzip指令用于启用压缩功能,并配置相应的压缩参数。

  • gzip on表示启用压缩功能
  • gzip_types指定了需要进行压缩的文件类型,如文本文件、CSS文件和JavaScript文件
  • gzip_min_length指定了最小压缩文件大小的阈值,只有大于等于该阈值的文件才会进行压缩。
http {gzip on;gzip_types text/plain text/css application/javascript;gzip_min_length 1000;
}

9.2 keepalive_timeout:保持连接超时时间

  keepalive_timeout指令用于设置保持连接的超时时间。

示例代码:

http {keepalive_timeout 60s;
}

9.3 client_body_buffer_size:客户端请求体缓冲区大小

  通过配置压缩功能、保持连接超时时间和客户端请求体缓冲区大小,可以进行性能优化,提高服务器的响应速度和资源利用率。根据实际需求,可以调整压缩参数、超时时间和缓冲区大小的设置。

  • client_body_buffer_size指令用于设置客户端请求体缓冲区的大小。
http {client_body_buffer_size 8k;
}
http://www.lryc.cn/news/129026.html

相关文章:

  • AI夏令营第三期 - 基于论文摘要的文本分类与关键词抽取挑战赛笔记
  • 使用qsqlmysql操作mysql提示Driver not loaded
  • Java云原生框架Quarkus初探
  • ElasticSearch相关概念
  • 微服务实战项目-学成在线-项目部署
  • 封装form表单
  • 程序员如何利用公网远程访问查询本地硬盘【内网穿透】
  • 算法|Day42 动态规划10
  • vmalert集成钉钉告警
  • 深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL
  • LeGO-Loam代码解析(二)--- Lego-LOAM的地面点分离、聚类、两步优化方法
  • 程序员如何利用公网打造低成本轻量化的搜索和下载平台【内网穿透】
  • 构建可远程访问的企业内部论坛
  • 2023河南萌新联赛第(六)场:河南理工大学-C 旅游
  • C语言 常用工具型API ----------strchr()
  • 建造者模式的理论与实现
  • 非计算机科班如何顺利转码进入计算机领域?
  • 【C++类和对象】类有哪些默认成员函数呢?(下)
  • springboot自定义banner的输出与源码解析
  • LeetCode 141.环形链表
  • Spring-Bean的生命周期
  • Cat(3):客户端集成—简单案例
  • 虚拟机/双系统Ubuntu扩容
  • Nginx搭建本地服务器,无需购买服务器即可测试vue项目打包后的效果
  • SpringBoot 接口调用出现乱码解决 中文乱码
  • JDBC封装与设计模式
  • 小程序扫描二维码获取网址,通过Jsoup进行解析
  • Kubernetes+EFK构建日志分析平台
  • 客服如何减轻工作压力?浅析客服压力管理方法
  • 知识储备--基础算法篇-二分搜索