目录
问题背景
在某些单位或机构内部,访问互联网接口需要通过指定的服务器去访问,那我们就需要通过代理 ip 和 端口去访问外网域名。
示例:如何通过指定 ip 和 端口 访问 https://api.elecredit.com/ 这个域名的接口呢?
解决方式
通过 nginx 代理访问。
先来了解一下 nginx 的正向代理和反向代理:
-
正向代理:
如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。
由于工作环境原因,日常工作只能局限于单位的局域网,如果想要访问互联网,怎么办呢?这就需要用到正向代理。
-
反向代理:
看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。
正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。
接下来看看我们如何通过局域网访问外网 https 服务
nginx 配置:
server { listen 8088; server_name 172.16.2.239;location / {proxy_send_timeout 600;proxy_read_timeout 600;proxy_connect_timeout 600;proxy_redirect off;#proxy_set_header Host $host;proxy_set_header Host api.elecredit.com;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass https://api.elecredit.com:443/; add_header Access-Control-Allow-Origin *;} }
这里监听 8088 端口,server_name 为本机 ip 地址;
proxy_set_header Host api.elecredit.com;
上面这一行配置的意思就是把原http 请求的header 中的host 字段也放到转发的请求里。
这样我们就配置好了,就可以通过 http://172.16.2.239:8088/ 请求到互联网接口地址了。
通俗点儿一句话,正向与反向的区别:
正向代理的代理对象是客户端,反向代理的代理对象是服务端。代理服务器站在客户端那边就是正向代理,代理服务器站在原始服务器那边 就是反向代理。nginx通过proxy_pass可以设置代理服务。
人生苦短,拒绝内卷。我是跟着飞哥学编程,一个一心向阳,向阳而生,努力向上生长的年轻人。加油兄弟们……
致力于实际工作场景中的避坑经验分享,无套路,纯干货。
爱飞哥,没毛病,飞哥带你上高速,冲冲冲……
来源地址:https://blog.csdn.net/weixin_36754290/article/details/130339836