通过haproxy发出呼叫请求时获取404(直接可以正常使用)

时间:2019-06-24 12:16:23

标签: reverse-proxy haproxy

我直接使用url调用网络服务  curl http://venesh.ir/webservice/oauth/token 我收到错误403, 但是当我从某个服务器通过反向代理调用它时,我得到了404,haproxy是否可以更改我的地址?

haproxy配置:

frontend localhost
    bind *:8081
    option tcplog
    mode tcp
    acl isVenesh dst_port 8081
    use_backend venesh if isVenesh
    default_backend venesh


backend venesh
    mode tcp
    balance roundrobin
    server web01 venesh.ir:80 check

当我致电mySerevrIp:8081/webservice/oauth/token时,我希望得到直接致电的结果 curl http://venesh.ir/webservice/oauth/token即403,

但是当我致电curl mySerevrIp:8081/webservice/oauth/token时,我收到错误404,

我的haproxy或我的配置是否有问题,或者可能是由于venesh.ir网站导致的问题?

2 个答案:

答案 0 :(得分:3)

看来http://venesh.ir/webservice/oauth/token期望主机标头为venesh.ir。您可以从命令行进行测试。如果主机标头不是venesh.ir,它将返回404:

$ curl -I -H 'Host: 1.1.1.1'  http://venesh.ir/webservice/oauth/token
HTTP/1.1 404 Not Found
Date: Mon, 24 Jun 2019 17:48:56 GMT
Server: Apache/2
Content-Type: text/html; charset=iso-8859-1

如果将模式更改为http :,则可以将主机头添加到配置中:

frontend localhost
    bind *:8081
    option httplog
    mode http
    default_backend venesh

backend venesh
    mode http
    balance roundrobin
    http-request set-header Host venesh.ir
    server web01 venesh.ir:80 check

答案 1 :(得分:1)

@mweiss的答案是正确的,我发现的另一种方法是在请求标头中将HOST的值设置为venesh.ir,然后tcp反向代理可以正常工作。