nginx正向代理、反向代理、7层负载均衡、4层负载均衡;Buffer缓冲和Cache缓存;nginx配置支持SSL
nginx正向代理、反向代理、7层负载均衡、4层负载均衡
正向代理 代理的是客户端
反向代理 代理的是服务器
从配置来看,正向代理和反向代理的配置区别在于proxy_pass的配置
1.正向代理proxy_pass配置的是动态url
2.反向代理proxy_pass配置的是静态服务器

nginx代理配置相关指令:proxy_pass、proxy_set_header、proxy_redirect、upstream、server ================================================================================================================== proxy_pass:该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式。 语法 proxy_pass URL; #URL:为要设置的被代理服务器地址,包含传输协议( http , https:// )、主机名称或IP地址加端口号、URI等要素。 默认值 — 位置 location proxy_pass http://$host$request_uri; · #配置正向代理,即根据访问的url动态进行代理 proxy_pass http://www.baidu.com; #相当于固定代理,只要location后面的url在www.baidu.com存在,则会去代理;否则404 proxy_set_header:该指令可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器 语法 proxy_set_header field value; 默认值1 proxy_set_header Host $proxy_host; 默认值2 proxy_set_header Connection close; 位置 http、server、location proxy_redirect:该指令是用来重置头信息中的"Location"和"Refresh"的值。 语法1 proxy_redirect redirect replacement; 语法2 proxy_redirect default; 语法3 proxy_redirect off; 默认值 proxy_redirect default; 位置 http、server、location upstream指令:该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重,默认为1。 语法 upstream name {...} 默认值 — 位置 http server指令:该指令用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者unix socket 语法 server name [paramerters] 默认值 — 位置 upstream

配置nginx正向代理 ==================================================================== 配置正向代理的步骤 1.配置nginx.conf中http块server server { listen *:80; resolver 8.8.8.8; location / { proxy_pass http://$host$request_uri; } } 2.windows配置代理 internet属性-->连接-->局域网设置-->代理服务器 #测试:windows配置代理后,访问各大网站,均无法打开,应该是nginx配置存在问题。使用自己搭建的环境来进行代理测试,测试结果显示代理配置正常。

反向代理配置示例1:代理的内容不一样 server { listen *:80; #resolver 8.8.8.8; location /server1 { #根据访问的链接不同,代理到不同的服务器 #proxy_pass http://$host$request_uri; proxy_pass http://192.168.1.150; } location /server2 { #proxy_pass http://$host$request_uri; proxy_pass http://192.168.1.151; } location /server3 { #proxy_pass http://$host$request_uri; proxy_pass http://192.168.1.152; } }

负载均衡概述:作用、常见方式、四层和七层负载均衡的区别 =============================================================================================== 负载均衡的作用 1、解决服务器的高并发压力,提高应用程序的处理性能。 2、提供故障转移,实现高可用。 3、通过添加或减少服务器数量,增强网站的可扩展性。 4、在负载均衡器上进行过滤,可以提高系统的安全性。 负载均衡常用的处理方式 方式一:用户手动选择 方式二:DNS轮询方式 缺点:可靠性低、负载均衡不均衡 方式三:四/七层负载均衡 实现四层负载均衡的方式: 硬件:F5 BIG-IP、Radware等 软件:LVS、Nginx、Hayproxy等 实现七层负载均衡的方式: 软件:Nginx、Hayproxy等 四层和七层负载均衡的区别 1.四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。 2.四层负载均衡不识别域名,而七层负载均衡识别域名。

Nginx七层负载均衡:状态、策略 =================================================================== Nginx七层负载均衡 Nginx要实现七层负载均衡需要用到proxy_pass代理模块配置。 负载均衡状态 状态 概述 down 当前的server暂时不参与负载均衡 backup 预留的备份服务器 max_fails 允许请求失败的次数,默认为1。 fail_timeout 经过max_fails失败后, 服务暂停时间,默认是10秒。 max_conns 限制最大的接收连接数 max_conns=number:用来设置代理服务器同时活动链接的最大数量,默认为0,表示不限制,使用该配置可以根据后端服务器处理请求的并发量来进行设置,防止后端服务器被压垮。 负载均衡策略 算法名称 说明 轮询 默认方式 weight 权重方式 ip_hash 依据ip分配方式 least_conn 依据最少连接方式 url_hash 依据URL分配方式 fair 依据响应时间方式

反向代理配置示例2:7层负载均衡(代理的内容一样) 反向代理示例1 upstream backend{ server 192.168.1.150; server 192.168.1.151; server 192.168.1.152; } server { listen *:80; location / { proxy_pass http://backend; } } ----------------------------------- 反向代理示例2(其实与示例1一样,只不过名称用纯数字来表示) upstream 50000{ server 192.168.1.150; server 192.168.1.151; server 192.168.1.152; } server { listen *:80; location / { proxy_pass http://50000; } } ----------------------------------- 反向代理示例3(配置负载均衡状态) upstream 50000{ server 192.168.1.150 down; #当前的server暂时不参与负载均衡 server 192.168.1.151 backup; #预留的备份服务器;测试:当其他主服务器挂掉时,第一次访问需要的时间比较久,估计是nginx代理服务器需要进行探测(等待一次超时),后续的测试就比较顺利了 server 192.168.1.152 max_fails=3 fail_timeout=15; #max_fails=3:允许失败3次,默认1次;fail_timeout=15:失败超时时间15秒,默认10秒 } server { listen *:80; location / { proxy_pass http://50000; } } ----------------------------------- 反向代理示例4(配置负载均衡策略) upstream 50000{ #server 192.168.1.150; #默认为轮询rr模式 #server 192.168.1.151; #server 192.168.1.152; #server 192.168.1.150 weight=10; #权重wrr方式,默认为1 #server 192.168.1.151 weight=5; #server 192.168.1.152 weight=3; } upstream 50000{ #ip_hash; #配置为ip_hash负载均衡策略;#ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上 #least_conn; #最少连接,把请求转发给连接数较少的后端服务器。 #hash $request_uri; #按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,用来提高命中缓存。场景:服务器被访问后需要去数据库获取数据,然后会在本地进行缓存,方便下一次的访问;通过url的hash,可以使nginx代理将请求发往已缓存的那台设备,从而提高效率。 fair; #fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。 server 192.168.1.150; server 192.168.1.151; server 192.168.1.152; } server { listen *:80; location / { proxy_pass http://50000; } }

Nginx四层负载均衡概述;stream指令、upstream指令;4层负载均衡配置示例 =================================================================================== Nginx四层负载均衡 Nginx在1.9之后,增加了一个stream模块,用来实现四层协议的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡。 Nginx默认是没有编译这个模块的,需要使用到stream模块,那么需要在编译的时候加上--with-stream 完成添加--with-stream 的实现步骤: 1.将原有/usr/local/nginx/sbin/nginx进行备份 2.拷贝nginx之前的配置信息 3.在nginx的安装源码进行配置指定对应模块 ./configure --with-stream 4.通过make模板进行编译 5.将objs下面的nginx移动到/usr/local/nginx/sbin下 6.在源码目录下执行 make upgrade进行升级,这个可以实现不停机添加新模块的功能 ---------------------------------------------------------------------------------------- stream指令:该指令提供在其中指定流服务器指令的配置文件上下文。和http指令同级。 语法 stream { ... } 默认值 — 位置 main upstream指令 该指令和http的upstream指令是类似的。 upstream指令:该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重,默认为1。 语法 upstream name {...} 默认值 — 位置 http ---------------------------------------------------------------------------------------- #stream和http指令同级; #http指令是7层负载均衡 #stream指令是4层负载均衡;所以配置习惯上还是有区别的,例如stream中,server一定要配置port,proxy_pass配置不能加"http"??? stream{ #4层负载均衡 server { listen *:88; proxy_pass 50001; } upstream 50001{ server 10.0.1.150:80; server 10.0.1.152:80; } } http { #7层负载均衡 server { listen *:80; location / { proxy_pass http://50000; } } upstream 50000{ server 10.0.1.151; server 10.0.1.152; } }
反向代理系统调优:Buffer缓冲和Cache缓存

Buffer缓冲和Cache缓存 ============================================================================== 反向代理系统调优 反向代理值Buffer缓冲和Cache缓存 相同点: 两种方式都是用来提供IO吞吐效率,都是用来提升Nginx代理的性能。 不同点: 缓冲主要用来解决不同设备之间数据传递速度不一致导致的性能低的问题,缓冲中的数据一旦此次操作完成后,就可以删除。 缓存主要是备份,将被代理服务器的数据缓存一份到代理服务器,这样的话,客户端再次获取相同数据的时候,就只需要从代理服务器上获取,效率较高,缓存中的数据可以重复使用,只有满足特定条件才会删除.

Proxy Buffer相关指令:proxy_buffering、proxy_buffers、proxy_buffer_size、proxy_busy_buffers_size、proxy_temp_path、proxy_temp_file_write_size ============================================================================== proxy_buffering :该指令用来开启或者关闭代理服务器的缓冲区; 语法 proxy_buffering on|off; 默认值 proxy_buffering on; 位置 http、server、location proxy_buffers:该指令用来指定单个连接从代理服务器读取响应的缓存区的个数和大小。 语法 proxy_buffers number size; number:缓冲区的个数 size:每个缓冲区的大小,缓冲区的总大小就是number*size 默认值 proxy_buffers 8 4k | 8K;(与系统平台有关) 位置 http、server、location proxy_buffer_size:该指令用来设置从被代理服务器获取的第一部分响应数据的大小。保持与proxy_buffers中的size一致即可,当然也可以更小。 语法 proxy_buffer_size size; 默认值 proxy_buffer_size 4k | 8k;(与系统平台有关) 位置 http、server、location proxy_busy_buffers_size:该指令用来限制同时处于BUSY状态的缓冲总大小。 语法 proxy_busy_buffers_size size; 默认值 proxy_busy_buffers_size 8k|16K; 位置 http、server、location proxy_temp_path:当缓冲区存满后,仍未被Nginx服务器完全接受,响应数据就会被临时存放在磁盘文件上,该指令设置文件路径 语法 proxy_temp_path path; 默认值 proxy_temp_path proxy_temp; 位置 http、server、location 注意:path最多设置三层。 proxy_temp_file_write_size:该指令用来设置磁盘上缓冲文件的大小。 语法 proxy_temp_file_write_size size; 默认值 proxy_temp_file_write_size 8K|16K; 位置 http、server、location 通用网站的配置 proxy_buffering on; proxy_buffer_size 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k;

缓存概述(应用场景、优缺点);相关指令:proxy_cache_path、proxy_cache、proxy_cache_key、proxy_cache_valid、proxy_cache_min_uses、proxy_cache_methods;缓存配置示例 ============================================================================== 缓存:数据交换的缓冲区(称作:Cache),当用户要获取数据的时候,会先从缓存中去查询获取数据,如果缓存中有就会直接返回给用户,如果缓存中没有,则会发请求从服务器重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据。 场景 作用 操作系统磁盘缓存 减少磁盘机械操作 数据库缓存 减少文件系统的IO操作 应用程序缓存 减少对数据库的查询 Web服务器缓存 减少对应用服务器请求次数 浏览器缓存 减少与后台的交互次数 缓存的优点 1.减少数据传输,节省网络流量,加快响应速度,提升用户体验; 2.减轻服务器压力; 3.提供服务端的高可用性; 缓存的缺点 1.数据的不一致 2.增加成本 Nginx是基于Proxy Store来实现的,其原理是把URL及相关组合当做Key,在使用MD5算法对Key进行哈希,得到硬盘上对应的哈希目录路径,从而将缓存内容保存在该目录中。它可以支持任意URL连接,同时也支持404/301/302这样的非200状态码。 Nginx既可以支持对指定URL或者状态码设置过期时间,也可以使用purge命令来手动清除指定URL的缓存。 --------------------------------------------------------------------------------- Nginx缓存设置的相关指令 Nginx的web缓存服务主要是使用ngx_http_proxy_module 模块相关指令集来完成。 proxy_cache_path:该指定用于设置缓存文件的存放路径 语法 proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size]; #path:缓存路径地址 #levels: 指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2 #keys_zone:用来为这个缓存区设置名称和指定大小 #inactive:指定缓存的数据多次时间未被访问就将被删除 #max_size:设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源 默认值 — 位置 http proxy_cache:该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存。 语法 proxy_cache zone_name|off; #zone_name:指定使用缓存区的名称 默认值 proxy_cache off; 位置 http、server、location proxy_cache_key:该指令用来设置web缓存的key值,Nginx会根据key值MD5哈希存缓存。 语法 proxy_cache_key key; 默认值 proxy_cache_key $scheme$proxy_host$request_uri; 位置 http、server、location proxy_cache_valid:该指令用来对不同返回状态码的URL设置不同的缓存时间 语法 proxy_cache_valid [code ...] time; 默认值 — 位置 http、server、location proxy_cache_min_uses:该指令用来设置资源被访问多少次后被缓存 语法 proxy_cache_min_uses number; 默认值 proxy_cache_min_uses 1; 位置 http、server、location proxy_cache_methods:该指令用户设置缓存哪些HTTP方法 语法 proxy_cache_methods GET|HEAD|POST; #默认缓存HTTP的GET和HEAD方法,不缓存POST方法。 默认值 proxy_cache_methods GET HEAD; 位置 http、server、location --------------------------------------------------------------------------------- 缓存配置示例 http { ...... upstream 50000{ server 10.0.1.150; server 10.0.1.151; server 10.0.1.152; } proxy_cache_path /usr/local/proxy_cache levels=2:1 keys_zone=itcast:200m inactive=1m max_size=20g; server { listen *:80; location / { proxy_pass http://50000; } proxy_cache itcast; #指定使用缓存区的名称 proxy_cache_key itheima; #使用这种固定的key值,只能用于演示,没有实际意义;因为会导致不同的页面使用相同的缓存 #proxy_cache_key $scheme$proxy_host$request_uri; proxy_cache_min_uses 5; #设置资源被使用5次后被缓存;默认1次 proxy_cache_valid 200 5d; #该指令用来对不同返回状态码的URL设置不同的缓存时间 proxy_cache_valid 404 30s; proxy_cache_valid any 1m; add_header nginx-cache "$upstream_cache_status"; #此处添加了响应头;在测试时,可以在chrome页面清晰地看到是否命中缓存"nginx-cache: HIT"/"nginx-cache: MISS" } }

Nginx缓存的清除 方式一:删除对应的缓存目录 rm -rf /usr/local/1 proxy_cache/...... 方式二:使用第三方扩展模块ngx_cache_purge (1)下载ngx_cache_purge模块对应的资源包,并上传到服务器上。 ngx_cache_purge-2.3.tar.gz (2)对资源文件进行解压缩 tar -zxf ngx_cache_purge-2.3.tar.gz (3)修改文件夹名称,方便后期配置 mv ngx_cache_purge-2.3 purge (4)查询Nginx的配置参数 nginx -V (5)进入Nginx的安装目录,使用./configure进行参数配置 ./configure --add-module=/root/nginx/module/purge (6)使用make进行编译 make (7)将nginx安装目录的nginx二级制可执行文件备份 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold (8)将编译后的objs中的nginx拷贝到nginx的sbin目录下 cp objs/nginx usr/local/nginx/sbin (9)使用make进行升级 make upgrade (10)在nginx配置文件中进行如下配置 server{ location ~/purge(/.*) { proxy_cache_purge itcast itheima; } }

Nginx设置资源不缓存相关指令:proxy_no_cache、proxy_cache_bypass;配置示例 =========================================================================== Nginx设置资源不缓存 proxy_no_cache:该指令是用来定义不将数据进行缓存的条件。 语法 proxy_no_cache string ...; 默认值 — 位置 http、server、location proxy_cache_bypass:该指令是用来设置不从缓存中获取数据的条件。 语法 proxy_cache_bypass string ...; 默认值 — 位置 http、server、location proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment; $cookie_nocache:指的是当前请求的cookie中键的名称为nocache对应的值 $arg_nocache和$arg_comment:指的是当前请求的参数中属性名为nocache和comment对应的属性值 --------------------------------------------------------------------------------- 配置示例 server{ listen 8080; server_name localhost; location / { if ($request_uri ~ /.*\.js$){ set $nocache 1; } proxy_no_cache $nocache $cookie_nocache$arg_nocache $arg_comment; proxy_cache_bypass $nocache $cookie_nocache$arg_nocache $arg_comment; } }
nginx配置支持SSL

nginx添加SSL的支持;ssl相关指令:ssl、ssl_certificate、ssl_certificate_key、ssl_session_cache、ssl_session_timeout、ssl_ciphers、ssl_prefer_server_ciphers ======================================================================================= HTTPS是一种通过计算机网络进行安全通信的传输协议。它经由HTTP进行通信,利用SSL/TLS建立全通信,加密数据包,确保数据的安全性。 SSL(Secure Sockets Layer)安全套接层 TLS(Transport Layer Security)传输层安全 上述这两个是为网络通信提供安全及数据完整性的一种安全协议,TLS和SSL在传输层和应用层对网络连接进行加密。 Nginx要想使用SSL,需要满足一个条件即需要添加一个模块--with-http_ssl_module nginx添加SSL的支持(yum安装已经默认添加了该模块) 》将原有/usr/local/nginx/sbin/nginx进行备份 》拷贝nginx之前的配置信息 》在nginx的安装源码进行配置指定对应模块 ./configure --with-http_ssl_module 》通过make模板进行编译 》将objs下面的nginx移动到/usr/local/nginx/sbin下 》在源码目录下执行 make upgrade进行升级,这个可以实现不停机添加新模块的功能 --------------------------------------------------------------------------------------- ssl:该指令用来在指定的服务器开启HTTPS,可以使用 listen 443 ssl,后面这种方式更通用些。 语法 ssl on | off; #listen 443 ssl;这种方式其实更通用 默认值 ssl off; 位置 http、server ssl_certificate:为当前这个虚拟主机指定一个带有PEM格式证书的证书。 语法 ssl_certificate file; 默认值 — 位置 http、server ssl_certificate_key:该指令用来指定PEM secret key文件的路径 语法 ssl_ceritificate_key file; 默认值 — 位置 http、server ssl_session_cache:该指令用来配置用于SSL会话的缓存 语法 ssl_sesion_cache off|none|[builtin[:size]]|[shared:name:size] 默认值 ssl_session_cache none; 位置 http、server off:禁用会话缓存,客户端不得重复使用会话 none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数 builtin:内置OpenSSL缓存,仅在一个工作进程中使用。 shared:所有工作进程之间共享缓存,缓存的相关信息用name和size来指定 ssl_session_timeout:开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间。 语法 ssl_session_timeout time; 默认值 ssl_session_timeout 5m; 位置 http、server ssl_ciphers:指出允许的密码,密码指定为OpenSSL支持的格式 语法 ssl_ciphers ciphers; 默认值 ssl_ciphers HIGH:!aNULL:!MD5; 位置 http、server #可以使用openssl ciphers 查看openssl支持的格式。 ssl_prefer_server_ciphers:该指令指定是否服务器密码优先客户端密码 语法 ssl_perfer_server_ciphers on|off; 默认值 ssl_perfer_server_ciphers off; 位置 http、server

ssl证书制作;示例:配置nginx支持SSL =================================================================================== 方式一:使用阿里云/腾讯云等第三方服务进行购买。 方式二:使用openssl生成证书 openssl version #确认当前系统是否有安装openssl mkdir /root/cert cd /root/cert openssl genrsa -des3 -out server.key 1024 #该步骤需要自定义密码 openssl req -new -key server.key -out server.csr cp server.key server.key.org openssl rsa -in server.key.org -out server.key openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt ----------------------------------------------------------------------------------- 配置nginx支持SSL #此配置配置在nginx代理;预期https请求访问到nginx代理后,反向代理访问后端RS server { listen *:443 ssl; #443端口开启ssl验证 ssl_certificate /root/cert/server.crt; #指定一个带有PEM格式证书的证书 ssl_certificate_key /root/cert/server.key; #指定PEM secret key文件的路径 ssl_session_cache shared:SSL:1m; #配置用于SSL会话的缓存;shared:所有工作进程之间共享缓存,缓存的相关信息用name和size来指定 ssl_session_timeout 5m; #开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间。 ssl_ciphers HIGH:!aNULL:!MD5; #指出允许的密码,密码指定为OpenSSL支持的格式 ssl_prefer_server_ciphers on; #指定服务器密码优先客户端密码 location / { proxy_pass http://192.168.1.152; #此处完全可以不配置代理,而使用本地文件 } } 测试:https://192.168.1.88/ 注意:测试时,在url前面手工添加"https://" 测试结果:符合预期,在nginx代理上进行抓包,看到了访问nginx代理的https请求,也看到了代理访问RS的http请求
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?