目录

  • 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 超时时间,单位为毫秒