• 2022Nginx进阶教程,由浅入深


    2022Nginx入门教程,图文超详细 

    1、简单小栗子

    我们先实现一个小目标,完成一个最简单的反向代理

    打开nginx.conf文件,添加upstream,以及在location中添加proxy_pass

    upstream 主要是配置均衡池和调度方法
    proxy_pass 主要是配置代理服务器ip或服务器组的名字

    修改配置后需要重启nginx,如此当我们请求http://localhost:80/hellonginx/时会得到test接口的返回值

    test接口是从nacos动态配置获取用户名的值

    2、负载均衡详解

    先说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法

    2.1热备

    比如我们把应用部署在两个服务器上,平时只使用A,当A挂了才启用B

    #设定实际的服务器列表

    upstream myServe {

    server 192.168.24.11:8082;

    server 192.168.24.12:8082 backup; #热备

    }

    2.2普通轮询

    #设定实际的服务器列表

    upstream myServe {

    server 192.168.24.11:8082;

    server 192.168.24.12:8082;

    }

    server {

    listen 80;

    server_name localhost;

    #反向代理的路径(和upstream绑定),location 后面设置映射的路径

    location /hellonginx/ {

    root html;

    index index.html index.htm;

    proxy_pass http://myServe/test;

    }

    服务器列表配置A、B俩台服务器,此时会进行简单的轮询,也就是服务器处理请求的顺序为:ABAB......

    2.3加权轮询

    跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。

    upstream myServe {

    server 192.168.24.11:8082 weight=2;

    server 192.168.24.12:8082 weight=1;

    }

    此时服务器请求顺序为:AABAAB......

    2.4 ip_hash

    nginx的ip_hash算法是取ip地址的前三段数字进行hash映射,这样做是为了让来自同一个地区的请求落在一个后台服务上。

    upstream myServe {

    server 192.168.24.11:8082;

    server 192.168.25.12:8082;

    ip_hash;

    }

    2.5状态参数

    • down,表示当前的server暂时不参与负载均衡。
    • backup,热备。当其他所有的非backup服务挂了,才会请求backup机器。
    • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
    • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

    默认:fail_timeout为10s,max_fails为1次。

    upstream myServe {

    server 192.168.24.11:8082 weight=2 max_fails=2 fail_timeout=2;

    server 192.168.24.12:8082 weight=1 max_fails=2 fail_timeout=1;

    }

    如果此时有一台服务器挂了,那么nginx服务器分发请求还是会给不能访问的web服务器,如果这里的响应连接时间过长,就会导致客户端的页面一直在等待响应,直到我们的响应时间超时,才会把请求重新分发给其他服务器,这里的响应时间如果过长,用户等待的时间就会越长。所以这里会有一些很重要的配置

    proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒 proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。

    proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。

    proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。

    3、多个webapp配置

    比如www.hellonginx.com 站点有好几个 webapp,quote(报价)、contract(合同)、budget(预算)。访问这些应用的方式通过上下文(context)来进行区分:

    www.hellonginx.com/quote/

    www.hellonginx.com/contract/

    www.hellonginx.com/budget/

    这三个应用需要分别绑定不同的端口号。而用户在实际访问 www.hellonginx.com 站点时,访问不同 webapp不会带着不同的端口号,配置也不难,来看看怎么做吧:

    http {
      # 此处省略一些基本配置
    
      upstream quote_server {
        server www.hellonginx.com:8081;
      }
    
      upstream contract_server {
        server www.hellonginx.com:8082;
      }
    
      upstream budget_server {
        server www.hellonginx.com:8083;
      }
    
      server {
        # 此处省略一些基本配置
        # 默认指向quote的server
        location / {
          proxy_pass http://quote_server;
        }
    
        location /quote/ {
          proxy_pass http://quote_server;
        }
    
        location /contract/ {
          proxy_pass http://contract_server;
        }
    
        location /budget/ {
          proxy_pass http://budget_server;
        }
      }
    }
    

    4、https配置

    https是在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。https的安全基础是 ssl,因此加密的详细内容就需要 ssl,所以在 nginx.conf 中你需要指定证书和它对应的 key 其他和 http 反向代理基本一样,只是在 Server 部分配置有些不同。

    # HTTPS server

    server {

    # 监听443端口。443为知名端口号,主要用于HTTPS协议

    listen 443 ssl;

    # 定义使用www.xx.com访问

    server_name www.hellonginx.com;

    # ssl证书文件位置(常见证书文件格式为:crt/pem)

    ssl_certificate cert.pem;

    # ssl证书key位置

    ssl_certificate_key cert.key;

    # ssl配置参数(选择性配置)

    ssl_session_cache shared:SSL:1m;

    ssl_session_timeout 5m;

    # 数字签名,此处使用MD5

    ssl_ciphers HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers on;

    location / {

    root /root;

    index index.html index.htm;

    }

    }

    5、静态站点配置

    我这里用的windows,反正道理都是一样的

    在static文件夹下新建了index.html和images文件夹,然后随便放张图片进去。

    server {

    listen 80;

    server_name localhost;

    location / {

    root D:/static/;

    index index.html index.htm; #设置默认首页

    }

    }

    这样当我们请求时,会显示默认首页,等同于D:/static/index.html

    location /images/ {

    alias D:/static/images/;

    #autoindex on;

    }

    看到图片就可以了。

    我们看见上面配置中注释了autoindex on,来看一下有啥效果,当我们请求不具体到某张图片时

    Nginx默认是不允许列出整个目录的,打开后的效果

    6、搭建文件服务器

    有时候,团队需要归档一些数据或资料,那么文件服务器必不可少。使用 Nginx 可以非常快速便捷的搭建一个简易的文件服务。

    Nginx 中的配置要点:

    • 将 autoindex 开启可以显示目录,默认不开启。
    • 将 autoindex_exact_size 开启可以显示文件的大小。默认为on,显示出文件的确切大小,单位是bytes。
      改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
    • 将 autoindex_localtime 开启可以显示文件的修改时间。默认为off,显示的文件时间为GMT时间。
      改为on后,显示的文件时间为文件的服务器时间。
    • root 用来设置开放为文件服务的根路径。
    • charset 设置为 charset utf-8,gbk;,可以避免中文乱码问题(windows 服务器下设置后,依然乱码,本人暂时没有找到解决方法)。

    一个最简化的配置如下:

    # 显示目录

    autoindex on;

    # 显示文件大小

    autoindex_exact_size on;

    # 显示文件时间

    autoindex_localtime on;

    server {

    # windows 服务器下设置后,依然乱码,暂时无解

    charset utf-8,gbk;

    listen 9050 default_server;

    listen [::]:9050 default_server;

    server_name _;

    root /share/fs;

    }

  • 相关阅读:
    PostgreSQL 认证方式
    670.最大交换 暴力、单调栈、指针的逆序遍历 三种解题思路。
    C++数组类的自实现,使其可以保存学生成绩,并进行降序排列
    小说系统微信小程序
    使用vue开发中一些图片保存的方法
    会计部门通过数字化工作流程提高生产力
    Markdown基础与进阶语法
    二、JavaScript基本语法:var、let、const、数据类型、运算符、类型转换
    华为云CodeArts产品体验的心得体会及想法
    爱创科技总裁谢朝晖荣获“推动医药健康产业高质量发展人物”
  • 原文地址:https://blog.csdn.net/QingXu1234/article/details/126462502