欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Nginx 的正向和反向代理

最编程 2024-07-16 12:29:36
...

一、正向代理

正向代理指的是客户端通过访问目标服务端,再由目标服务端来转发流量访问互联网
这样做的好处是,当客户端通过服务端访问互联网某个网站时,该网站获得的IP地址服务端的IP,这样可以达到隐藏客户端真实IP,保护客户端用户的效果。
此时nginx代理的是客户端,代客户端发出请求

用途
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息 image.png

服务端配置:只需配置代理服务器即可,无需配置被代理服务器,proxy_pass:为被代理服务器地址

// 此时只支持http
server {
        listen 12345;
        resolver 114.114.114.114; #  配置DNS服务器解析IP地址
        resolver_timeout 5s;
        location /{
              proxy_pass $scheme://$host$request_uri; #proxy_pass 用来要代理的网站,
              #$scheme是客户端请求的协议(如http);
              #$host是客户端请求的域名(如baidu.com);
              #$request_uri是客户端访问的url地址(如/baidu?s=12345)。
              #他们拼接成就是http://baidu.com/baidu?s=12345
              
              # 解决如果URL中带"."后Nginx 503错误
              proxy_set_header Host $http_host;

              # 配置缓存大小
              proxy_buffers 256 4k;
              # 关闭磁盘缓存读写减少I/O
              proxy_max_temp_file_size 0;
              # 代理连接超时时间
              proxy_connect_timeout 30;

              # 配置代理服务器HTTP状态缓存时间
              proxy_cache_valid 200 302 10m;
              proxy_cache_valid 301 1h;
              proxy_cache_valid any 1m;
        }
    }

客户端配置:window10在如下位置配置即可,需要填上nginx的ip地址与其打开的端口号: image.png

默认上述配置无法支持https,可以使用第三方模块来支持NGINX,可以参考:www.cnblogs.com/Dfengshuo/a…

// 支持https
server {
        listen 12345;
        resolver 114.114.114.114; 
        proxy_connect;# 表示启用nginx代理CONNECT(也就能使用https)
        proxy_connect_allow            443;# CONNECT可代理的端口(80默认nginx就可以代理,这里配置其它端口)
        proxy_connect_connect_timeout  10s;# 设置与被代理服务器建立超时的时间
     
        access_log  /var/log/nginx/proxy/access.log;
        error_log   /var/log/nginx/proxy/error.log;
        location /{
              proxy_pass $scheme://$host$request_uri;
        }
    }

二、反向代理

反向代理也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的。
当外网客户端来访问我们的服务器时为了避免暴露内网服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端。
此时,nginx代理的是服务端,代服务端接收请求

用途:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)用于服务器集群分布式部署的情况下,实现负载均衡,,通过反向代理服务器来优化网站的负载

image.png

配置:只需要做服务端的nginx配置

server {
    listen 4041; #nginx监听的端口
    server_name 221.224.29.*; # docker服务宿主机的ip
     
    location / {
        root /usr/share/nginx/html;   #dist文件需要拷贝到此
        index index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
    
    location ^~ /wechat {#匹配所有路径以/wechat开头的请求
        proxy_pass https://qyapi.weixin.qq.com/cgi-bin;  #设置想要转发的真实后端服务
    }

    location ^~ /mitacapi {
        proxy_pass http://10.87.4.95:5051/api/HrResume;  #设置想要转发的真实后端服务
    }
     
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {  #报错指向页面
        root html;
    }
}

说明:

  1. 当客户端访问nginx服务器的地址:221.224.29.*/mitacapi,自动转向http://10.87.4.95:5051/api/HrResume,即通过nginx反向代理的后端服务器,这样保证了内网服务器的安全。
  2. 当需要实现分布式部署,代理的是一组服务器时可以使用 upstream 指令来设置。

实际应用:

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。具体的拓扑图如下: