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;
 
}
相关推荐
墨鸦_Cormorant12 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
一只爱撸猫的程序猿12 小时前
一个简单的Linux 服务器性能优化案例
linux·mysql·nginx
DC_BLOG16 小时前
Linux-Nginx虚拟主机
linux·运维·nginx
Stara051116 小时前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
oushaojun220 小时前
ubuntu中使用ffmpeg和nginx推流rtmp视频
nginx·ubuntu·ffmpeg·rtmp
ladymorgana21 小时前
【Nginx从入门到精通】05-安装部署-虚拟机不能上网简单排错
网络·nginx·智能路由器
苹果醋31 天前
Redis | 第3章 对象《Redis设计与实现》
java·运维·spring boot·mysql·nginx
yangshuo12812 天前
Docker-Compose 快速部署安装 Nginx 或其他应用
运维·nginx·docker
.Ayang2 天前
【vulhub】nginx解析漏洞(nginx_parsing_vulnerability)
计算机网络·nginx·安全·web安全·网络安全·系统安全·网络攻击模型
小韩加油呀2 天前
nginx配置不缓存资源
nginx·缓存