目录
- nginx代理
- 负载均衡
nginx代理
# 代理方式
##正向代理
此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
##反向代理
多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色
反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!
# Nginx代理服务支持的协议
- ngx_http_uwsgi_module : Python
- ngx_http_fastcgi_module : PHP
- ngx_http_scgi_module : Java
- ngx_http_v2_module : Golang
- ngx_http_proxy_module : HTTP
# nginx代理常用参数
1、添加发往后端服务器的请求头信息
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $http_host;
proxy_set_header Connection close;
Context: http, server, location
# 用户请求的时候HOST的值是game.test.com, 那么代理服务会像后端传递请求的还是game.test.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2、代理到后端的TCP连接、响应、返回等超时时间
## nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
## nginx代理等待后端服务器的响应时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
## 后端服务器数据回传给nginx代理超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
3、proxy_buffer代理缓冲区
##nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
##设置nginx代理保存用户头信息的缓冲区大小
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
## proxy_buffers 缓冲区
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
4、配置代理优化文件(将常用参数封装到新建文件内,之后只需要使用include就可以配置参数)
[root@lb01 ~]# vim /etc/nginx/proxy_params
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_connect_timeout 10s;
proxy_read_timeout 10s;
proxy_send_timeout 10s;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
上面的参数内容只需要 --->include /etc/nginx/proxy_params;
[root@lb01 conf.d]# cat game.conf
server {
listen 80;
server_name _;
location / {
proxy_pass http://172.16.1.7:80;
include /etc/nginx/proxy_params;
}
}
# nginx反向代理实践(用nginx反向代理来实现负载均衡lb01服务器代理web02、web01服务器)
1、在web01和web02上安装nginx,将相关的游戏配置好,统一配置
yum install nginx -y
2、lb01服务器配置
##安装nginx
yum install nginx -y
##简化nginx.conf文件
vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
}
##创建一个IP连接池
cd /etc/nginx/conf.d
vim game.conf
upstream game {
server 172.16.1.8:80;
}
server {
server_name game1.test.com;
listen 80;
location / {
proxy_pass http://game;
}
}
##启动nginx
systemctl start nginx
##修改Windows的host文件
##测试
负载均衡(nginx负载均衡调度算法和后端服务状态)
#nginx调度算法
1、轮询的配置方法(默认)
按时间顺序逐一分配到不同的后端服务器(默认)
upstream game{
server 172.16.1.7;
server 172.16.1.8;
}
2、加权轮询配置
加权轮询,weight值越大,分配到的访问几率越高
upstream game{
server 172.16.1.7 weight=1;
server 172.16.1.8 weight=2;
}
3、ip_bash配置方法
每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
upstream web_group {
server 172.16.1.7:80;
server 172.16.1.8;
ip_hash;
}
#一般用来做会话保持
4、备用节点配置方法
当正常的节点全部丧失服务能力,备用节点立即顶上。
upstream game{
server 172.16.1.7 backup;
server 172.16.1.8;
}
# 后端服务状态
1、标记为下线状态:down
upstream game{
server 172.16.1.7 down;
server 172.16.1.8;
}
2、配置错误容忍度:max_fails=3 fail_timeout=10s
upstream game{
server 172.16.1.7 max_fails=3 fail_timeout=10s;
server 172.16.1.8;
}
server {
server_name game1.test.com;
listen 80;
location / {
proxy_pass http://game;
# 必须增加状态标记
proxy_next_upstream http_404 http_500 http_502 http_503 http_504 http_403 http_429;
}
}
3、监控检测:check interval=3000 rise=2 fall=3 timeout=1000 type=tcp(也必须要标记)
interval 检测间隔时间,单位为毫秒
rise 表示请求2次正常,标记此后端的状态为up
fall 表示请求3次失败,标记此后端的状态为down
type 类型为tcp
timeout 超时时间,单位为毫秒