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;
 
}
相关推荐
JustCouvrir16 小时前
macOS|前端工程部署到Nginx服务器
服务器·前端·nginx
AlbertS17 小时前
使用 Let’s Encrypt 获取免费SSL证书
nginx·免费·centos7·ssl证书·let’s encrypt
航月17 小时前
FTP、ISCSI、CHRONY、DNS、NFS、DOCKER、MARIADB、NGINX、PHP、CA各服务开启方法
nginx·docker·mariadb
IT-民工211101 天前
nginx监控指标有哪些
运维·nginx
陌路物是人非1 天前
docker对nginx.conf进行修改后页面无变化或页面报错
nginx·docker
草明2 天前
Nginx 做反向代理,一个服务优先被使用,当无法提供服务时才使用其他的备用服务
运维·nginx·github
吉吉612 天前
Nginx:我自己的网站
运维·nginx
凉忆-2 天前
nginx安装ssl模块教程
运维·nginx·ssl
俎树振2 天前
树莓派上安装与配置 Nginx Web 服务器教程
服务器·前端·nginx
Karoku0662 天前
【缓存与加速技术实践】Web缓存代理与CDN内容分发网络
运维·数据库·redis·mysql·nginx·缓存