您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Nginx代理服务

Nginx代理服务概述

代理我们往往并不陌⽣, 该服务我们常常⽤到如(代理租房、代理收货等等)
火车票代售点、代购、第三方
在这里插入图片描述
那么在互联⽹请求⾥⾯, 客户端⽆法直接向服务端发起请求, 那么就需要⽤到代理服务, 来实现客户端和服务通信
在这里插入图片描述
Nginx 作为代理服务可以实现很多的协议代理, 我们主要以 http 代理为主
在这里插入图片描述
正向代理(内部上⽹) 客户端<–>代理->服务端
1、客户端知道代理服务器的存在
2、一般用于公司客户端上网
在这里插入图片描述
反向代理 客户端->代理<–>服务端
1、客户端不知道代理的存在
2、代理一般是由服务端设置,加快客户端的访问速度的
在这里插入图片描述

代理区别
区别在于代理的对象不⼀样
正向代理代理的对象是客户端
反向代理代理的对象是服务端


Nginx代理配置语法

1.Nginx 代理配置语法

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

http://localhost:8000/uri/ 
http://192.168.1.2: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

NGINX的proxy_redirect功能比较强大,其作用是对发送给客户端的URL进行修改。
以例子说明: 

   server { 
       listen       80; 
       server_name  test.abc.com; 
       location / { 
            proxy_pass http://10.10.10.1:9080; 
       } 
   }
这段配置一般情况下都正常,但偶尔会出错, 错误在什么地方呢? 
抓包发现服务器给客户端的跳转指令里加了端口号,如 Location: http://test.abc.com:9080/abc.html 。
因为nginx服务器侦听的是80端口,所以这样的URL给了客户端,必然会出错.针对这种情况, 加一条proxy_redirect指令: proxy_redirect http://test.abc.com:9080/ / ,把所有“http://test.abc.com:9080/”的内容替换成“/”再发给客户端,就解决了。 

proxy_redirect     http://test.abc.com:9080/      /

   server { 
       listen       80; 
       server_name  test.abc.com; 
       proxy_redirect http://test.abc.com:9080/ /; 
       location / { 
            proxy_pass http://10.10.10.1:9080; 
       } 
   }

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

客户端请求web服务,客户端:
ip:192.168.1.3
nginx作为反向代理服务器:
192.168.1.1
nginx作为后端web服务器:
192.168.1.2

proxy_set_header Host $host;  $host就是nginx代理服务器,也就是客户端请求的host。
proxy_set_header Host $proxy_host; proxy_host就是代理服务器请求的host也就是后端服务器208

proxy_set_header X-Real-IP $remote_addr; $remote_addr的值为客户端的ip

proxy_set_header Host $host:$proxy_port; $host代表转发服务器,$proxy_port代表207转发服务器请求后端服务器的端口,也就是80

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

Syntax: proxy_connect_timeout time; 
Default: proxy_connect_timeout 60s; 
Context: http, server, location 
//扩展 
proxy_read_timeout //以及建⽴ 
proxy_send_timeout //服务端请求完, 发送给客户端时间

演示:

实验环境:准备两台nginx服务武器和一台Linux客户机

代理192.168.1.1
服务器192.168.1.2
客户机192.168.1.3

代理:

vi /usr/local/nginx/conf/nginx.conf

        location /zps {
            root   html;
            index  index.html index.htm;
            proxy_pass http://192.168.1.2:8081/zps;
        }

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

服务器:

vi /usr/local/nginx/conf/nginx.conf
        listen       8081;

在这里插入图片描述

cd /usr/local/nginx/html/
mkdir zps
cp index.html zps/
systemctl restart nginx

客户机访问:

curl -I http://192.168.1.1/zps

在这里插入图片描述
显示端口8081
代理

vi /usr/local/nginx/conf/nginx.conf
            proxy_redirect off;

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

客户机再访问:

curl -I http://192.168.1.1/zps

在这里插入图片描述
Fiddler安装包点击下载
提取码: t9tj

打开Fiddler进行抓包
打开浏览器访问http://192.168.1.1/zps
在这里插入图片描述
客户机进行抓包:

curl -I http://192.168.1.1/zps

在这里插入图片描述
可以看到可以通过抓包知道我们访问的是代理服务器
我们看到访问http://192.168.1.1/zps/ 会直接跳转到http://192.168.1.2:8081/zps/
但是一般情况下是不允许别人抓到这些信息的
所以修改代理服务器上的nginx.conf配置文件
代理:

vi /usr/local/nginx/conf/nginx.conf
            proxy_redirect http://192.168.1.2:8081/zps /zps;

在这里插入图片描述
客户端再抓包:

curl -I http://192.168.1.1/zps

在这里插入图片描述


服务器获取客户机真实ip

查看服务器的访问日志

cat /usr/local/nginx/logs/access.log

在这里插入图片描述
我们可以看到web服务器 只能获取 代理服务器的ip地址
实验步骤:
代理:

vi /usr/local/nginx/conf/nginx.conf
            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;
        }

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

服务器:
去掉注释

vi /usr/local/nginx/conf/nginx.conf
#    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  logs/access.log  main;

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

客户机再访问

curl -I http://192.168.1.1/zps

查看服务器的访问日志我们可以看到成功获取到了客户机的真实ip

cat /usr/local/nginx/logs/access.log

在这里插入图片描述


Nginx正向代理示例

Nginx 正向代理配置实例:
配置服务器1.2访问限制,只允许代理1.1访问
在服务器1.2上配置就允许代理1.1访问图片

服务器:

vi /usr/local/nginx/conf/nginx.conf
        listen       80;
        
        location ~ .*\.(jpg|gif|png) {
            allow 192.168.1.1;
            deny all;
        }     

在这里插入图片描述

然后进入网页默认目录上传一张图片:

cd /usr/local/nginx/html/

yum -y install lrzsz
rz                            ##上传

在这里插入图片描述

vi index.html
<h1>192.168.1.2</h1>
<img src="1.jpg" />
systemctl restart nginx   ##重启nginx服务

客户机访问 发现访问不了图片了
http://192.168.1.2
在这里插入图片描述
代理:
现在只有代理服务器可以访问服务器的图片

vi /usr/local/nginx/conf/nginx.conf
            proxy_pass http://$http_host$request_uri;
            #$http_host   是一个变量,指的是客户端请求的目标ip地址
            #$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;
        }

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

客户机浏览器设置
打开ie浏览器:

设置代理服务器ip地址 再次访问1.2的80端口
在这里插入图片描述
客户机再次访问:
http://192.168.1.2
在这里插入图片描述
做完测试我们要把浏览器的代理及时去除 不然的话就访问不了其他网页了 就像这样:
因为我们这个测试的代理服务器是没有连接网络的
在这里插入图片描述


Nginx反向代理示例

反向代理配置
代理:

vi /usr/local/nginx/conf/nginx.conf
            proxy_pass http://192.168.1.2:8080;
        }

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

服务器:
Web站点修改监听的端口号为8080

vi /usr/local/nginx/conf/nginx.conf
        listen       8080;

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

客户机:
在这里插入图片描述
访问测试:
http://192.168.1.1
http://192.168.1.2
在这里插入图片描述
在这里插入图片描述


2.Nginx负载均衡

提升吞吐率, 提升请求性能, 提⾼容灾
在nginx中用到了反向代理,不一定会用负载均衡
在nginx中用到了负载均衡,一定会用反向代理
真正实现反向代理的是,负载均衡算法
在这里插入图片描述
负载均衡按范围划分:GSLB全局负载均衡、SLB
在这里插入图片描述
Nginx 是⼀个典型的 SLB
在这里插入图片描述
负载均衡按层级划分: 分为四层(传输层)负载均衡和七层(应用层)负载均衡
Nginx 是⼀个典型的七层 SLB
LVS: 四层的负载均衡
Haproxy:既支持四层又支持七层
在这里插入图片描述

2.1Nginx负载均衡配置场景

Nginx 负载均衡模块upstream 需要跟nginx反向代理模块proxy_pass结合起来使用
Nginx 实现负载均衡⽤到了 proxy_pass 代理模块核⼼配置, 将客户端请求代理转发⾄⼀ 组 upstream 虚拟服务池
在这里插入图片描述

代理:
weight=1 他的意思就是那台服务器性能更好就可以在后面把weight的数值调高一些
比如:weight=5

vi /usr/local/nginx/conf/nginx.conf
    upstream zps {
       server 192.168.1.2:80 weight=5;
       server 192.168.1.3:80 weight=5;
    }
            proxy_pass http://zps;

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

服务器1.2和1.3上准备两个页面

cd /usr/local/nginx/html/

vi index.html
<html> 
<title>nginx1</title> 
<body bgcolor="red"> 
<h1>nginx1</h1> 
</body> 
</html>


vi index.html
<html> 
<title>nginx2</title> 
<body bgcolor="blue"> 
<h1>nginx2</h1> 
</body> 
</html>

使用浏览器访问:http://192.168.1.1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.2Nginx负载均衡状态配置

后端服务器在负载均衡调度中的状态
在这里插入图片描述
测试 backup 以及 down 状态

比如:

server 192.168.1.2:80 weight=5 down;                                         ##当前192.168.1.2服务器暂时不参与负载均衡
server 192.168.1.2:80 weight=5 backup;                                       ##当前192.168.1.2服务器不参与负载均衡 充当备份的角色 只有另一台服务器坏掉时才会生效
server 192.168.1.2:80 weight=5 max_fails=2 fail_timeout=10s max_conns=5;     ##允许请求失败两次 失败后暂停时间为10秒 最大连接数为5

2.3Nginx负载均衡调度策略

在这里插入图片描述
Nginx负载均衡权重轮询具体配置

upstream zps {
        server 192.168.1.2:80 weight=1;
        server 192.168.1.3:80 weight=5;
        server 192.168.1.4:80;
}

Nginx负载均衡 ip_hash 具体配置

upstream zps {
        ip_hash;
        server 192.168.1.2:80;
        server 192.168.1.3:80;
        server 192.168.1.3:80;
}

Nginx负载均衡url_hash具体配置

upstream zps {
        hash    $request_uri;
        server 192.168.1.2:80;
        server 192.168.1.3:80;
        server 192.168.1.4:80;
}

3.Nginx动静分离

动静分离,通过中间件将动态请求和静态请求进⾏分离, 分离资源, 减少不必要的请求消耗, 减少请 求延时。
好处: 动静分离后,即使动态服务不可⽤, 但静态资源不会受到影响
通过中间件将动态请求和静态请求分离
在这里插入图片描述

Nginx动静分离应⽤案例
环境准备:

服务地址
proxy192.168.1.1
nginx192.168.1.2
tomcat192.168.1.3

代理:

vi /usr/local/nginx/conf/nginx.conf
    upstream static {
       server 192.168.1.2:80 weight=5;
    }
    upstream java {
       server 192.168.1.3:8080 weight=5;
    }

            proxy_pass http://static;
        }
        location ~ .*\.(jsp|gif|png|css)$ {
            proxy_pass http://java;
        }

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

客户机浏览器访问:
在这里插入图片描述
访问代理服务器的ip会跳到192.168.1.2web服务器的静态页面上
http://192.168.1.1
在这里插入图片描述
要想访问动态页面需要再代理服务器的ip后面加上(jsp|gif|png|css)等等后缀
比如:http://192.168.1.1/index.jsp
在这里插入图片描述


根据访问不同⽬录, 代理不同的服务器

默认动态,静态直接找设置的static,上传找upload
代理:

vi /usr/local/nginx/conf/nginx.conf
    upstream static {
       server 192.168.1.2:80 weight=5;
    }
    upstream java {
       server 192.168.1.3:8080 weight=5;
    }
        location /zps {
            root   html;
            index  index.html index.htm;
            proxy_pass http://static;
        }
        location /alex {
            proxy_pass http://java;
        }    

在这里插入图片描述

systemctl restart nginx   ##重启nginx服务

给nginx服务器1.2准备页面

cd /usr/local/nginx/html/
mkdir zps
echo "<h1>192.168.1.2</h1>" > zps/index.html 

给tomcat服务器1.3准备页面

cd /usr/local/tomcat/webapps/ROOT/
mkdir /root/alex
mv /usr/local/tomcat/webapps/ROOT/* /root/alex/
mv /root/alex/ /usr/local/tomcat/webapps/ROOT/

客户机访问:
http://192.168.1.1/zps/
在这里插入图片描述
http://192.168.1.1/alex/
在这里插入图片描述


域名恶意绑定和防止

恶意绑定实验:
首先我们准备一个可以正常访问的web网站
修改我们客户机的hosts文件
在这里插入图片描述
拿浏览器访问www.zps.com就可以了

那我们在公司出现这种情况很危险的那怎么防止呢
很简单
代理:
vi /usr/local/nginx/conf/nginx.conf
在这里插入图片描述
拿浏览器再访问www.zps.com就可以了
在这里插入图片描述



分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进