前端代理怎么设置 前端代理设置方法
此内容,部分有小红书(www.xiaohongshutuiguang.cn)转载提供
一、代理服务
比较容易理解吧,简单来说。客户端访问服务器并不是直接访问的,而是通过中间代理服务器,代理服务器再去访问服务器。就像一个中转站一样,无论什么,只要从客户端到服务器,你就要通过我。
一)正向代理
正向代理,就是代理服务器为客户端代理,也就是说,服务器并不知道真实的客户端是谁,而是通过代理服务器把请求发送给真实的服务器。比如,通过公司网络访问外网百度,那么公司的代理服务器就会代理你的主机,访问百度网站。百度服务器无法获得你个人的真实主机ip。
就像上图展示的那样。web1、web2就是你在公司内的个人主机ip,然后通过公司的nginx代理服务器,访问外部网络。
语法:
Syntax: proxy_pass URL
Default: --Context: server,location
实践:
删除之前的配置,然后我们加下正向代理的配置:
resolver8.8.8.8; #谷歌的域名解析地址
location / {
# $http_host 要访问的主机名 $request_uri请求路径
proxy_pass http://$http_host$request_uri;}
这样,nginx的正向代理配置其实就ok了,哦对,别忘了重载nginx服务器。为了我们可以用本地测试,还需要一些额外的修改。Windows系统,修改下本机的hosts文件,地址在:C:\Windows\System32\drivers\etc。里面有个hosts,通过编辑器打开,添加如下内容:
ip(你服务器的ip)(空格)域名(随便一个域名)
我的添加完了之后是这样的:
然后,你可以正常访问百度,或者其他域名地址,或者也可以通过curl来访问。但是这样我们实际上比较无感,所以我们来看下nginx日志,日志在/var/log/nginx/access.log中。
二)反向代理
反向代理,简单来说就是代理服务器代理的是服务器,客户端并不知道真正的服务器是什么。
nginx配置如下:
location ~ ^/api {
proxy_pass http://localhost:3000; proxy_redirect default; #重定向
proxy_set_header Host $http_host; #向后传递头信息
proxy_set_header X-Real-IP $remote_addr; #把真实IP传给应用服务器
proxy_connect_timeout 30; #默认超时时间
proxy_send_timeout 60; # 发送超时
proxy_read_timeout 60; # 读取超时
proxy_buffering on; # 在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们 被写满或者数据被读取完(EOF)
proxy_buffers 4128k; # proxy_buffers由缓冲区数量和缓冲区大小组成的。总的大小为number*size
proxy_busy_buffers_size 256k; # proxy_busy_buffers_size不是独立的空间,他是proxy_buffers和proxy_buffer_size的一部分。nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据(这部分的大小是由proxy_busy_buffers_size来控制的,建议为proxy_buffers中单个缓冲区大小的2倍),然后它继续从后端取数据,缓冲区满了之后就写到磁盘的临时文件中。
proxy_buffer_size 32k; # 用来存储upstream端response的header
proxy_max_temp_file_size 256k; # response的内容很大的 话,Nginx会接收并把他们写入到temp_file里去,大小由proxy_max_temp_file_size控制。如果busy的buffer 传输完了会从temp_file里面接着读数据,直到传输完毕。
}
然后需要我们在服务器上安装一下node,简单来说通过下载node官网的linux版node的二进制包,通过ftp传输到服务器。然后解压缩node包,然后配置node环境变量即可。这个就不多说了,大家可以百度一下。
然后我们在服务器新建一个node的http服务,端口号3000、4000、5000,对,创建三个文件。是在服务器上哦,实际上跟在本地没啥区别。
然后我们通过浏览器,你的ip/api/xxx就可以代理到3000端口的服务了。哦对,别忘了在服务器启动你的node服务。