nginx作为代理WEB服务

一、nginx代理服务
1、概述
代理分类:正向代理、反向代理

2、正向代理
图片[1]众客华禹 – 网站运维分享-IT技术资源教程-运维成长之路-个人随笔-华禹个人博客网站nginx作为代理WEB服务 - 众客华禹众客华禹 – 网站运维分享-IT技术资源教程-运维成长之路-个人随笔-华禹个人博客网站众客华禹
当局域网不能上网时,可以在浏览器设置正向代理满足上网要求
当我们想通过FQ访问国外网站查询资料,可以在浏览器设置正向代理
当服务器只允许某个端的IP访问(比如googe),所以我们需要请求运行访问的那个客户端,在让其帮我们转发请求

3、反向代理
反向代理模型图
服务端有很多工程模块的时候,需要通过Nginx代理实现流量的分发

4、反向代理模式与Nginx代理模块
图片[3]众客华禹 – 网站运维分享-IT技术资源教程-运维成长之路-个人随笔-华禹个人博客网站nginx作为代理WEB服务 - 众客华禹众客华禹 – 网站运维分享-IT技术资源教程-运维成长之路-个人随笔-华禹个人博客网站众客华禹
5、常见的Nginx作为正向代理支持的协议
图片[4]众客华禹 – 网站运维分享-IT技术资源教程-运维成长之路-个人随笔-华禹个人博客网站nginx作为代理WEB服务 - 众客华禹众客华禹 – 网站运维分享-IT技术资源教程-运维成长之路-个人随笔-华禹个人博客网站众客华禹
注意:
不能支持使用HTTPS协议
Nginx使用HTTP协议作为正向代理的协议
Nginx使用正向代理范围比较窄

二、反向代理配置

1、nginx代理配置语法

Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except

http://localhost:8000/uri/
http://192.168.0.10:8000/uri/
http://unix:/tmp/backend.socket:/uri/

2.类似于nopush缓冲区

//尽可能收集所有头请求
Syntax: proxy_buffering on | off;
Default:
proxy_buffering on;
Context: http, server, location

//扩展:
proxy_buffer_size
proxy_buffers
proxy_busy_buffer_size

3.跳转重定向

Syntax: proxy_redirect default;
proxy_redirect off;proxy_redirect redirect replacement;
Default:    proxy_redirect default;
Context:    http, server, location

4.头信息

Syntax: proxy_set_header field value;
Default:    proxy_set_header Host $proxy_host;
            proxy_set_header Connection close;
Context:    http, server, location

//扩展: 
proxy_hide_header
proxy_set_body

5.代理到后端的TCP连接超时

Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location

//扩展
proxy_read_timeout  //以及建立
proxy_send_timeout  //服务端请求完, 发送给客户端时间

6.Proxy常见配置项具体配置如下:

[root@Nginx ~]# vim /etc/nginx/proxy_params
proxy_redirect default;
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 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

//具体location实现
location / {
    proxy_pass http://127.0.0.1:8080;
    include proxy_params;
}

三、nginx正向代理配置

1、nginx正向代理配置

//配置10.0访问限制,仅允许同网段访问
location ~ .*\.(jpg|gif|png)$ {
    allow 192.168.10.0/24;
    deny all;
    root /soft/code/images;


//配置正向代理
[root@Nginx ~]# cat /etc/nginx/conf.d/zy_proxy.conf 
server {
    listen       80;

    resolver 233.5.5.5;
    location / {
        proxy_pass http://$http_host$request_uri;
        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;
    }
}
//客户端使用SwitchySharp浏览器插件配置正向代理

2、Nginx反向代理示例

//proxy代理
[root@proxy ~]# cat /etc/nginx/conf.d/proxy.conf
server {
    listen 80;
    server_name nginx.bjstack.com;
    index index.html;

    location / {
    proxy_pass http://192.168.0.100;
    include proxy_params;
    }
}

//WEB站点
[root@Nginx ~]# cat /etc/nginx/conf.d/images.conf
server {
    listen 80;
    server_name nginx.bjstack.com;
    root /soft/code;

    location / {
        root /soft/code;
        index index.html;
    }

    location ~ .*\.(png|jpg|gif)$ {
    gzip on;
    root /soft/code/images;
    }
}

四、nginx负载均衡

1、负载均衡按范围划分:GSLB全局负载均衡、SLB,nginx是一个典型的SLB。

2、负载均衡按层级划分:分为四层负载均衡和七层负载均衡,nginx是一个典型的七层SLB。

3、nginx负载均衡配置场景
nginx实现负载均衡用到了proxy_pass代理模块核心配置, 将客户端请求代理转发至一组upstream虚拟服务池

4、Nginx upstream虚拟配置语法

Nginx upstream虚拟配置语法
Syntax: upstream name { ... }
Default: -
Context: http

//upstream例子
upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
    server backup1.example.com:8080   backup;
}
server {
    location / {
        proxy_pass http://backend;
    }
}

#创建对应html文件
[root@Nginx ~]# mkdir /soft/{code1,code2,code3} -p
[root@Nginx ~]# cat /soft/code1/index.html
<html>
      <title> Code1</title>
      <body bgcolor="red">
            <h1> Code1-8081 </h1>
      </body>
</html>

[root@Nginx ~]# cat /soft/code2/index.html
<html>
      <title> Coder2</title>
      <body bgcolor="blue">
           <h1> Code1-8082</h1>
      </body>
</html>
[root@Nginx ~]# cat /soft/code3/index.html
<html>
    <title> Coder3</title>
    <body bgcolor="green">
          <h1> Code1-8083</h1>
   </body>
</html>

#建立对应的releserver.conf配置文件
[root@Nginx ~]# cat /etc/nginx/conf.d/releserver.conf 
server {
    listen 8081;
    root /soft/code1;
    index index.html;
}

server {
    listen 8082;
    root /soft/code2;
    index index.html;
}

server {
    listen 8083;
    root /soft/code3;
    index index.html;
}

5、配置Nginx反向代理

[root@Nginx ~]# cat /etc/nginx/conf.d/proxy.conf 
upstream node {
    server 192.168.0.13:8081;
    server 192.168.0.13:8082;
    server 192.168.0.13:8083;
}

server {
    server_name 192.168.0.13;
    listen 80;
    location / {
        proxy_pass http://node;
        include proxy_params;
    }
}

五、nginx负载均衡状态配置

1、后端服务器在负载均衡调度中的状态

状态	                        概述
down	                 当前的server暂时不参与负载均衡
backup                   预留的备份服务器
max_fails	             允许请求失败的次数
fail_timeout	         经过max_fails失败后, 服务暂停时间
max_conns	             限制最大的接收连接数

测试backup以及down状态

upstream load_pass {
    server 192.168.0.11:8001 down;
    server 192.168.0.12:8002 backup;
    server 192.168.0.13:8003 max_fails=1 fail_timeout=10s;
}

location  / {
    proxy_pass http://load_pass;
    include proxy_params;
}

//关闭8003测试

2、Nginx负载均衡调度策略
调度算法 概述
轮询 按时间顺序逐一分配到不同的后端服务器(默认)
weight 加权轮询,weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发
hash关键数值 hash自定义的key

Nginx负载均衡权重轮询具体配置

upstream load_pass {
    server 192.168.0.11:8001;
    server 192.168.0.12:8002 weight=5;
    server 192.168.0.13:8003;
}
Nginx负载均衡ip_hash具体配置

//如果客户端都走相同代理, 会导致某一台服务器连接过多
upstream load_pass {
    ip_hash;
    server 192.168.0.11:8001;
    server 192.168.0.12:8002;
    server 192.168.0.13:8003;
}
//如果出现通过代理访问会影响后端节点接收状态均衡
Nginx负载均衡url_hash具体配置

upstream load_pass {
    hash $request_uri;
    server 192.168.0.11:8001;
    server 192.168.0.12:8002;
    server 192.168.0.13:8003;
}

//针对三台服务器添加相同文件
/soft/code1/url1.html url2.html url3.html
/soft/code2/url1.html url2.html url3.html
/soft/code3/url1.html url2.html url3.html

3、nginx负载均衡TCP配置

Nginx四层代理仅能存在于main段
stream {
        upstream ssh_proxy {
                hash $remote_addr consistent;
                server 192.168.0.13:22;
        }
        upstream mysql_proxy {
                hash $remote_addr consistent;
                server 192.168.0.13:3306;
        }
    server {
        listen 6666;
        proxy_connect_timeout 1s;
        proxy_timeout 300s;
        proxy_pass ssh_proxy;
    }
    server {
        listen 5555;
        proxy_connect_timeout 1s;
        proxy_timeout 300s;
        proxy_pass mysql_proxy;
    }
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容