美文网首页
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