五分钟快速学习Nginx

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 五分钟快速学习Nginx

u=3077560467,581170262&fm=253&fmt=auto&app=138&f=JPEG.webp

Nginx 是一个高性能的 HTTP 和反向代理 web 服务器。它的配置非常简单,下面是我整理的 Nginx 知识点。

在阅读本文之前,建议先查看文章目录,然后再深入阅读,这样能快速形成对 Nginx 的认识。对于非复杂性的配置,以下内容足以满足日常工作需求,并可应对面试要求。

一、代理:

代理分为被代理角色目标角色

1、正向代理:

  • 客户端非常明确要访问的服务器地址;
  • 服务器只知道请求来自哪个服务器(不知道哪个客户端);
  • 正向代理屏蔽或者隐藏了真实客户端。

例如:当我们无法直接访问国外网站时,我们需要通过代理服务器(FQ)来访问,通过代理服务器去访问我们指定的网址。

2、反向代理:

  • 多个客户端向反向代理服务器发送请求,Nginx 根据一定的规则将请求分发到不同的服务器;
  • 客户端不清楚请求将被分发到哪台服务器,反向代理隐藏了服务器的信息。

总结:正向代理代理客户端的请求去访问目标服务器,目标服务器可能是一个反向服务器,反向代理了多台真实的服务器。

1667274211133.jpg

二、负载均衡

总说负载均衡,负载均衡是做什么用的?什么场景使用?

核心定义

负载均衡是用来分配客户端请求到多个服务器的机制,常用于解决高负载和提高系统可用性的问题。

  • 负载量:客户端发送的请求数量,也是负载量。
  • 均衡规则:反向代理服务器根据一定的规则将请求分发到不同的服务器上处理。
  • 负载均衡可分为硬件负载均衡(成本较高)和软件负载均衡(成本较低)。
  • 软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

Nginx支持的复杂均衡调度算法

  1. weight 轮询(默认):按顺序将请求逐一分配到不同的服务器上,支持设置权重值来调整不同服务器上请求的分配率。

    • 若在使用过程中某一服务器宕机,nginx会自动将该服务器剔除队列,请求代理不受任何影响。

    • 特点:可以设置权重值(weight),用于调整不同的服务器上请求的分配率,权重越大,被分配到请求的几率越大(依据硬件配置调整)。

  2. ip_hash:根据客户端请求的 IP 的哈希值进行匹配,将具有相同 IP 哈希的客户端分配到指定的服务器。
  3. fair:动态根据服务器对请求的处理和响应完成时间进行均衡匹配,响应完成时间短且处理效率高的服务器分配请求的概率较高。
    • 该方法虽然结合了前两者的优点,但是nginx不支持fair算法,需要安装upstream_fair模块。
  4. url_hash:根据访问的 URL 的哈希结果分配请求,每个请求的 URL 将分配到指定的服务器。可以提高缓存效率,但需要安装 nginx 的 hash 软件包。

三、nginx配置

Nginx 通过配置 .conf 文件进行运行。

1、核心配置

核心功能包含反向代理、负载均衡和静态服务器3种。

  • main:全局信息配置。
  • events:工作模式配置。
  • http:HTTP 通信信息配置。
  • server:服务端访问信息配置。
  • location:访问路由配置。
  • upstream:负载均衡配置

u=3458937402,3869543500&fm=253&fmt=auto&app=138&f=JPEG.webp

2、配置文件

/usr/local/nginx/conf/vhost/admin.conf

尝试从上面nginx配置文件地址读取后内容如下:

server  {
    listen 80;  # 服务端口号
    client_max_body_size 100m;  # body请求数据大小
    index index.html;  # 项目地址
    root  /user/project/admin;  # 项目根目录地址
    # 路由配置
    location ~ /* {
        proxy_pass  http://127.0.0.1:3001;  # 代理服务地址
        proxy_redirect     off; 
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
    location ~ .*\.(gif|jpg|jpeg|png|swf)$ {
        expires      1d;
    }

    location ~ .*\.(js|css)?$ {
        expires      24h;
    }

    location ~ /.well-known {
        allow all;
    }

    location ~ /\. {
        deny all;
    }

    access_log  /user/logs/admin.log; # 记录日志
}

配置详情如下:

  • server:定义一个虚拟主机的配置块,一个 HTTP 中可以配置多个 server。
  • listen 80:设置服务端监听的端口号为 80。
  • client_max_body_size 100m:设置请求中允许的最大 body 大小为 100 MB。
  • index index.html:设置项目地址的默认文件为 index.html。
  • root /user/project/admin:指定项目根目录的路径。
  • location /:配置请求路径为 / 的 location 块。
    • proxy_pass http://127.0.0.1:3001:将请求代理到地址的后端服务器。
    • proxy_redirect off:关闭代理重定向。
    • proxy_set_header:设置代理请求头。
    • proxy_next_upstream:定义当后端服务器返回错误时,Nginx 将如何处理请求。
    • proxy_max_temp_file_size:设置允许的最大临时文件大小。
    • proxy_connect_timeoutproxy_send_timeoutproxy_read_timeout:定义代理连接、发送和读取超时时间。
    • proxy_buffer_sizeproxy_buffersproxy_busy_buffers_size:设置代理缓冲区的大小。
    • proxy_temp_file_write_size:设置代理临时文件的写入大小。
  • location ~ .*.(gif|jpg|jpeg|png|swf)$:配置请求以 .gif.jpg.jpeg.png.swf 结尾的文件的 location 块。
    • expires 1d:设置这些文件的过期时间为 1 天。
  • location ~ .*.(js|css)?$:配置请求以 .js.css 结尾的文件的 location 块。
    • expires 24h:设置这些文件的过期时间为 24 小时。
  • location ~ /.well-known:配置请求以 /.well-known 开头的路径的 location 块。
    • allow all:允许所有请求访问该路径。
  • location ~ /.:配置以 . 开头的路径的 location 块。
    • deny all:禁止所有请求访问该路径。
  • access_log /user/logs/admin.log:指定记录日志的路径为 /user/logs/admin.log

3、其他配置

除了以上的配置外,nginx还能配置以下配置:

  • server:配置虚拟主机,一个 HTTP 中可以配置多个 server。
  • server_name:指定 IP 地址或域名,多个配置之间用空格分隔。
  • root:主机内的根目录,用于指定当前主机中 web 项目的根目录。
  • index:访问 web 网站时的全局首页。
  • charset:设置网页的默认编码格式。
  • access_log:指定该虚拟主机服务器中的访问记录日志存放路径。
  • error_log:指定该虚拟主机服务器中访问错误日志的存放路径。
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
缓存 负载均衡 应用服务中间件
Nginx 学习
【10月更文挑战第17天】Nginx 是一款非常强大的工具,掌握它的使用和配置对于构建高性能、可靠的 Web 应用至关重要。随着技术的不断发展,Nginx 也在不断更新和完善,为我们提供更好的服务和支持。
|
2月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
177 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
2月前
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
122 2
k8s学习--基于Ingress-nginx实现灰度发布系统
|
2月前
|
缓存 负载均衡 算法
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器,以及一个邮件代理服务器和通用的 HTTP 缓存服务器。
115 0
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
|
2月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
322 0
|
5月前
|
Ubuntu 应用服务中间件 Linux
Linux学习之Ubuntu 20中OpenResty的nginx目录里内容和配置文件
总的来说,OpenResty的Nginx配置文件是一个强大的工具,它允许你以非常灵活的方式定义你的Web服务的行为。
104 2
|
5月前
|
负载均衡 Java 应用服务中间件
学习aop以及nginx
学习AOP和Nginx的最好方式是通过实践。你可以尝试在你的项目中使用这些技术,或者找一些在线教程进行学习。
36 1
|
5月前
|
JavaScript 前端开发 应用服务中间件
|
6月前
|
负载均衡 前端开发 中间件
nginx安装配置 - 全网最细学习nginx
nginx安装配置 - 全网最细学习nginx
51 0