Nginx 反向代理与正向代理

2023年 5月 4日 70.7k 0

代理分为正向代理和反向代理,本次就来演示一下Nginx配置正向代理和反向代理的场景。 顺便讲解一下正向代理和反向代理的区别正向代理和反向代理的区别
Nginx 反向代理与正向代理
Nginx
首先,我们需要知道什么是反向代理和正向代理区别

一、正向代理

image_1dc4a1othlvj1668rh21i53b649.png-103.3kB
正向代理简单的来说就是我们的代理服务器代替用户去请求后端节点
nginx正向代理代替工具还有goproxy
为什么要使用正向代理

  • 用户无法直接访问服务器B (常见例子就是我们使用的Shadowsocks)
  • image_1dc4e8hpa1hkod3fnm361n12tkm.png-99.6kB

  • Cache缓存作用
  • cache缓存技术和代理服务技术是紧密联系的(不只是正向代理使用cache缓存,反向代理同时也使用缓存)简单的来说就是用户A访问了代理服务器,那么代理服务器会将用户A的数据保存一段时间,如果该时间段呢用户B同时也访问了代理服务器,那么代理服务器将不会直接请求服务器B,而是直接将缓存直接返回给用户A

  • 拦截访问
  • image_1dc4f02k58jntf9qcplhe1e6g1g.png-54.7kB
    假设用户A和用户B都设置了代理服务器,用户A允许访问互联网,而用户B不允许防火互联网(这个代理服务器Z上做限制)这样用户A因为授权,可以通过代理服务器访问到服务器C,而用户B因为没有被代理服务器授权时,数据包会直接丢弃

  • 隐藏访问者
  • image_1dc4f9h94v6lmr614kpcqhmp32a.png-35.7kB
    我们可以看出服务器C并不知道访问自己的实际是用户A,因为代理服务器Z代替用户A去直接与服务器C进行交互,如果代理服务器Z完全被用户A控制(或不完全控制)会惯以肉鸡术语称呼

  • 正向代理总结
  • 正向代理是一个位于客户端和原始服务器(origin server)之前的服务器,为了从原始服务器获取内容,客户端向代理发送一个请求并指定目标,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。客户端必须设置正向代理服务器。(类似于我们的ss服务)

    二、反向代理

    反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理发送普通请求,接着反向代理将判断向何处(后端节点)转交请求,并将获得的内容返回给客户端
    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中,当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式成为反向代理服务
    image_1dc4ggusp1acf1vnr19nd1jfr161j2n.png-86.3kB

  • 透明代理
  • 透明代理的意思是客户端根本不需要指定有代理服务器的存在,改变你的request fields(报文),并会传送真实IP,注意加密的透明代理则属于匿名代理,意思是不用设置代理了。透明代理实践的例子就是很多公司所使用的行为管理软件
    image_1dc4h8g9ppsnavbfbp1kk01iim34.png-72.5kB
    当用户A和用户B并不知道行为管理设备充当透明代理行为,用户A或者用户B向服务器A或者服务器B提交请求的时候,透明代理设备根据自身策略拦截并修改用户A或B的报文,并作为实际的请求方,向服务器A或者B发送请求,当接受信息回传,透明代理再根据自身的设置把允许的保存发回至用户A或B,如果透明代理设置不允许访问服务器B,那么用户A或者用户B就不会得到服务器B的数据

    三、正向代理配置测试

    我们使用nginx代理上网为例子进行演示nginx正向代理
    下载并安装nginx (正向代理不需要单独的模块)
    123.png-159.3kB
    我们使用2台服务器都进行如下操作
    10.4.82.140 tomcat.i4t.com 为后端应用服务(域名为tomcat.i4t.com)
    10.4.82.142 nginx.i4t.com 为代理服务器(域名为nginx.i4t.com)
    请仔细阅读本段 首先我们代理服务器几乎不进行任何配置,只是一个普通的nginx代理,所有修改nginx的配置都是在代理服务器上添加
    两台nginx默认配置如下

    1.nginx版本没有太大要求
    wget http://nginx.org/download/nginx-1.10.3.tar.gz
    
    #按照依赖包
    yum install -y gcc glibc gcc-c++ prce-devel openssl-devel pcre-devel
    useradd -s /sbin/nologin nginx -M 
    tar xf nginx-1.10.3.tar.gz && cd nginx-1.10.3
    
    #编译
    ./configure --prefix=/usr/local/nginx-1.10.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
    
    检查
    /usr/loca/nginx/sbin/nginx -t
    
    启动
    /usr/local/nginx/sbin/nginx
    
    查看服务器是否启动
    netstat -lntp|grep nginx
        tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7058/nginx: master
    

    接下来是配置nginx代理
    首先我们先配置2台nginx服务器
    1.先配置nginx.i4t.com nginx信息

    #配置10.4.82.142 后端服务器
    cat /usr/local/nginx/conf/nginx.conf
    user  nginx;
    worker_processes  1;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        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;
    
        sendfile        on;
        tcp_nopush     on;
        keepalive_timeout  65;
    
        gzip  on;
    
        server {
    
    
            listen       80;
            server_name  nginx.i4t.com;
    
    
            location / {
            root   /usr/local/nginx/html;
    
            }
    
        }
    
    }
    
    echo "nginx.i4t.com" >/usr/local/nginx/html/index.html
    
    /usr/local/nginx/sbin/nginx -s reload
    

    此时nginx.i4t.com域名访问如下
    image_1dc6fqsem48edhv13e3ill19k1s.png-26.3kB
    接下来配置后端服务器
    代理服务器默认配置
    10.4.82.140
    以下是后端服务器默认配置

    user  nginx;
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        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;
    
        sendfile        on;
        keepalive_timeout  65;
    
    
        server {
            listen       80;
            server_name  tomcat.i4t.com;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
       }
    }
    
     echo " tomcat.i4t.com" >/usr/local/nginx/html/index.html
     /usr/local/nginx/sbin/nginx  -s reload
    

    tomcat.i4t.com后端服务器的访问内容如下
    12333.png-64.7kB
    接下来我们将tomcat.i4t.com 也就是10.4.82.140进行配置权限

    #只允许10.4.82.142访问
    cat /usr/local/nginx/conf/nginx.conf
    user  nginx;
    worker_processes  1;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        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;
    
        sendfile        on;
        tcp_nopush     on;
        keepalive_timeout  65;
    
        gzip  on;
    
        server {
    
    
            listen       80;
            server_name  tomcat.i4t.com;
    
            resolver 8.8.8.8;
            location / {
            proxy_pass $scheme://$host$request_uri;
            if ( $remote_addr !~* "10.4.82.142") {
                return 403;
            }
            root   /usr/local/nginx/html;
    
            }
    
        }
    
    }
    
    #proxy_pass $scheme://$host(请求的域名)$request_uri; 域名后面参数
    #resolver DNS地址,可以不写
    

    我们可以看到我们现在电脑已经无法访问tomcat.i4t.com,需要注意的是,我们只是修改了tomcat.i4t.com的代理,nginx.i4t.com依旧可以正常访问的
    image_1dc6g35vq1v2a94i1q141pvk1q923l.png-39kB
    现在我们进行代理配置

  • windows配置如下
  • IE-->Internet选项-->连接-->局域网设置-->代理服务器
    image_1dc6h8d211sg518nj1vrc1etapah42.png-246.7kB

  • mac设置如下
  • image_1dc6haibh11471s8jcod1fv9eh94f.png-99.4kB
    image_1dc6hbavagmtog91a231ee12t64s.png-91.3kB

  • Linux
  • export http_proxy=http://10.4.82.142:80
    wget http://tomcat.i4t.com
    

    3333.png-351.1kB
    这时候我们访问tomcat.i4t.com就是200,状态
    image_1dc6hdijka551kb51q821p3m1t9r59.png-30.7kB

    四、反向代理配置测试

    安装和上面编译安装一样,没有特殊模块。只需要修改配置文件

    cat /usr/local/nginx/conf/nginx.conf
    user  www;
    worker_processes  1;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        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;
    
        sendfile        on;
        tcp_nopush     on;
        keepalive_timeout  65;
    
        gzip  on;
    
        server {
    
    
            listen       80;
            server_name  nginx.i4t.com;
    
            location / {
               proxy_pass http://abcdocker;
               proxy_set_header   Host             $host;
               proxy_set_header   X-Real-IP        $remote_addr;
               proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    
            }
    
        }
    
    
        upstream abcdocker {
           server 10.4.82.140:8080;
           server 127.0.0.1:8080;
        }
    
    }
    
    
    #proxy_pass 代理节点,可以用ip+端口
    #upstream 后面写名称
    #server 后端节点名称
    

    访问验证,我们访问nginx.i4t.com域名打开的是tomcat后端节点
    333.png-334.7kB
    请注意缓存(google浏览器缓存不是很好清理)
    更多nginx可以前往Nginx板块

    相关文章:

    1. [NGINX] – 配置文件优化 – NGINX.CONF
    2. K8s容器日志实时收集FileBeat+ES+Kibana
    3. 搭建分布式文件系统FastDFS集群
    4. ELK 二进制安装并收集nginx日志

    相关文章

    LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
    10分钟搞定支持通配符的永久有效免费HTTPS证书
    300 多个 Microsoft Excel 快捷方式
    一步步配置基于kubeadmin的kubevip高可用
    istio全链路传递cookie和header灰度
    REST Web 服务版本控制

    发布评论