我直接使用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网站导致的问题?
答案 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反向代理可以正常工作。