美文网首页
Ngix 反向代理-OpenResty

Ngix 反向代理-OpenResty

作者: 梦晓半夏_d68a | 来源:发表于2020-06-20 23:56 被阅读0次

    ngix在很多大型网站都有使用到,如网易:


    image.png

    ngix下载安装及开启服务

    下载地址

    方式一:直接在官网下载
      官网下载地址
    缺点:官网上下载的ngix为原生的,没有集成很多插件,使用起来没那么方便,推荐使用第三方插件

    方式二:第三方插件,在此以OpenResty插件为例
      OpenResty是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,常用的第三方模块以及大多数依赖项。 可以把它看成是Nginx附加众多的第三方插件的合集。其主体是嵌入lua脚本的支持,让你能够使用lua灵活地处理运算逻辑。

    下载安装及使用步骤

      具体下载安装及开启服务步骤如下:

    1. 去openresty官网下载,根据系统选择需要的下载包进行下载
        openresty下载地址

    2. 下载完成后解压到想要安装软件的位置,插件解压后文件夹结构如下:


      image.png
    3. 在解压包的路径下使用cmd打开,输入 nginx.exe命令,开启ngix服务

      image.png
    4. 打开浏览器,输入 127.0.0.1 或者 localhost, 就能看到Welcome to OpenResty! 的字样,证明ngix服务已经开启了

      image.png

    ngix 配置

    1. 通过记事本打开配置文件:安装包文件夹下的conf文件夹下的nginx.conf

      image.png
    2. nginx.conf初始化
      a. 删除nginx.conf多余注释

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        keepalive_timeout  65;
    
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    b. 分析配置项
      通过配置项server可以看到,当我们通过loacalhost:80直接访问时(因为http默认端口就是80,在此可以省略),默认路径就是/路径,就会打开html这个目录下的index.html文件

    image.png
    在此,可以通过双击直接打开该文件index.html来验证我的说法,通过直接打开文件和输入loacalhost打开页面一致
    文件打开

    c.删除多页配置内容
      配置项server还配置了如果发生报错显示50x.html,可以把这里的配置删掉。因此初始化后的nginx.conf就变成如下:

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        keepalive_timeout  65;
    
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
        }
    }
    

    location 匹配顺序

      在说location之前,我一定要先分享一个echo 的大坑,希望小伙伴们不要踩坑。我是在 windows 环境中进行开发,在调试配置的过程中,本希望可以通过 echo 命令打印一些日志辅助分析。因此花了一两个小时在百度上搜索echo-nginx-module安装使用教程,结果搜到的全是Linux教程,最后找到其根本原因: windows 环境无法使用echo-nginx-module原因
      Windows代码不是开源的,Nginx无法动态链接模块,因此,您仅限于nginx.org上提供的二进制文件以及它们包含的模块。

    匹配模式:

    location = /uri   = 表示精确匹配,只有完全匹配上才能生效。匹配优先级最高
    location ^~ /uri   ^~ 对URL路径进行前缀匹配,并且在正则之前。匹配优先级次高
    location ~ pattern  ~ 表示正则匹配,优先级较高。
    location /      / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default,优先级最低。

    匹配规则:
    (1)匹配优先级越高,越优先匹配
    (2)同一优先级,匹配程度越高的匹配
    (3)匹配优先级和匹配程度都一样,则匹配在前面的路径

    location配置举例:

    location / {
                echo '通用匹配,优先级最低';
    }
    location = /a {
                echo '精确匹配,优先级最高';
    }
    location ^~ /a {
                echo '开头匹配,以/a开头,优先级次高';
    }
    location ^~ /a/b {
                echo '开头匹配,以/a/b开头,优先级次高';
    }
    location ~ ^/\w {
                echo '正则匹配,以数字、字母、下划线开头,优先级较高';
    }
    location ~ ^/\d {
                echo '正则匹配,以数字开头,优先级较高';
    }
    

    在浏览器输入不同的地址l及对应结果:

    http://localhost/a --> 精确匹配,优先级最高
    http://localhost/a/b --> 开头匹配,以/a/b开头,优先级次高
    http://localhost/b --> 正则匹配,以数字、字母、下划线开头,优先级较高
    http://localhost/12 --> 正则匹配,以数字开头,优先级较高
    http://localhost/d --> 正则匹配,以数字、字母、下划线开头,优先级较高

    nginx 反向代理配置

      对于前面写的规则,可能小伙伴们会有点晕,没关系,不用背下来,使用的时候对照一下就好了。下面开始进入正题,nginx 反向代理配置。

    现在我的本地开启了一个服务,地址为http://192.168.37.1:3800/
    1. 开启本地服务:

    本地服务

    2. 设置Nginx反向代理本地服务及百度

    location /hello {
          proxy_pass http://192.168.37.1:3800/;
    }
    location /baidu {
          proxy_pass https://www.baidu.com/;
    }
    

    3. 代理结果

    代理本地服务 代理百度

    注意location路径设置,容易踩坑

    location /a {
    proxy_pass http://ip;
    }
    导致: /a/x --> http://ip/a/x
    location /b {
    proxy_pass http://192.168.0.12:3801/;
    }
    导致: /b/x --> http://ip/x

    负载均衡

    NGINX配置负载均衡主要是在nginx.conf文件中里upstream模块
    1、upstream模块应放于nginx.conf配置的http{}标签内
    2、upstream模块默认算法是wrr (权重轮询 weighted round-robin)

      Nginx的upstream支持5种分配方式,包括轮询、weight(权重比)、ip_hash、fair 、url_hash,其中前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式。在此只对轮询、weight(权重比)做介绍。

    轮询

      轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

       upstream group {
               server 192.168.0.12:3800;
               server 192.168.0.12:3801;
        }
    

    weight(权重比)

     &emsp轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下

       upstream group {
               server 192.168.0.12:3800 weight=1;
               server 192.168.0.12:3801 weight=10;
        }
    



    nginx.conf文件完整配置如下:

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        keepalive_timeout  65;
        upstream group {
               server 192.168.0.12:3800 weight=1;
               server 192.168.0.12:3801 weight=10;
        }
    
        server {
            listen       80;
            server_name  localhost;
            default_type  text/html;
            location /a {
                proxy_pass http://group/;
            }
        }
    }
    
    



      以上都是我工作中常用到的项目优化方法,文中有不足或者读者有疑问或更好的见解,欢迎留言讨论。
      如果觉得该篇文章对您有帮助,别忘了留下您的足迹,点个赞❤噢

    相关文章

      网友评论

          本文标题:Ngix 反向代理-OpenResty

          本文链接:https://www.haomeiwen.com/subject/tdekxktx.html