nginx
1、upstream
upstream 是 Nginx 中用于定义后端服务器组的指令块,属于HTTP 核心模块的一部分。它主要用于反向代理和负载均衡,允许将客户端请求分发到多个后端服务器(如 Web 应用服务器、API 服务、数据库等)

![]()
2、upstream 模块的后端服务器参数
(1)backup
backup专门用于定义备用服务器,将服务器标记为备用节点(主节点不可用时启用)。

(2)weight
设置后端服务器权重值(负载均衡比例)
默认权重 1,不支持小数(如 weight=1.5 会报错)

(3)down
用于手动标记某台服务器为"停机维护"状态,Nginx 不会将任何请求转发给它。不同于 backup(备用服务器),down 是显式禁用,通常用于:服务器维护期间、故障排查时隔离问题节点.

4)max_conns
限制单台服务器的最大并发连接数,防止过载。
当服务器的活跃连接数达到 max_conns 时,新请求会被转发到其他可用服务器。
默认值:0(无限制)。

(5)least_conn
使用 least_conn(最少连接数)策略,Nginx 会将新请求优先分配给当前活跃连接数最少的后端服务器。

3.开启日志(web1、web2)

$http_x_forwarded_for:为真实客户端IP
4.修改配置文件

解析:
作用:将客户端请求的原始 Host 头(域名)传递给后端服务器。
作用:将客户端的真实 IP 地址传递给后端服务器,存储在自定义头 X-Real-IP 中。
作用:追加客户端 IP 到 X-Forwarded-For 头,用于标识请求链路上的所有代理 IP。
======================================================内置变量$说明=============================



4、nginx缓存


x-cache-status返回“HIT “表示响应来自缓存
观察 X-Cache-Status 的值:
- HIT:响应来自缓存
- MISS:未命中缓存,从后端获取
- BYPASS:显式跳过缓存(如设置了 proxy_cache_bypass)
- EXPIRED:缓存已过期
- STALE:后端不可用时返回旧缓存
linux 中查看缓存
查看生成缓存文件
tree /usr/local/nginx/proxy_cache/
可以使用正数或负数,Expires头部信息的值,将通过当前系统时间加上设定time值来设定,time值还控制Cache-Control的值,负数表示no-cache,正数或0表示max-age=time
location ~* \.(jpg|jpeg|png|gif)$ {
expires 30d;
}
#expires 30s; #缓存30秒
#expires 30m; #缓存30分钟
#expires 2h; #缓存2小时
#expires 30d; #缓存30天
原理解析

原理和步骤:
1、用户首次通过浏览器发送请求到服务端获取数据,客户端是没有对应的缓存,所以需要发送request请求来获取数据;
2、服务端接收到请求后,获取服务端的数据及服务端缓存的允许后,返回200的成功状态码并且在响应头上附上对应资源以及缓存信息;
3、当用户再次访问相同资源的时候,客户端会在浏览器的缓存目录中查找是否存在响应的缓存文件
4、如果没有找到对应的缓存文件,则走(2)步
5、如果有缓存文件,接下来对缓存文件是否过期进行判断,过期的判断标准是(Expires)
6、如果没有过期,则直接从本地缓存中返回数据进行展示
7、如果Expires过期,接下来需要判断缓存文件是否发生过变化,判断的标准有两个,一个是ETag(Entity Tag),一个是Last-Modified
8、判断结果是未发生变化,则服务端返回304,直接从缓存文件中获取数据
9、如果判断是发生了变化,重新从服务端获取数据,并根据缓存协商(服务端所设置的是否需要进行缓存数据的设置)来进行数据缓存。


浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。
浏览器根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是强制缓存和协商缓存
强制缓存:强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。
-
强制缓存规则: 当浏览器向服务器发送请求的时候,服务器会将缓存规则放入HTTP响应的报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是
Expires和Cache-Control,其中Cache-Conctrol的优先级比Expires高。 -
Expires: Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求的结果缓存的到期时间,即再次发送请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。到了HTTP/1.1,Expires已经被
Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,如果客户端与服务端的时间由于某些原因(时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存直接失效,那么强制缓存存在的意义就毫无意义。

也可以这样配置:
location ~* \.(css|js)$ {
expires 600;
add_header Cache-control max-age=800;
}
下面是从浏览器复制出的请求Http参数:
HTTP/1.1 304 Not Modified
Server: nginx
Date: Sun, 11 Aug 2024 12:46:58 GMT
Last-Modified: Fri, 09 Aug 2024 10:03:08 GMT
Connection: keep-alive
ETag: "66b5e95c-2c7"
Expires: Mon, 12 Aug 2024 12:46:58 GMT
Cache-Control: max-age=86400
Cache-Control: public
Gzip模块
通过配置网站服务器进行输出压缩,可以减少http响应传输的数据量,从而提高网站页面的加载速度。
location ~ .*\.(jpg|gif|png|js)$ {
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2; # 压缩级别,默认1,最高9
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif img/png;
}
跨域和防盗链
跨域和防盗链的配置主要出于安全方面的考虑,允许合法的用户来进行访问。
server {
listen 80;
server_name www.stark.com;
location / {
# 设置允许跨域的域,* 表示允许任何域,也可以设置特定的域
add_header 'Access-Control-Allow-Origin' 'http://stark1.com https://stark2.com';
# 允许的方法
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# 允许的头信息字段
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
# 缓存时间
add_header 'Access-Control-Max-Age' 1728000;
# 预检请求的处理
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
# 这里是你的Nginx服务器的其他配置
}
}

浙公网安备 33010602011771号