nginx的反向代理proxy_pass指令

1. 首先什么是代理服务器?
客户机发送请求时,不会直接发送到目的主机,而是先被代理服务器收到,代理服务器收到客服机的请求后,再向目的机发出,目的机就会返回数据给客户机,在返回给客户机之前,会被代理服务器先收到,会存放在代理服务器的硬盘中。然后代理服务器会再向客户机发出,最后客户机就会收到目的机返回的数据。

2. 代理服务器的作用有哪些?

1) 可以提高访问速度
因为目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户机再次访问相同的站点数据的时候,会直接从代理服务器的硬盘中读取,因此响应速度会更快。

2)防火墙的作用
由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤一些不安全的信息。

3. 理解什么是反向代理?

反向代理是指以代理服务器接收Internet上的链接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。

什么意思呢?上面的解释可能有点不好理解,那么下面我们先来打个比方,比如我的内部服务器是放在212环境上,那么开发的接口如下这样的:
http://192.168.1.212:8136/xxxx 然后端口号是8136,然后直接访问该接口会返回对应的数据,但是接口一般都是域名访问的,因此我们需要在nginx上配置一个域名,假如为 xy.xxx.com, 然后当我们在联调接口的时候,我们使用 http://xy.xxx.com/xxxx 这样的接口时,它会反向代理到 http://192.168.1.212:8136/xxxx 上来,这样它会返回内部服务器的数据给客户端,客户端就拿到对应的数据显示出来了。

3.1 理解proxy_pass指令
该指令是用来设置代理服务器的地址,可以是主机名称,IP地址加端口号等形式。基本语法如下所示:

proxy_pass: URL;

因此我们经常会看到如下nginx上的配置:如下代码:

server {listen 80;server_name xy.xxx.com; // 接口的域名access_log  /data/www/logs/nginx/access.log main;add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域add_header Access-Control-Allow-Credentials true;include nginx_xxx.conf;location / {proxy_pass http://192.168.1.212:8136;include nginx_proxy.conf;}error_page   500 502 503 504  /502.html;location = /50x.html {root   html;}
}

如上代码的含义是:监听80端口号,然后我们定义的接口的域名为 xy.xxx.com, 然后当我们访问 http://xy.xxx.com/xxxx这样的接口的时候,它会通过 location / {} 这样的反向代理到 http://192.168.1.212:8136上来,当然对于我们的host也需要绑定下 192.168.1.212 xy.xxx.com 就可以了。

当然如果代理服务器是一组服务器的话,我们可以使用upstream指令配置后端服务器组。如下代码:

upstream proxy_xxx {server http://192.168.1.211:8136/xxx;server http://192.168.1.212:8136/xxx;server http://192.168.1.213:8136/xxx;
}server {listen 80;server_name xy.xxx.com; // 接口的域名access_log  /data/www/logs/nginx/access.log main;add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域add_header Access-Control-Allow-Credentials true;include nginx_xxx.conf;location / {proxy_pass proxy_xxx; // 对应上面的upstream 后面的 proxy_xxxinclude nginx_proxy.conf;}error_page   500 502 503 504  /502.html;location = /50x.html {root   html;}
}

但是在上面配置各个服务器中都指明了传输协议为 http://, 但是如果上面的接口没有指明协议的话,那么我们需要在 proxy_pass上加上了,proxy_pass http://proxy_xxx 这样的,如下配置代码:

upstream proxy_xxx {server 192.168.1.211:8136/xxx;server 192.168.1.212:8136/xxx;server 192.168.1.213:8136/xxx;
}server {listen 80;server_name xy.xxx.com; // 接口的域名access_log  /data/www/logs/nginx/access.log main;add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域add_header Access-Control-Allow-Credentials true;include nginx_xxx.conf;location / {proxy_pass http://proxy_xxx; // 对应上面的upstream 后面的 proxy_xxxinclude nginx_proxy.conf;}error_page   500 502 503 504  /502.html;location = /50x.html {root   html;}
}

注意点:

1. 当我们配置是如下配置:

server {listen 80;server_name xy.xxx.com; // 接口的域名access_log  /data/www/logs/nginx/access.log main;add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域add_header Access-Control-Allow-Credentials true;include nginx_xxx.conf;location / {proxy_pass http://192.168.1.212:8136;include nginx_proxy.conf;}error_page   500 502 503 504  /502.html;location = /50x.html {root   html;}
}

当用户使用接口 http://xy.xxx.com/xxx 的时候,nginx会自动指向内部服务器 http://192.168.1.212:8136/xxx的。这个我们能理解的。

2. 当我们的nginx的配置是如下的:

server {listen 80;server_name xy.xxx.com; // 接口的域名access_log  /data/www/logs/nginx/access.log main;add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域add_header Access-Control-Allow-Credentials true;include nginx_xxx.conf;location / {proxy_pass http://192.168.1.212:8136/yyy;include nginx_proxy.conf;}error_page   500 502 503 504  /502.html;location = /50x.html {root   html;}
}

注意上面的 proxy_pass http://192.168.1.212:8136/yyy; 如果客户端还是以 http://xy.xxx.com/xxx 访问接口的时候,那么nginx服务器就会将请求地址指向与 http://192.168.1.212:8136/yyy了,而不是http://192.168.1.212:8136/xxx了。

因此如果我们在正常配置中,我们可以选择第一种配置,直接指向域名,然后反向代理到 ip地址+端口号即可。

3. 理解 proxy_pass http://192.168.1.212 和 proxy_pass http://192.168.1.212/的区别;

上面的两者的区别是 proxy_pass 指令的URL变量末尾添加了斜杠 '/', 下面我们再来看下nginx的配置,如下代码:

server {listen 80;server_name xy.xxx.com; // 接口的域名access_log  /data/www/logs/nginx/access.log main;add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域add_header Access-Control-Allow-Credentials true;include nginx_xxx.conf;location / {#配置1 proxy_pass http://192.168.1.212:8136;#配置2 proxy_pass http://192.168.1.212:8136/;include nginx_proxy.conf;}error_page   500 502 503 504  /502.html;location = /50x.html {root   html;}
}

在如上配置中,location块使用了 '/' 作为uri变量的值来匹配的,因此上面的配置1和配置2效果是相同的,比如客户端的接口请求是:
http://xy.xxx.com/xxx的时候,不管使用配置1还是配置2,都会指向内部服务器 http://192.168.1.212:8936/xxx.

但是现在我们把代码改成如下配置,那就不一样了:

server {listen 80;server_name xy.xxx.com; // 接口的域名access_log  /data/www/logs/nginx/access.log main;add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域add_header Access-Control-Allow-Credentials true;include nginx_xxx.conf;location /bus/ {#配置1 proxy_pass http://192.168.1.212:8136;#配置2 proxy_pass http://192.168.1.212:8136/;include nginx_proxy.conf;}error_page   500 502 503 504  /502.html;location = /50x.html {root   html;}
}

注意:上面的 location /bus/ , location块使用了 /bus/ 作为uri变量的值来匹配,

比如我们现在客户端请求 http://xy.xxx.com/bus/xxx的时候,如果使用配置1的话,那么它会指向内部服务器的地址为:http://192.168.1.212:8136/bus/xxx,

那如果我们使用配置2的话,那么它会指向内部服务器的地址为:http://192.168.1.212:8136/xxx, 这样的。

因此这就是加上 反斜杠 /   的区别了。

nginx的反向代理proxy_pass指令相关推荐

  1. 全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。

    文章目录 1. 文章引言 2. 何谓反向代理 3. 解析nginx的配置文件 3.1 全局块(global block) 3.2 events块(events block) 3.3 http块(htt ...

  2. nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决

    nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决 参考文章: (1)nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题 ...

  3. 【转】Nginx服务器的反向代理proxy_pass配置方法讲解

    [转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲 Nginx的配置还是比较简单的 ...

  4. Nginx配置反向代理,一篇搞定!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/zxd1435513775/article/ details/102508463 一.引言 其他话 ...

  5. Nginx之反向代理与负载均衡实现动静分离实战

    Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx  proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果. 负载均衡指的是 ...

  6. 如何让多端口网站用一个nginx进行反向代理实际场景分析

    前段时间公司要整合服务器资源,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今零零散散部署在生产上一些可视化UI: ...

  7. host 端口_如何让多端口网站用一个nginx进行反向代理实际场景分析

    前段时间公司要整合服务器资源,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今零零散散部署在生产上一些可视化UI: ...

  8. 小程序nginx做反向代理_NGINX作为节点或Angular应用程序的反向代理

    小程序nginx做反向代理 A reverse proxy is a server that retrieves resources for clients from one or more upst ...

  9. nginx利用反向代理实现获取用户真实ip

    我们访问互联网上的服务时,大多数时,客户端并不是直接访问到服务端的,而是客户端首先请求到反向代理,反向代理再转发到服务端实现服务访问,通过反向代理实现路由/负载均衡等策略.这样在服务端拿到的客户端IP ...

最新文章

  1. 人类应鼎力进行探索的35种颠覆性技术
  2. 持续集成之“依赖管理”
  3. boost::mp11::mp_count_if_q相关用法的测试程序
  4. 最好用的硬盘搜索工具--Ava find pro
  5. 零基础学习鸿蒙开发,零基础学习鸿蒙App开发 (第一天)
  6. java txt 修改_java创建TXT文件并进行读、写、修改操作
  7. Unity采用Forge Networking Remastered数据的远程传输 Basic RPC Example
  8. [Java][Android][Process] Process 创建+控制+分析 经验浅谈
  9. 普元eos运行环境下的逻辑流及页面流反编译工具
  10. 小写字母转大写代码HTML,CSS控制转换字母的大写和小写
  11. wireshark常用过滤表达式
  12. 计算机不显示桌面文件夹,电脑保存文件路径不显示桌面怎么办
  13. 删除node_modules慢【rimraf】
  14. 手机版kali nethunter刷入
  15. 论“蹭热点”,我只服“杜蕾斯”,盘点“杜蕾斯官方”曾蹭过的十大热点!
  16. vue实现图片上传功能
  17. 基于云桌面的外部设备重定向技术调研
  18. python循环输入错误重新输入_python输入三次错误密码,用户锁定问题
  19. 【hadoop】hbase配置
  20. 简单带验证码的登陆网站破解

热门文章

  1. 安卓手机玩游戏卡顿怎么解决_安卓手机卡顿怎么办?5招教你变流畅,继续用三五年,媲美iPhone...
  2. ubuntu使用certbot给nginx添加ssl证书
  3. ANSI标准判断sql空值与去空去空格
  4. Poi导入excel(合并单元格)
  5. JAVA最小质因子之和
  6. 微信公众号多域名回调系统
  7. 低代码接口开发平台——YesApi(免费注册)
  8. 推荐几个免费的ppt模板网站
  9. 配置VS2019 执行cu文件
  10. JVM学习教程,带你轻松掌握Java虚拟机,吊打面试官