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

文章目录

    • 四、反向代理配置
    • 五、负载均衡配置
      • [5.1 upstream](#5.1 upstream)
      • [5.2 server](#5.2 server)
      • [5.3 负载均衡策略](#5.3 负载均衡策略)
        • [5.3.1 轮询](#5.3.1 轮询)
        • [5.3.2 加权轮询](#5.3.2 加权轮询)
        • [5.3.3 最少连接](#5.3.3 最少连接)
        • [5.3.3 ip_hash:基于IP的负载均衡算法](#5.3.3 ip_hash:基于IP的负载均衡算法)
    • 六、SSL/TLS配置
    • 七、缓存配置
    • 八、日志配置
    • 九、性能优化
      • [9.1 gzip:启用压缩配置](#9.1 gzip:启用压缩配置)
      • [9.2 keepalive_timeout:保持连接超时时间](#9.2 keepalive_timeout:保持连接超时时间)
      • [9.3 client_body_buffer_size:客户端请求体缓冲区大小](#9.3 client_body_buffer_size:客户端请求体缓冲区大小)

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

四、反向代理配置


4.1 proxy_pass

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

效果1---路径重写

bash 复制代码
server {
    listen 80;  # 监听80端口的所有请求
    location /test {
    	proxy_pass http://localhost:8800/test1/;
	}
}

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

bash 复制代码
server {
    listen 80;  # 监听80端口的所有请求
    location /test {
    	proxy_pass http://xxx.xxx.xxx:8800/test1/;
	}
}

4.2 proxy_pass使用规则

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

bash 复制代码
location /test {
	proxy_pass http://xxx.xxx.xxx/;
}
bash 复制代码
location /test {
	proxy_pass http://xxx.xxx.xxx;
}
bash 复制代码
location /test {
	proxy_pass http://xxx.xxx.xxx/ssss/;
}
bash 复制代码
location /test/ {
	proxy_pass http://xxx.xxx.xxx/sss;
}

4.3 proxy_set_header

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

bash 复制代码
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:

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

五、负载均衡配置


5.1 upstream

  upstream指令用于定义后端服务器组,即负载均衡的目标服务器列表。

  upstream指令定义了一个名为backend_servers的后端服务器组,包含了三个服务器

bash 复制代码
upstream backend_servers {
    server backend1.xxx.com;
    server backend2.xxx.com;
    server backend3.xxx.com;
}

5.2 server

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

bash 复制代码
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 轮询

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

nginx 复制代码
upstream backend {
    server backend1.xxx.com;
    server backend2.xxx.com;
    server backend3.xxx.com;
}

 server {
     location / {
         proxy_pass http://backend ;
     }
 }

5.3.2 加权轮询

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

bash 复制代码
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 最少连接

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

bash 复制代码
   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不共享问题。

bash 复制代码
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加密算法

bash 复制代码
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.3
    ssl_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来生成缓存的键。

bash 复制代码
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:配置错误日志的路径和级别
bash 复制代码
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指定了最小压缩文件大小的阈值,只有大于等于该阈值的文件才会进行压缩。
bash 复制代码
http {
    gzip on;
    gzip_types text/plain text/css application/javascript;
    gzip_min_length 1000;
}

9.2 keepalive_timeout:保持连接超时时间

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

示例代码:

bash 复制代码
http {
    keepalive_timeout 60s;
}

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

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

  • client_body_buffer_size指令用于设置客户端请求体缓冲区的大小。
bash 复制代码
http {
    client_body_buffer_size 8k;
}
相关推荐
牛奶3 小时前
如何自己写一个浏览器插件?
前端·chrome·浏览器
乘云数字DATABUFF5 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
ping某7 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai