自学内容网 自学内容网

Java学习Day61:薄纱王灵官!(Nginx review)

1.Nginx是什么

Nginx是一款轻量级、高性能,并发性好的HTTP和反向代理服务器

2.功能

2.1反向代理

正向代理是指客户端向代理服务器发送请求,代理服务器代表客户端去访问目标服务器。简单来说,正向代理是客户端的代理,客户端通过代理服务器访问外部资源。

  • 工作原理

    • 客户端通过配置代理服务器的地址和端口,将请求发送到代理服务器。
    • 代理服务器代替客户端发起请求到目标服务器。
    • 目标服务器并不知道客户端的真实身份,知道的只是代理服务器的信息。
  • 应用场景

    • 访问控制:例如,公司或组织会通过正向代理限制员工访问特定的网站或服务。
    • 隐藏客户端 IP 地址:通过正向代理,客户端的 IP 地址被代理服务器的 IP 地址所隐藏。
    • 缓存加速:正向代理可以缓存响应内容,减少重复请求,提高访问速度。

反向代理是指客户端的请求发送到代理服务器,代理服务器再将请求转发到内部的真实服务器。简单来说,反向代理是服务器端的代理,客户端不知道真实的服务器地址,只知道代理服务器的地址。

  • 工作原理

    • 客户端的请求首先到达代理服务器。
    • 代理服务器根据请求内容将请求转发给后端的真实服务器(可以是多个服务器)。
    • 后端服务器处理请求并将响应返回给代理服务器。
    • 代理服务器将响应返回给客户端。
  • 应用场景

    • 负载均衡:Nginx 可以根据不同的负载均衡策略(如轮询、最少连接等)将请求分发到多台后端服务器上,提高服务的可靠性和性能。
    • Web 应用的保护:反向代理隐藏了内部应用的真实地址和结构,增强了安全性。
    • 缓存:Nginx 可以缓存静态内容和 API 响应,减少后端负载,提高访问速度。
    • SSL 终端:Nginx 可以作为 SSL 终端代理,处理所有 SSL/TLS 加密和解密,然后将请求明文转发到后端服务器。

正向代理代理客户端隐藏客户端的地址,反向代理代理服务器隐藏服务器的地址

2.2负载均衡

Nginx通过其内置的upstream模块来实现负载均衡。该模块允许你定义一组后端服务器,并根据一定的策略将客户端请求转发到这些服务器上。Nginx支持多种负载均衡策略,包括轮询、IP哈希、最少连接数等。

2.2.1 轮询(Round Robin)

轮询是Nginx默认的负载均衡策略。它按照定义的服务器列表顺序逐个分配请求,循环往复。适用于服务器性能相当的情况。

upstream myUpstream {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / {
        proxy_pass http://myUpstream;
    }
}
2.2..2 加权轮询(Weighted Round Robin)

根据服务器的权重值分配请求,权重越高的服务器将获得更多的请求。通过给不同服务器设置不同的权重,可以合理分配负载,更好地利用服务器资源。

upstream myUpstream {
    server backend1.example.com weight=3;
    server backend2.example.com weight=1;
}

server {
    location / {
        proxy_pass http://myUpstream;
    }
}
2.2..3 IP哈希(IP Hash)

根据客户端的IP地址进行哈希计算,将相同IP的请求始终分发到同一台后端服务器上。这样可以保证来自同一客户端的请求都会被发送到同一服务器,适用于需要会话保持或缓存一致性的应用场景。

upstream myUpstream {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / {
        proxy_pass http://myUpstream;
    }
}
2.2..4 最少连接(Least Connections)

该策略将请求发送给当前连接数最少的服务器。通过动态地追踪每个服务器的连接数,将请求分发给连接最少的服务器,以实现负载均衡。适用于处理连接时长不一致的场景,如长连接和短连接混合的情况。

upstream myUpstream {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / {
        proxy_pass http://myUpstream;
    }
}
2.2.5 加权最少连接(Weighted Least Connections)

为每台服务器分配权重,并按照最少连接数进行负载均衡

upstream myUpstream {
    least_conn;
    server backend1.example.com weight=3;
    server backend2.example.com weight=1;
}

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

2.3动静分离

Nginx动静分离,简单来说,就是动态请求静态请求分开,也可以理解成使用Nginx处理静态页面Tomcat 处理动态页面,动静分离从目前实现角度来讲大致分为两种。

纯粹把静态文件独立成单独的域名,放在独立的服务器上(主流推崇的方案)


动态跟静态文件混合在一起发布,通过Nginx来分开


通过location指定不同的后缀名实现不同的请求转发,也可以通过expires参数设置,使浏览器缓存文件的过期时间,从而减少与服务器之前的请求和流量。(有更新则拉取,没更新则直接拿客户端的缓存

Expires具体含义:给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,也就是所谓的客户端缓存。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),假设一下,把这个Expires设置3d,表示在3天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。

2.3.1 动静分离目的

为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力,下面是动静分离的原理图。

3、nginx配置文件nginx.conf组成

1、全局块(Global Block):全局块包含了对整个 Nginx 服务器的全局配置,比如运行 Nginx 的用户、Nginx 的工作进程数、错误日志文件路径等。

#user  nobody;
worker_processes  1;   ###值越大,支持的并发数越大

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

2、events 块:该块用于配置与网络连接有关的参数,比如最大连接数、每个 worker 进程的最大连接数等。

events {
    worker_connections  1024;  ###nginx支持的最大连接数
}

3、http 块:http 块包含了针对 HTTP 协议的配置信息,比如 MIME 类型、日志格式、默认的字符编码等。

http {
   include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
}

4、server 块:server 块定义了一个虚拟主机的配置,包括监听的端口、域名、SSL 配置等。

server {
    listen       80;
    server_name  example.com;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

5、location 块:location 块用于匹配请求的 URL,并定义了针对这些 URL 的特定处理方式,比如反向代理、重定向、静态文件服务等。示例:

location /images/ {
    root   /data;
}


原文地址:https://blog.csdn.net/weixin_51721783/article/details/143820798

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!