反向代理概念
Nginx反向代理(Reverse Proxy)是指代理服务器接收客户端的请求,然后将请求转发给后端服务器,再将后端服务器的响应返回给客户端。与正向代理不同,正向代理是客户端向代理服务器发送请求,再由代理服务器向目标服务器转发请求。
在反向代理中,客户端不需要知道后端真实的服务器地址,只需要知道代理服务器的地址即可。这种架构能够提高服务器的安全性、可伸缩性和可靠性,同时也能够对后端服务器进行负载均衡,提高系统的性能和可用性。
添加反向代理配置
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location / {
proxy_pass http://43.143.82.81:80;
}
示例
解决需求:
访问http://43.143.82.81/ 实际上是访问 http://106.52.36.65:80
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name localhost;
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_set_header Host $http_host; #
proxy_set_header X-Real-IP $remote_addr; #实际访问的ip地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; #协议
location / {
proxy_pass http://106.52.36.65:80;
}
}
}
访问:
http://192.168.56.10/
负载均衡概念:负载均衡(Load Balancing)是一种将请求流量分配到多个服务器上,以达到提高系统性能、可用性和可伸缩性的技术。当系统流量过大时,单个服务器难以承受,容易出现性能瓶颈,甚至崩溃。而负载均衡则可以在多台服务器之间分配负载,将请求流量平均分担到多台服务器上,从而提高系统的响应速度和可用性。
负载均衡实现
在反向代理基础上实现负载均衡
负载均衡策略
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除宕机的服务(心跳检测)。
upstream backserver {
server 192.168.3.2;
server 192.168.3.3;
}
实例:
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
# 轮询访问
upstream lvs {
server 192.168.3.2;
server 192.168.3.3;
}
server {
listen 80;
server_name localhost;
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_set_header Host $http_host; #
proxy_set_header X-Real-IP $remote_addr; #实际访问的ip地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; #协议
location / {
# 以变量形式输出ip地址
proxy_pass http://lvs;
}
}
}
2.权重weight(加权重,权重越大的机器会优先处理请求)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 。
upstream backserver {
server 192.168.3.2 weight=1;
server 192.168.3.3 weight=2; #权重为2,优先处理请求
}
3.ip_hash( IP绑定)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.3.2;
server 192.168.3.3;
}
4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server 192.168.3.2;
server 192.168.3.3;
fair;
}
5.url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server 192.168.3.2;
server 192.168.3.3;
hash $request_uri;
hash_method crc32;
}
负载均衡优点:
- 提高系统性能:通过将请求分散到多个服务器上,降低单个服务器的负载,从而提高系统的性能。
- 提高系统可用性:通过多台服务器的冗余性,当某一台服务器出现故障时,可以自动将请求流量切换到其他服务器上,提高系统的可用性。
- 提高系统的可扩展性:通过增加服务器的数量,可以扩大系统的容量,适应不断增长的请求流量。
- 方便管理和维护:通过集中管理和分配请求流量,方便系统的管理和维护。