nginx

1、upstream

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

image

 

image

 

2、upstream 模块的后端服务器参数

(1)backup

backup专门用于定义备用服务器,将服务器标记为备用节点(主节点不可用时启用)。

image

 

(2)weight

设置后端服务器权重值(负载均衡比例)

默认权重 1,不支持小数(如 weight=1.5 会报错)

image

 

(3)down

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

image

 

4)max_conns

限制单台服务器的最大并发连接数,防止过载。

当服务器的活跃连接数达到 max_conns 时,新请求会被转发到其他可用服务器。

默认值:0(无限制)。

image

 

(5)least_conn

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

image

 

3.开启日志(web1、web2)

image

 $http_x_forwarded_for:为真实客户端IP

4.修改配置文件

image

 

解析:

proxy_set_header Host $host;

作用:将客户端请求的原始 Host 头(域名)传递给后端服务器。

proxy_set_header X-Real-IP $remote_addr;

作用:将客户端的真实 IP 地址传递给后端服务器,存储在自定义头 X-Real-IP 中。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

作用:追加客户端 IP 到 X-Forwarded-For 头,用于标识请求链路上的所有代理 IP。

======================================================内置变量$说明=============================

image

 

image

 

image

 

 

4、nginx缓存

image

 

image

 

x-cache-status返回“HIT “表示响应来自缓存

观察 X-Cache-Status 的值:

  • HIT:响应来自缓存
  • MISS:未命中缓存,从后端获取
  • BYPASS:显式跳过缓存(如设置了 proxy_cache_bypass)
  • EXPIRED:缓存已过期
  • STALE:后端不可用时返回旧缓存

linux  中查看缓存

查看生成缓存文件

tree /usr/local/nginx/proxy_cache/

image

 

 

可以使用正数或负数,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天

原理解析

image

 

原理和步骤:

1、用户首次通过浏览器发送请求到服务端获取数据,客户端是没有对应的缓存,所以需要发送request请求来获取数据;

2、服务端接收到请求后,获取服务端的数据及服务端缓存的允许后,返回200的成功状态码并且在响应头上附上对应资源以及缓存信息;

3、当用户再次访问相同资源的时候,客户端会在浏览器的缓存目录中查找是否存在响应的缓存文件

4、如果没有找到对应的缓存文件,则走(2)步

5、如果有缓存文件,接下来对缓存文件是否过期进行判断,过期的判断标准是(Expires)

6、如果没有过期,则直接从本地缓存中返回数据进行展示

7、如果Expires过期,接下来需要判断缓存文件是否发生过变化,判断的标准有两个,一个是ETag(Entity Tag),一个是Last-Modified

8、判断结果是未发生变化,则服务端返回304,直接从缓存文件中获取数据

9、如果判断是发生了变化,重新从服务端获取数据,并根据缓存协商(服务端所设置的是否需要进行缓存数据的设置)来进行数据缓存。

image

 

image

 

浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。

浏览器根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是强制缓存和协商缓存

强制缓存:强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。

  • 强制缓存规则: 当浏览器向服务器发送请求的时候,服务器会将缓存规则放入HTTP响应的报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是ExpiresCache-Control,其中Cache-Conctrol的优先级比Expires高。

  • Expires: Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求的结果缓存的到期时间,即再次发送请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。到了HTTP/1.1,Expires已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,如果客户端与服务端的时间由于某些原因(时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存直接失效,那么强制缓存存在的意义就毫无意义。

image

 

也可以这样配置:

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服务器的其他配置
    }
}

 

 

 

posted @ 2025-10-14 23:43  KLAPT  阅读(33)  评论(0)    收藏  举报