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_xxx
include 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_xxx
include 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做反向代理proxy_pass,proxy_redirect的使用

     大 | 中 | 小  今天用nginx作为trac的反代,发现一个问题,就是登入登出跳转的时候是白页,看了下网页相应内容,发现相应的location是空的.查了一下发现是只单纯用了proxy_pas ...

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

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

  3. nginx反向代理proxy_pass的问题

    起因:今天企业部署一个项目,用的nginx做的反向代理,配置如下: 测试结果令人失望,IP:端口 能访问项目,域名:端口 也能访问 ,但是 域名/接口名 访问失败 ################## ...

  4. nginx 反向代理 proxy_pass 及对比nginx与haproxy反向代理服务器功能、性能的优劣

    1.使用 proxy 去请求另一个域名下的资源,如果跨域资源也部署在同一台机器上,我们甚至可以 proxy 到 127.0.0.1,比如: location /api { proxy_pass htt ...

  5. nginx配置后端映射(反向代理proxy_pass)

    说明:配置反向代理proxy_pass和location无关,location后面加不加 / 都可以 1.配置 proxy_pass 时,当在后面的 url 加上了 /,相当于是绝对路径,则 Ngin ...

  6. nginx作反向代理,实现负载均衡

    nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...

  7. nginx的反向代理功能和缓存功能

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  8. Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点

    上一篇分享了 Nginx + Tomcat 反向代理 负载均衡 集群 部署指南,感觉还是相当实用型的,但是一般集群部署是基于大访问量的,可能有的企业用不到,类似一些企业官网,访问量并不是很大,基于这个 ...

  9. Nginx 作为反向代理优化要点proxy_buffering

    当nginx用于反向代理时,每个客户端将使用两个连接:一个用于响应客户端的请求,另一个用于到后端的访问: 那么,可以从如下配置起步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

随机推荐

  1. Django Rest Framework之认证

    代码基本结构 url.py: from django.conf.urls import url, include from web.views.s1_api import TestView urlpa ...

  2. ORM作业

    使用之前学到过的操作实现下面的查询操作:1. 查询平均成绩大于60分的同学的id和平均成绩:2. 查询所有同学的id.姓名.选课的数量.总成绩; 3. 查询姓“李”的老师的个数: 4. 查询没学过“李 ...

  3. Harbor api 操作

    harbor 的版本为 1.5.2 为 Harbor 配置 swagger 官网参考: https://github.com/goharbor/harbor/blob/v1.5.2/docs/conf ...

  4. MySQL安装的挫折之路

    由于对MySQL卸载的不干净,mysql 的MySQL Connector Net/xxx无法卸载,后期重装无法成功.所以只能采用zip 安装https://www.cnblogs.com/Micha ...

  5. 华为交换机MSTP+VRRP配置实例说明文档

    华为交换机MSTP+VRRP配置实例说明文档 拓扑图 IP地址规划表 设备名称 设备接口 对端设备 对端接口 VLAN VLAN /接口地址 备注 SW0 GE0/0/23 SW2 GE0/0/23 ...

  6. 使用 ISO镜像配置 本地yum 源(RHEL, CentOS, Fedora等适用)

    使用 ISO镜像配置 本地yum 源(RHEL, CentOS, Fedora等适用)   1.上传ISO镜像和挂载 1) 上传Centos7.2 ISO镜像到 /usr/local/src目录 2) ...

  7. android系统通过图片绝对路径获取URI的三种方法

    最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在 android 4.1.3的系统上都是可用的. 1.将所有的图片路径取出,遍历比较找到需要的路径 ...

  8. 三步搞定Centos 7 上特定版本的 docker 安装

    由于国内网络原因,使用centos的用户yum源常用国内的阿里云.现在把centos7上安装docker的详细过程记录如下: 一.配置centos7的yum源(阿里云) 1.cd  /etc/yum. ...

  9. python自动化报告的输出

    1.设计简单的用例 2.设计用例 以TestBaiduLinks.py命名 # coding:utf-8 from selenium import webdriver import unittest ...

  10. VS发布web应用程序报:无法识别的特性“xmlns:xdt”。请注意特性名称区分大小写 或 未能将文件obj\...复制到obj\...未能找到路径

    问题1:无法识别的特性“xmlns:xdt”.请注意特性名称区分大小写 问题2:未能将文件obj\...复制到obj\...未能找到路径 解决办法:将web项目文件下的obj文件夹从项目中排除,然后再 ...