• nginx 反向代理配置(二)


         上一篇文章主要是对 nginx 各个模块做了一个介绍,以及对什么是反向代理在文章开头做了一个简单介绍,这篇文章我们主要来看下如何进行 nginx 反向代理的配置

         proxy 模块

         nginx 通过 proxy 模块将客户端请求代理至上游服务器,此时,nginx 与上游服务器之间是通过 http 协议连接的。nginx 在实现反向代理功能时最重要的指令是 proxy

    _pass

         1,proxy_pass URL;

               设置后端服务器的协议和地址,这条指令可以设置的协议是 http 或 https,而地址可以使用域名或 ip 地址加端口号的形式来定义,如:

    proxy_pass http://locahost:8000/uri;
    

          当然设置反向代理也可以和负载均衡配合使用,此时,使用方式为:proxy_pass + http:// upstream 名称

               如果 proxy_pass 里面没有使用 URI,则传送到后端服务器的请求 URI 一般是客户端请求的原始 URI;如果 proxy_pass 里面使用了 URI,则客户端请求 URI 和配

    置路径匹配的部分会被替换为指令中定义的 URI,我们来看一个简单例子:

               若 nginx 接收到的客户端请求 URI 是 /name/a.html

    proxy_pass 不使用 URI:
    location /name/ {
            proxy_pass  http://192.168.30.20;
    }
    
    传送到后端服务器的 URI ,http://192.168.30.20/name/a.html
    
    proxy_pass 使用 URI:
    location /name/ {
           proxy_pass http://192.168.30.20/remote/;
    }
    传送到后端服务器的 URI,http://192.168.30.20/remote/a.html;
    
    location /name/ {
           proxy_pass http://192.168.30.20/;
    }
    传送到后端服务器的 URI,http://192.168.30.20/a.html
    

      在这里有一个需要注意的细节,地址末尾带有斜线,实际上被认为定义了 URI

           如果 location 块使用了正则表达式定义路径,则 proxy_pass 指令不再使用 URI

           如果在 location 块使用  rewrite 指令重写了 URI,那么 nginx 服务器则使用重写后的 URI 处理请求,而忽略 proxy_pass 中指定的 URI

           2,proxy 模块的其它指令

                 (1),proxy_connect_time time; 和后端服务器建立链接的超时时间

                 (2),proxy_cookie_domain domain replacement;

                         设置 "Set-Cookie" 响应头中 domain 属性的替代文本,如,proxy_cookie_domain localhost example.org;

                         注:浏览器对 cookie 有比较多的限制,如果 cookie 的 domain 属性和当前页面的 domain 不匹配则就无法写入。所以,如果请求 A 域名,服务器 proxy_pass 至

    B 域名,然后 B 服务器输出 domain=B 的 cookie,前端的页面依然停留在 A 域名上,于是浏览器就无法将 cookie 写入

                 (3),proxy_set_header field value;

                         重新定义或添加发往后端真实服务器的请求头,value 可以包含文本、变量或它们的组合

                         默认情况下有两个请求头会被重新定义:

    proxy_set_header Host $proxy_host;
    proxy_set_header Connection close;
    

                     Host 的含义是表明请求的主机名,因为 nginx 作为反向代理,而如果后端真实的服务器设置有类似防盗链或根据 http 请求头中的 host 字段进行路由或判断功能的话,

    如果 nginx 作为反向代理层不重写请求头中的 host 字段,将会导致请求失败,默认情况下反向代理服务器会向后端真实服务器发送请求,并且请求头中的 host 字段应为 proxy_pass

    指令设置的服务器

            下面看一下 X-Forwarded-For、X-Real-IP、remote_addr 这三者之间的区别

            

  • 相关阅读:
    [转]Flex PieChart
    Flash Builder 4 下载
    [转]Android如何防止apk程序被反编译
    [转]自定义Spinner五步走
    [转]coolpad 获得 root
    [转]c# .net 用程序画图 曲线图
    android ContentProvider 遭遇 failed to find provider info
    [转]如何把多个Android Project打包成一个APK
    android loading界面 及 处理
    [转]android中生成和使用jar 分享
  • 原文地址:https://www.cnblogs.com/leeyongbard/p/10889933.html
Copyright © 2020-2023  润新知