Nginx - 反向代理与负载均衡

目录

一、Nginx

1.1、Nginx 下载

1.2、nginx 基础配置的认识

a)第一部分:全局块

b)第二部分:events 块

c)第三部分:http 块

http 块中 内嵌的 server 块

1.3、一些常用配置

1.3.1、location 匹配级别

a)location /

b)location =

c)location ^~ 

1.3.2、实现反向代理

1.3.3、nginx 配置负载均衡

a)weight 权重

b)ip_hash

c)fair


一、Nginx


1.1、Nginx 下载

a)打开官方网站连接:OpenResty - 下载

选择根据电脑型号自行选择,这里演示 64位 Windows 版,进行下载 zip 文件.

Ps:OpenResty 就是 Nginx.

b)解压缩后,进入以下文件路径.

c)打开,输入 nginx.exe,回车即可,如下:

d)打开网页,访问 localhost:80,即可看到 Nginx 页面(OpenResty 就是 Nginx)

1.2、nginx 基础配置的认识

在 openresty-1.21.4.2-win64\conf\ 路径下有一个 nginx.conf 文件,打开如下:


#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;events {worker_connections  1024;
}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;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}

这里有很多注释,删除掉以后,如下:

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;}}}

这里分开来看,如下:

nginx 配置文件主要有三部分组成:

a)第一部分:全局块

  全局块:nginx 服务器全局生效的配置命令

worker_processes  1;   # 服务器并发处理能力,值越大并发能力越强(受自身配置限制)

b)第二部分:events 块

events:影响 nginx 和用户网络的连接.

events {worker_connections  1024; #最大连接数1024个,需灵活配置
}

c)第三部分:http 块

http块:包括文件引入、MIME-TYPE 定义,日志自定义、连接超时等.

http {include       mime.types;      # 文件扩展名与文件类型映射表default_type  application/octet-stream;  # 访问到未定义的扩展名的时候,就默认为下载该文件sendfile        on; # 日志自定义keepalive_timeout  65; # 超时时间

http 块中 内嵌的 server 块

和虚拟主机有关系,主要是未来节省硬件成本.

一个 http 块可以包含多个 server 块,而一个 server 块就等于一个虚拟主机.

server 块中又抱哈了 server 块 和 location 块

全局 server 块:

    server {listen       80; # 目前监听的端口号server_name  localhost; # 主机名称

location 块:

   location / {     #表示默认首页root   html;index  index.html index.htm;

root  html 就是根路径,也就是通过 openresty-1.21.4.2-win64\html\ 路径下,去找页面(默认是 index.html 页面,也就是文章开头展示的页面).

最后是对错误页面的描述

        error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}

如果请求出现了 500、502、503、504 错误,就会进入到 50x.html 页面中(一般不会用这些默认的错误页,因此可以将这个配置也删除掉)。

1.3、一些常用配置

1.3.1、location 匹配级别

拿 echo 插件来举例:echo 就是会像网页上输出一些东西.

这里需要先在 server 中配置 "default_type  text/html" ,否则会走默认的 http 块中的下载,如下:

    server {listen       80;server_name  localhost;default_type  text/html;location / {echo "hello nginx";}}

在 openresty-1.21.4.2-win64\ 路径下重新打开一个 cmd 窗口,输入 nginx.exe -s reload 进行重启.

 打开浏览器输入 localhost:80 即可访问.

a)location /

/ 就表示匹配以 "/" 开头的所有请求,例如 location/a、location/ajfdioabgua .......

b)location =

= 优先级最高,表示完全匹配,例如 location = /a 就表示只匹配路由 location/a,其他的都不可以.

配置如下:

    server {listen       80;server_name  localhost;default_type  text/html;location / {echo "hello nginx";}location = /a {echo "=/a";}}

cmd 窗口,输入 nginx.exe -s reload 进行重启.

c)location ^~ 

^~ 优先级比 location / 高,但是匹配规则和 location / 类似.   例如 location ^~ /a 就表示匹配以 /a 开头的所有路由.

 例如配置如下:

    server {listen       80;server_name  localhost;default_type  text/html;location / {echo "hello nginx";}location = /a {echo "=/a";}location ^~ /a {echo "^~ /a";}}

重启 nginx 服务.

1.3.2、实现反向代理

修改 nginx.conf 如下:

    server {listen       80;server_name  localhost;default_type  text/html;location / {proxy_pass "https://www.baidu.com";}}

重启 nginx

访问 localhost 即可转到 "https://www.baidu.com".

有一些额外需要注意的如下:

        location /a {proxy_pass http://ip;}上述配置会导致你在浏览器中输入以下网址:
localhost/a/xxx  => http://ip/a/xxx
        location /a/ {proxy_pass http://ip/;}上述配置会导致你在浏览器中输入以下网址:
localhost/a/xxx  => http://ip/xxx

1.3.3、nginx 配置负载均衡

通过 upstream 来创建一组需要负载均衡服务(默认是轮询策略,如果某个服务器挂了,自动剔除).

    upstream group1 {server 192.168.0.12:80;server 192.168.0.12:81;}server {listen       80;server_name  localhost;default_type  text/html;location /a {proxy_pass "https://group1";}}
a)weight 权重

另外可以通过 weight 来控制需要负载均衡的权重.  权重越大,访问到的概率越大.

比如将权重都配置为 1,表示两者访问到的概率相同.

    upstream group1 {server 192.168.0.12:80 weight=1;server 192.168.0.12:81 weight=1;}server {listen       80;server_name  localhost;default_type  text/html;location /a {proxy_pass "https://group1";}}

 或者将 80 端口的权重改为 10,让其访问到的概率大一些.

    upstream group1 {server 192.168.0.12:80 weight=10;server 192.168.0.12:81 weight=1;}server {listen       80;server_name  localhost;default_type  text/html;location /a {proxy_pass "https://group1";}}
b)ip_hash

每个请求按访问 ip 的hash 结果分配,这样子访客固定访问一个后端服务器,可以解决session问题

举个例子:

A用户固定ip,第一次访问到8080 tomcat,那么后面就都是访问到这台机器.

upstream myserver {ip_hash;server 127.0.0.1:8080;server 127.0.0.1:8081;
}

c)fair

根据后端响应时间来分配请求,处理时间短的优先分配.

upstream myserver {server 127.0.0.1:8080;server 127.0.0.1:8081;fair;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/158132.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows Vscode 连接 虚拟机,超详细,含免密免ip配置 以 linux 虚拟机为例

我们这里使用 ssh 进行连接,不了解 ssh 的也没关系,感兴趣的可以自己了解一下。 我的虚拟机是 Ubuntu20.04,如果出现与 Centos 不一样的操作可以自行替换。 (应该不会有??) 一 . 登录虚拟机~&a…

2023年中国云计算软件市场规模、市场结构及市场份额情况分析[图]

云计算是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算软件类型分为三类,即基础设施即服务、平台即服…

EMC Unity存储(VNXe) service Mode和Normal Mode的一些说明

本文介绍下EMC unity存储设备(也包含VNXe存储设备)的两种工作模式: Service mode:也叫做rescue mode,存储OS工作不正常或者有其他故障,就会进入这个模式,无法对外提供服务Normal mode&#xff…

深入JTS事务引擎:理论与实践相结合,掌握高效事务管理的秘诀

事务是可靠应用程序的构建块 如果您阅读过任何有关 J2EE 的介绍性文章或者书籍,那么就会发现,只有一小部分资料是专门针对 Java Transaction Service(JTS)或 Java Transaction API(JTA)的。这并不是因为 J…

基于SpringBoot的网上订餐系统

基于SpringBoot的网上订餐系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:用户、管理员管理员:登录、个人中心、会员管理、…

网络工程师--网络安全与应用案例分析

前言 需要网络安全学习资料的点击链接:【282G】网络安全&黑客技术零基础到进阶全套学习大礼包,免费分享! 案例一: 某单位现有网络拓扑结构如下图所示,实现用户上网功能,该网络使用的网络交换机均为三…

边端小场景音视频流分发架构

备注:绿色线条,红色线条,蓝色线条,均是表示同一路流的不同的协议而已 1)IPC本身的流媒体的能力有限,一般IPC支持的客户端数10~50个,媒体分发能力:10~20路,看设备品牌能力…

linux中搭建c语言环境并编译

安装gcc 安装 yum install gcc 检查 gcc --version 编译文件 1.编写test.c vim test.c #include <stdio.h>int main() {printf(" ***** \n");printf(" * o o * \n");printf("* ^ *\n");printf("* - *\n");printf…

小程序如何设置各种时间参数

在小程序管理员后台->基本设置处&#xff0c;可以设置各种时间。例如待支付提醒时间、待支付取消时间、自动发货时间、自动收货时间、自动评价时间等等。下面具体解释一下各个时间的意思。 1. 待支付提醒时间&#xff1a;在用户下单后&#xff0c;如果一段时间内没有完成支付…

RS485电路设计

引言 今天学习RS485电路的设计。 首先先来了解一下RS485电路是什么干什么。 RS485是一种串行通信协议&#xff0c;也是一种电气标准。它可以用于在远距离范围内传送数据&#xff0c;最长传输距离可以达到1200米&#xff0c;可以支持多个设备同时通信。RS485通常应用于工业自…

【漏洞复现】安全云平台存在任意文件下载getshell

漏洞描述 深圳市强鸿电子有限公司鸿运主动安全云平台存在任意文件下载漏洞,攻击者可通过此漏洞下载敏感文件信息。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权…

SQL 教程||SQL 简介

SQL 简介&#xff08;开个新坑&#xff09; SQL&#xff08;结构化查询语言&#xff09;是用于访问和操作数据库中的数据的标准数据库编程语言。 SQL是关系数据库系统的标准语言。所有关系数据库管理系统(RDMS)&#xff0c;如MySQL、MS Access、Oracle、Sybase、Informix、Po…

开源任务调度框架

本文主要介绍一下任务调度框架Flowjob的整体结构&#xff0c;以及整体的心路历程。 功能介绍 flowjob主要用于搭建统一的任务调度平台&#xff0c;方便各个业务方进行接入使用。 项目在设计的时候&#xff0c;考虑了扩展性、稳定性、伸缩性等相关问题&#xff0c;可以作为公司…

用超声波清洗机来洗眼镜好不好?眼镜超声波清洗机推荐

超声波清洗机不单单可以清洗眼镜了&#xff0c;已经衍生到可以清洗项链首饰化妆刷等物件了&#xff0c;要说利用超声波清洗机洗眼镜好不好的话其实毋庸置疑是不错的&#xff0c;毕竟现在眼镜店都会有一部超声波清洗机放在店里给顾客清洗&#xff0c;也是亲眼所见一副很久没清洗…

3.MySQL数据类型详解

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 1.数据类型分类 2.数值类型 (1).tinyint&#xff0c;smallint类型等 (2)bit类型 (3)小数类型 1).float 2).decimal 3.字符串类型 (1)char (2)varchar (3)char和varchar比较 (4)日期和时间类型 (5)enum和se…

TensorFlow入门(二十五、单个神经元的扩展——Maxout网络)

Maxout网络的原理 Maxout是Goodfellow在2013年提出的一个新的激活函数,与其它的激活函数相比,Maxout是需要参数的,且参数可以通过网络的反向传播得到学习,因此它比其它激活函数有着更好的性能,理论上可以拟合任意凸函数,进而使得网络取得更好的性能。 Maxout网络主要是扩展单个…

React js原生 详解 HTML 拖放 API(鼠标拖放功能)

最近碰到了个需求&#xff0c;大概就是要通过可视化拖拽的方式配置一个冰柜&#xff0c;需要把预设好的冰柜内部架子模板一个个拖到冰箱内。一开始的想法是用鼠标事件&#xff08;mousedown、mouseup等&#xff09;那一套去实现&#xff0c;能实现但是过程过于复杂&#xff0c;…

Blender:制作一个变形动画

就是一个球逐渐地变为一个立方体 首先创建一个球和一个立方体 然后把两个物体放在一起&#xff0c;放缩球&#xff0c;让球包含立方体 之后选中球&#xff0c;为其添加修改器&#xff0c;缩裹 在这里选择缩裹对象为立方体 然后在应用下拉箭头中选择“应用为形态键” 下一步选中…

超越平凡:Topaz Photo AI for Mac带您领略人工智能降噪的魅力

在这个充满噪点和高频信息的时代&#xff0c;照片和视频的降噪成为了一个重要而迫切的需求。Mac用户现在有了一个强大的新工具——Topaz Photo AI for Mac&#xff0c;这是一款利用人工智能技术进行降噪和优化的软件。通过这款软件&#xff0c;您可以轻松地改善图像质量&#x…

如何选择高防CDN和高防IP?

目录 前言 一、对高防CDN的选择 1. 加速性能 2. 抗攻击能力 3. 全球覆盖能力 4. 可靠性和稳定性 二、对高防IP的选择 1. 防御能力 2. 服务质量 3. 安全性 4. 价格 三、高防CDN和高防IP的优缺点对比 1. 高防CDN的优缺点 2. 高防IP的优缺点 总结 前言 随着互联网…