@TOC 学习背景什么是nginx? 【百度百科】 除了反向代理,欧博官网nginx还支持正向代理、负载均衡以及基于SSL安全证书的HTTPS访问等功能特性~ 什么是代理?来一张图了解下 代理又分为正向代理和反向代理。 二、正向代理 1.1 什么是正向代理? 先来看张图~ 【再举个栗子】 某同学喜欢面向搜索引擎编程,想通过 百度 搜索引擎查找一些学习资料,但是有些网站直接访问可能不太安全,会暴露自己的IP,同学比较苦恼,想着怎样才能使用百度 搜索自己想要的学习资料,又不会暴露自己的IP在网站上呢? 同学非常兴奋,说自己了解过nginx,但是啥是正向代理啊? 正向代理,指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务。 同学觉得有点意思,于是又问,那nginx如何实现正向代理啊? 1.2 如何实现nginx正向代理?(1)正向代理转发https说明 在实现nginx正向代理之前,先说明一下,现在的网站基本上都是https,因此要实现nginx正向代理转发请求,除了要配置转发http80端口的请求,欧博还有配置https443端口的请求~ 一开始我也像上面那样配置,虽然http请求正常转发了,但是发现https并没有转成功,而是报错HTTP/1.1 400 Bad Request~ 后来才了解到,nginx官方并不支持直接转发https请求,但是阿里的一个大佬对nginx拓展了一个ngx_http_proxy_connect_module模块,并且在github上开源了 https://github.com/chobits/ngx_http_proxy_connect_module 不过维护的ngx_http_proxy_connect_module模块的补丁也是有nginx版本限制的(目前维护了1.4.x~1.19.x版本),如README.md说明: 如果你安装的nginx版本不在1.4.x~1.19.x这个范围内,那无法支持正向代理转发https请求。 (2)安装nginx 这里安装nginx通过install进行编译安装,编译后默认安装目录为/usr/local/nginx,后续配置新模块ngx_http_proxy_connect_module还需要重新install编译一次~ (3)下载新模块 (4)解压新模块源码 (5)添加新模块到nginx –说明: 使用root用户安装和编译新模块完成后,如果你希望后续不使用root用户运维,可以授权安装目录/usr/local/nginx给nginx用户或者其他普通用户~ chown -R nginx:nginx /usr/local/nginx chown root:root /usr/local/nginx/sbin/nginx chmod +s /usr/local/nginx/sbin/nginx–说明: (6)修改nginx的配置 这两个server主要配置是对DNS解析和proxy_pass代理进行: #正向代理转发http请求 server { #指定DNS服务器IP地址 resolver 114.114.114.114; #监听80端口,http默认端口80 listen 80; #服务器IP或域名 server_name localhost; #正向代理转发http请求 location / { proxy_pass $host$request_uri; proxy_set_header HOST $host; proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } } #正向代理转发https请求 server { #指定DNS服务器IP地址 resolver 114.114.114.114; #监听443端口,https默认端口443 listen 443; #正向代理转发https请求 proxy_connect; proxy_connect_allow 443 563; proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; location / { proxy_pass $host; proxy_set_header Host $host; } }– DNS说明: (7)检查和刷新nginx配置 /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload 1.3 客户端访问(验证正向代理)客户端要代理访问目标网站示例对象: (1)客户端–Windows浏览器访问 浏览器访问 和https://www.baidu.com/ 实时查看nginx日志 tail -f /usr/local/nginx/logs/access.log通过实时查看nginx的访问日志,可以看到Windows下设置代理IP和端口后,本地电脑访问的所有网页会通过代理服务器进行访问网页,实现了正向代理的功能,并且隐藏了用户自己真实的IP~ (2)客户端–Linux代理访问 nginx正向代理转发https成功: 先来一张图了解下~ 相比于正向代理,反向代理的定义如下: 反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。 (1)修改nginx配置 nginx反向代理都是结合负载均衡来实现的,这里先直接提供反向代理+负载均衡的配置,负载均衡后一章节介绍~ #反向代理+负载均衡 upstream reverseProxyServer{ #负载均衡应用服务器A: 权重为10,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器 server 应用服务器A的IP:8080 weight=10 max_fails=2 fail_timeout=10s; #负载均衡应用服务器B: 代理服务器权重为5,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器 server 应用服务器B的IP:8080 weight=5 fail_timeout=10s max_fails=2; #负载均衡应用服务器C: 代理服务器权重为5,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器 server 应用服务器C的IP:8080 weight=5 fail_timeout=10s max_fails=2; } server { #监听80端口,http默认端口80 listen 80; #服务器IP或域名 server_name localhost; #反向代理请求路径中含有/appname的所有请求到upstream定义的对应反向代理模块 location /appname { proxy_pass ; } } (2)检查和刷新nginx配置 /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload(3)浏览器访问 再来看下前面介绍反向代理的这张图~ 可以看到负载均衡(Load Balance)的主要作用是采用了负载均衡算法将请求分发到集群模式中的应用服务器上,这样即使某个后台应用服务器挂了,其他应用服务器还可以正常接收请求,实现了高可用,并且集群模式模式下的应用服务器支持纵向扩展,可以应对业务快速增长带来的高并发应用场景~ 3.2 负载均衡算法有哪些? 负载均衡算法常用的有轮询、权重和ip_hash算法,默认是轮询算法~ (1)基于轮询的算法 (2)基于权重的算法 (3)基于ip_hash的算法 一般使用的是基于权重的算法,因为现在很多情况下都是集群部署,而且集群下的各个服务器资源大多都是不均匀的,资源高的则分配权重高一些,资源低的则分配权重低一些,这种情况使用基于权重的负载均衡算法,可以更高效的利用资源和提高并发处理能力~ 原创不易,觉得有用的小伙伴来个一键三连(点赞+收藏+评论 )走起~ (责任编辑:) |