Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
到主机/路径的HAProxy路径/_Haproxy - Fatal编程技术网

到主机/路径的HAProxy路径/

到主机/路径的HAProxy路径/,haproxy,Haproxy,请容忍我,因为我不是天生的程序员 这是我试图用HAproxy实现的,但经过几个小时的检查,我无法使它以某种方式工作 从 domain.com/alpha domain.com/beta 到 domain.com/alpha将指向backend1/path/index.cgi domain.com/beta将指向backend2/path/index.cgi 我尝试过多种方法,但都没有成功,我确实读过关于重写/重定向的文章,但不知怎的,这让我很困惑。例如“reqrep” 通过使用alpha.dom

请容忍我,因为我不是天生的程序员

这是我试图用HAproxy实现的,但经过几个小时的检查,我无法使它以某种方式工作

  • domain.com/alpha
  • domain.com/beta
  • domain.com/alpha将指向backend1/path/index.cgi
  • domain.com/beta将指向backend2/path/index.cgi
  • 我尝试过多种方法,但都没有成功,我确实读过关于重写/重定向的文章,但不知怎的,这让我很困惑。例如“reqrep”

    通过使用alpha.domain.com指向后端1,路径按预期工作,但由于证书限制,我需要内联路径


    提前感谢您,如果可能的话,请解释一下它是如何工作的,以及正确的术语是什么(例如:重写、重定向),这样我就可以知道这方面的线索,我将从那里继续前进。

    这就是我能够想到的:

    frontend HTTP
        mode http
        bind *:80
    
        acl alpha url_beg /alpha
        acl beta url_beg /beta
        use_backend backend_alpha if alpha 
        use_backend backend_beta if beta
    
    backend backend_alpha
        reqrep ^([^\ ]*\ /)alpha[/]?(.*)     \1path/index.cgi
        server server_alpha localhost:8080
    
    backend backend_beta
        reqrep ^([^\ ]*\ /)beta[/]?(.*)     \1path/index.cgi
        server server_beta localhost:8081
    
    显然,您将使用适合您的案例的正确位置替换
    localhost:8080
    localhost:8081

    解释

    首先,在名为HTTP的前端中有两个ACL(访问控制列表),用于测试URL开头的内容(因此使用关键字
    URL\u beg
    )。这些规则的结果是,如果url以
    /alpha
    开头,则名为
    alpha
    的变量设置为true,然后对beta设置为true

    接下来在前端,如果变量
    alpha
    设置为true,则有两个
    use_backend
    命令将请求定向到
    backend_alpha
    ,如果变量
    beta
    设置为true,则
    backend_beta
    也有相同的命令

    因此,前端负责获取url并决定使用哪台服务器

    两个后端(
    backend_alpha
    backend_beta
    )几乎相同,除了文本
    alpha
    beta
    以及各自服务器的位置。后端中的第一个命令是您指出的
    reqrep
    命令。
    reqrep
    命令的作用是获取一个url,使用正则表达式搜索特定部分,然后用其他内容替换它。在本例中,我们有以下url:

    http://example.com/alpha
    
    在报告的第一部分:

    • ^([^\]*\/)
      需要
      http://example.com/
      并将其存储在名为
      \1
    • alpha
      然后与给定url中的
      alpha
      匹配
    • [/]?(.*)
      获取
      alpha
      之后的所有内容,并将其存储在名为
      \2
      (在这种情况下,
      \2
      将等于零,因为url中的
      alpha
      后面没有任何内容)
    然后,
    reqrep
    命令的第二部分说获取
    \1
    的内容(
    http://example.com/
    )并在末尾添加
    path/index.cgi
    ,使其成为发送到服务器的新url

    因此,对于alpha和beta url,发送到服务器的结果url都是
    http://example.com/path/index.cgi

    最后,
    server
    命令将的请求发送到相应的服务器

    我想指出的是,我不是复杂正则表达式部分的专家(我也觉得有点困惑),但希望其他知道多一点的人能更详细地解释它,或者在我错的时候纠正我


    我希望这有帮助:)

    您能告诉我如何查找用户是否只输入了wwwdomaincom。我不明白。检查
    path\u beg-i
    不起作用,因为它出现了,即使没有显示在浏览器地址栏中,类似的东西实际上出现在wwwdomaincom/HTTP 1.1中,因此检查path\u beg的空白在@allinking中不起作用。也许你最好提出我们自己的问题,而不是在这里提问。这样,其他可能知道答案的人可以提供帮助。