Nginx 的正向和反向代理
一、正向代理
正向代理指的是客户端通过访问目标服务端,再由目标服务端来转发流量访问互联网。
这样做的好处是,当客户端通过服务端访问互联网某个网站时,该网站获得的IP地址是服务端的IP,这样可以达到隐藏客户端真实IP,保护客户端用户
的效果。
此时nginx代理的是客户端,代客户端发出请求
。
用途:
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
服务端配置:只需配置代理服务器即可,无需配置被代理服务器,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地址与其打开的端口号:
默认上述配置无法支持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)用于服务器集群分布式部署
的情况下,实现负载均衡,,通过反向代理服务器来优化网站的负载
配置:只需要做服务端的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;
}
}
说明:
- 当客户端访问nginx服务器的地址:221.224.29.*/mitacapi,自动转向
http://10.87.4.95:5051/api/HrResume
,即通过nginx反向代理的后端服务器,这样保证了内网服务器的安全。 - 当需要实现分布式部署,代理的是一组服务器时可以使用 upstream 指令来设置。
实际应用:
通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。具体的拓扑图如下:
推荐阅读
-
CentOS 7安装ipvsadm和Nginx,并进行基本配置与测试 下面是重写后的段落: 1. 关闭防火墙 2. 在浏览器中输入服务器IP地址并访问 3. 修改网页内容以区分不同的服务器 4. 配置lvs/nat,使用自定义的脚本 5. 检查ipvsadm设置的规则 6. 关闭防火墙 7. 测试LVS效果。
-
如何在Python 3中利用蘑菇代理和IP池进行维护 - bigsai的个人空间分享
-
两种方法实现Nginx多层次反向代理并获取真实IP
-
如何配置LNMP和Nginx进行反向代理
-
CentOS 7系统下,使用jemalloc优化Nginx和MySQL的LNMP配置
-
实操LNMP环境搭建:Linux、Nginx、PHP和MySQL的生产级源码部署教程
-
实操Nginx的LNMP、LNNMP和LNNNMP架构,以及缓存技术的应用
-
事件代理和事件委托是什么?详解这两者的区别与联系
-
使用JQ和原生JS实现事件代理:on方法与addEventListener的比较
-
使用jQuery实现事件代理和元素节点操作的todolist实例教程