nginx 反向代理

javascript/jquery

浏览数:96

2019-7-2

  关于什么是nginx以及为什么使用的理论网上还是有很多资料的,这里就不在赘述了。下面简单的说一下nginx的反向代理及实现
  一、反向代理:
    反向代理(Reverse Proxy)方式是指它根据客户端的请求,从后端的服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端。

  与正向代理不同,正向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端(如Web服务器)作为代理使用,

  而不是客户端。

    客户端通过正向代理可以访问很多不同的资源,而反向代理是很多客户端都通过它访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,

  而以为所有资源都来自于这个反向代理服务器
  简而言之,反向代理是将代理服务器在架设在服务器端,将直接访问服务器的请求进行过滤转发操作。
  二、对于前端而言的用途:
  1、多端口的处理:如果多个应用都用到了相同的端口,可以通过反向代理,将不同的应用请求转发给不同的服务器端口。
  2、跨域的处理:(当然实际开发中有很多方式处理之)例如在本地进行开发时,可以通过nginx反向代理来解决,

    例如匹配该domain下统一指向另一个domain就可以在开发时免去麻烦。
  三、配置反向代理:
  假设一下应用场景,我需要在本地即localhost地址8080端口起一个node服务feedback,为了与beta环境域名保持一致(http://wwww.test.beta.com)

  保持一致。希望本地可以访问http://wwww.test.beta.com/feedback/路径。这就需要nginx的反向代理来解决了
  设置反向代理有两种方式:
  1、通过location来匹配不同请求进行转发: 这是一种比较简便的处理方式。
  更改本地的hosts文件。
  路径为’//etc/hosts'(mac下地址)
  配置127.0.0.1就是指向test.beta.com(忽略掉url的不同,说明问题就行。因为不想写那么长了。。)

  
  不过这样还是不满足我们需求的,因为域名默认访问的端口是80.这时候借助nginx匹配一下就行了
  思路就是,nginx监听80端口(即http://wwww.test.beta.com/的默认端口),当通过location来匹配到http://wwww.test.beta.com/feedback/时,

  将满足的请求指定访问procss为8080端口 。
  代码如下:

  

server {
        listen       80;
        server_name  prism.test.sankuai.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /feedback {
            //指定匹配项访问该url即本地8080端口
            proxy_pass http://test.beta.com:8080;
        }

  2、实现原理相同,不过实现方式的差别。
  其他步骤相同,当匹配到相应的请求时。通过upstream模块来指定访问的地址和端口即可。
  代码如下:

    

    upstream prism.com {
        //指定地址和端口
        server 127.0.0.1:8080;
    }
    server {
        listen       80;
        server_name  prism.test.sankuai.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /feedback {
            //匹配的请求分发到prism.com对应项
            proxy_pass http://prism.com;
        }    

  nginx的用处之多只能用没有做不到只有想不到来形容了。本文只是简单涉及一下反向代理的部分。以供自己参考和学习。

作者:潇湘待雨