Nginx反向代理详解

Nginx反向代理详解

nginx反向代理是一种常用的服务器架构设计方案,其原理是将客户端请求先发送到反向代理服务器,反向代理服务器再将请求转发到后端真实服务器处理,并将处理结果返回给客户端,从而实现负载均衡、高可用、安全和减轻后端服务器压力等效果。

反向代理

代理其实就是一个中介,A和B本来可以直连,中间插入一个C,A借助C和B连接,C就是代理。刚开始的时候,代理多数是帮助client访问server端,也就是正向代理。后来又有了帮助server端响应client请求的反向代理。

特点:

  • 代理的是server端
  • server端对client是透明的不可见的
  • client访问时,输入的是代理的地址(proxy)

下面是实现nginx反向代理的步骤:

  1. 安装nginx

    可以查看本人的另一篇文章(Centos7安装配置nginx

  2. 配置反向代理

在nginx配置文件中添加以下内容:

shell 复制代码
location / {
    proxy_pass http://backend_server;
}

其中,backend_server为后端真实服务器地址。

  1. 配置负载均衡

在nginx配置文件中添加以下内容:

shell 复制代码
upstream backend_servers {
    server backend_server_1;
    server backend_server_2;
}

location / {
    proxy_pass http://backend_servers;
}

其中,backend_server_1backend_server_2为后端真实服务器地址,nginx会将请求轮流转发到这两台服务器上。

  1. 配置HTTPS

在nginx配置文件中添加以下内容:

shell 复制代码
server {
    listen 443;
    server_name domain.com;

    ssl on;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://backend_servers;
    }
}

其中,domain.com为要代理的域名,/path/to/cert.pem/path/to/key.pem为SSL证书和私钥的路径。

在这里给大家一个配置案例:

  1. 重启nginx

完成以上配置后,重启nginx服务即可生效。

upstream部分参数解释

server : 内容为ip地址,指定一个主机参与集群请求分发
weight : 内容为数字,权重比,数字越大,所获得的请求越多
max_fails : 内容为数字,nginx尝试连接该节点的失败次数
fail_timeout : 内容为数字单位秒,与失败次数联合使用,到达上述失败次数后间隔多长再次请求
backup : 备份机,当其他非备份机无法使用时请求分到备份机,在使用ip_hash时无效
down: 剔除,该机器不参与请求分发,只在使用ip_hash时有效

负载均衡(Load balancing),意思是将负载(工作任务,访问请求)进行平衡,用来在多个计算机(计算机集群)中分配负载,以达到集群系统整体的最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

Nginx的负载均衡策略

轮询(默认)
  • 优点:实现简单

  • 缺点:不考虑每台服务器的处理能力

  • 配置示例如下:

shell 复制代码
upstream 集群名 {
# 需要负载的server列表
server ip1:port;
server ip2:port;
server ip3:port;
}
权重(使用较多)
  • 优点:考虑了每台服务器处理能力的不同,哪台机器性能高就给哪台机器的权重高一些

  • 配置示例如下:

shell 复制代码
upstream 集群名 {
# 需要负载的server列表,weight表示权重
server ip1:port weight=1;
server ip2:port weight=2;
server ip3:port weight=4;
}

在这里说明一下,按照上面的配置意思就是(4+2+1)七次里面一定会出现1次ip1:port、2次ip2:port、4次ip3:port,而不是按照百分比(百分比的话就是这其次里可能全是ip1:port这就属于概率性问题了)

ip_hash
  • 优点:根据用户的ip地址能实现同一个用户始终访问同一个服务器

  • 缺点:根据 ip hash 不一定平均

  • 配置示例如下:

shell 复制代码
upstream 集群名 {
ip_hash;
# 需要负载的server列表
server ip1:port;
server ip2:port;
server ip3:port;
}
fair

fair可以根据页面大小、加载时间长短智能的进行负载均衡

shell 复制代码
upstream backend{
	fair;
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
least_conn\

请求将被传递给当前拥有最少活跃连接的server

shell 复制代码
upstream backend {
    zone backends 64k;
    least_conn;
    server 10.10.10.2 weight=2;
    server 10.10.10.4 weight=1;
    server 10.10.10.6 weight=1; 
}
url_hash

和ip_hash类似,根据请求路径实现同一个请求访问同一个tomcat

shell 复制代码
upstream somestream {
    hash $request_uri;
    server 192.168.244.1:8080;
    server 192.168.244.2:8080;
    server 192.168.244.3:8080;
    server 192.168.244.4:8080;
 
}
相关推荐
阿松哥哥20186 小时前
linux环境使用源码方式安装nginx(centos)
linux·nginx·centos
与君共勉1213811 小时前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
okok__TXF12 小时前
Nginx + Lua脚本打配合
nginx·lua
青灯文案112 小时前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
小屁不止是运维12 小时前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
恩爸编程20 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
努力--坚持1 天前
电商项目-网站首页高可用(一)
nginx·lua·openresty
loong_XL1 天前
服务器ip:port服务用nginx 域名代理
服务器·tcp/ip·nginx
苹果醋31 天前
SpringBoot快速入门
java·运维·spring boot·mysql·nginx
永卿0011 天前
nginx学习总结(不包含安装过程)
运维·nginx·负载均衡