zoukankan      html  css  js  c++  java
  • Nginx配置proxy_pass转发/路径问题

    proxy_ignore_client_abort on; #不允许代理端主动关闭连接 

    upstream的负载均衡,四种调度算法

    #调度算法1:轮询.每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响 upstream webhost { server
    192.168.0.5:6666 ; server 192.168.0.7:6666 ; } #调度算法2:weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大 upstream webhost { server 192.168.0.5:6666 weight=2; server 192.168.0.7:6666 weight=3; } #调度算法3:ip_hash. 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题 upstream webhost { ip_hash; server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; } #调度算法4:url_hash(需安装第三方插件).此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率.Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包 upstream webhost { server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; hash $request_uri; } #调度算法5:fair(需安装第三方插件).这是比上面两个更加智能的负载均衡算法.此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配.Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块

    在nginx中配置proxy_pass时,如果是按照 ^~ 正则匹配路径时,要注意proxy_pass后的url最后的 /

    如果加上了/,则会把匹配的路径部分也给代理走;

    如果没有/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走。

    (注意:这里说的是proxy_pass的url后面的"/",不是指location 后面的"/")

    假如已有站点:http://js.test.com/test.html

    location  /static_js/   { 
        proxy_pass http://js.test.com/; (这里的最后面的"/")
    }

    如上面的配置,如果请求的url是http://servername/static_js/test.html,会被代理成http://js.test.com/test.html

    而如果这么配置

    location  /static_js/  { 
        proxy_pass http://js.test.com; 
    }

    则会被代理到http://js.test.com/static_js/test.htm,产生无法访问从而报错

    如果换成下面这样,也会报错:
    location ^~ /static_js/ {
        proxy_pass http://js.test.com; 
    }

    但是,这样就没问题了:
    location ^~ /static_js/ {
        proxy_pass http://js.test.com/
    }

    当然,我们可以用如下的rewrite来实现/的功能

    location ^~ /static_js/ { 
        rewrite /static_js/(.+)$ /$1 break; 
        proxy_pass http://js.test.com; 


    下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。

    第一种:

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81/;

    }

    会被代理到http://127.0.0.1:81/test.html 这个url

    第二咱(相对于第一种,最后少一个 /)

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81;

    }

    会被代理到http://127.0.0.1:81/proxy/test.html 这个url

    第三种:

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81/ftlynx/;

    }

    会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。

    第四种情况(相对于第三种,最后少一个 / ):

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81/ftlynx;

    }

    会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url

  • 相关阅读:
    快速创建一个 Servlet 项目(1)
    快速创建一个 Servlet 项目(2)
    多级派生情况下派生类的构造函数
    最近看了点C++,分享一下我的进度吧!
    进程同步&进程间通信
    multiprocess模块
    进程
    网络编程之socket
    网络通信原理
    网络通信的流程 | 初始socket
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/11949943.html
Copyright © 2011-2022 走看看