我已经使用ShimmerCat与sc-tool连接到我的开发网站here,并且所有内容都像是一个魅力,但我也想遵循“老方法“配置我的/etc/hosts
。在这种情况下,我有一个小问题,服务器运行正常,我可以访问我的开发站点(假设我使用https://www.example.com:4043/),但我也使用反向代理,如{{3在} this article上。它会重定向到我正在使用的Django
应用。假设它是我的devlove.yaml
配置文件:
---
shimmercat-devlove:
domains:
www.example.com:
root-dir: site
consultant: 8080
cache-key: xxxxxxx
api.example.com:
port: 8080
问题在于,当我尝试访问请求URL
的{{1}}时,会从API
发送404
响应。让我试着通过一个例子来解释它。我尝试访问config file reference,并在此页面上向API
API
发出请求,然后/api/<country>/towns/
端点返回API
响应所以它没有找到404
,这在使用URL
与Google Chrome
时不会发生。我在sc-tool
上设置了www.example.com
和api.example.com
两个域名。我一直试图解决它,但没有运气,有什么我想念的吗?欢迎任何帮助。提前谢谢。
答案 0 :(得分:1)
通过更多的数据,我们可以找到问题。与此同时,这里有一个故障排除提示列表:
如果您的浏览器在更改/etc/hosts
文件之前未完成DNS查找,则会发生这种情况。然后连接将转到Internet中可能没有您正在调用的API端点的域。
疑难解答:查看ShimmerCat的日志以获取请求。如果这是问题,关闭和打开浏览器可能会解决问题。
ShimmerCat使用HTTP / 1.1请求中的Host
标头和HTTP / 2请求中的:authority
标头来区分域。它总是丢弃它们中存在的任何端口号。如果未设置这些标头或将其设置为除ShimmerCat配置为侦听的域之外的域,则服务器将认为情况如此卑鄙,以至于它将关闭连接。
疑难解答:这不是404错误,而是关闭连接(如果尝试连接未代理,直接连接到ShimmerCat正在侦听的SSL端口),或者Socks连接失败(如果试图通过ShimmerCat的内置SOCKS5代理连接。在前一种情况下,服务器将使用域的实际值在其日志中打印消息“拒绝请求至https://some-domain-or-ip/some/path”,或者“拒绝请求到Nothing “,如果没有标题。第二种情况更复杂,因为SOCKS5代理在HTTP路由算法之前。
在任何情况下,浏览器都会在开发人员工具的网络面板中添加一条红线。如果您使用curl
访问服务器,请执行以下操作:
curl -k -H host:api.incorrect-domain.com https://127.0.0.1:4043/contents/blog/data-density/
或喜欢
curl -k -H host:api.incorrect-domain.com
(注意第二种形式的--http2
参数),您将收到回复:
curl: (56) Unexpected EOF
额外提示:浏览器的开发人员工具中有一个网络地址字段。检查一下,它可能会告诉你一些事情!
API后端对主机头以及身份验证cookie和请求参数等其他内容也很敏感。
疑难解答:诊断事物的方法是使用--show-proxied-headers
命令行选项调用ShimmerCat。它使ShimmerCat将代理头报告给日志:
Issuing request with headers :authority: api.example.com
:method: GET
:path: /my/api/endpoint/path/
:scheme: https
accept: */*
user-agent: curl/7.47.0
......他们正在使用不同的配置。 ShimmerCat使用多个进程之间的端口共享来提高可用性。这样做的缺点是完全有可能错误地启动ShimmerCat,忘记停止它,并在更改一些配置位后再次启动它。这两个实例将同时运行,其中任何一个都会选择与侦听端口建立的连接。
疑难解答:关闭ShimmerCat的所有实例,然后使用相应形式的ps
命令仔细检查没有运行,并使用所需的配置启动服务器。