使用 "the old way" 时带有反向代理的 ShimmerCat
ShimmerCat with reverse proxy when using "the old way"
我用过ShimmerCat with sc-tool to connect to my development sites as described here, and everything has worked always like a charm with it, but I also wanted to follow the "old way" configuring my /etc/hosts
. In this case I had a small problem, the server ran ok, and I could access to my development site (let's say that I used https://www.example.com:4043/), but I'm also using a reverse proxy as described on this article, and on the config file reference。它重定向到我正在使用的 Django
应用程序。假设这是我的 devlove.yaml
配置文件:
---
shimmercat-devlove:
domains:
www.example.com:
root-dir: site
consultant: 8080
cache-key: xxxxxxx
api.example.com:
port: 8080
问题是,当我尝试访问请求 API
的 URL
时,API
发送了一个 404
响应。让我试着通过一个例子来解释它。我尝试访问 https://www.example.com:4043/country/,并在此页面上向 API
发出请求:/api/<country>/towns/
,然后 API
端点返回 404
响应所以它没有找到这个 URL
,这在使用 Google Chrome
和 sc-tool
时不会发生。我在 /etc/hosts
上设置了两个域 www.example.com
和 api.example.com
。我一直在努力解决它,但没有任何运气,我缺少什么吗?欢迎任何帮助。提前致谢。
有了更多的数据,我们也许能够找到问题所在。同时,这里有一个故障排除提示列表:
可能的问题:DNS 缓存在浏览器中,/etc/hosts 尚未使用(尚未)
如果您的浏览器在您更改 /etc/hosts
文件之前由于某种原因没有进行 DNS 查找,就会发生这种情况。然后连接将转到 Internet 中的域,该域可能没有您正在调用的 API 端点。
疑难解答:检查 ShimmerCat 的日志以查找请求。如果这是问题所在,关闭并打开浏览器可能会解决问题。
可能的问题:主机header不正确
ShimmerCat使用HTTP/1.1请求中的Host
header和HTTP/2请求中的:authority
header来区分域.它总是丢弃其中存在的任何端口号。如果这些 header 未设置或设置为 ShimmerCat 配置为侦听的域以外的域,服务器将认为这种情况非常卑鄙,它只会关闭连接。
故障排除:这不是 404 错误,而是连接关闭(如果尝试连接 un-proxied,直接连接到 ShimmerCat 正在侦听的 SSL 端口),或 Socks 连接失败(如果尝试通过 ShimmerCat 的 built-in SOCKS5 代理连接)。在前一种情况下,服务器将在其日志中打印消息 "Rejected request to Just https://some-domain-or-ip/some/path",使用域的实际值,或 "Rejected request to Nothing",如果不存在 header。第二种情况比较复杂,因为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
Extra-tip:浏览器的开发者工具中有一个网址字段。检查一下,它可能会告诉你一些事情!
可能的问题:将请求传递给 api back-end.
时出现问题
API 后端对主机 header 以及身份验证 cookie 和请求参数等其他内容也很敏感。
故障排除: 一种诊断方法是使用 --show-proxied-headers
command-line 选项调用 ShimmerCat。它使 ShimmerCat 向日志报告代理 headers:
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,忘记停止它,并在更改一些配置位后再次启动它。这两个实例将同时 运行,并且它们中的任何一个都将选择与侦听端口建立的连接。
故障排除:关闭所有ShimmerCat实例,然后double-check有none运行使用[=]的对应形式20=]命令,然后用你想要的配置启动服务器。
我用过ShimmerCat with sc-tool to connect to my development sites as described here, and everything has worked always like a charm with it, but I also wanted to follow the "old way" configuring my /etc/hosts
. In this case I had a small problem, the server ran ok, and I could access to my development site (let's say that I used https://www.example.com:4043/), but I'm also using a reverse proxy as described on this article, and on the config file reference。它重定向到我正在使用的 Django
应用程序。假设这是我的 devlove.yaml
配置文件:
---
shimmercat-devlove:
domains:
www.example.com:
root-dir: site
consultant: 8080
cache-key: xxxxxxx
api.example.com:
port: 8080
问题是,当我尝试访问请求 API
的 URL
时,API
发送了一个 404
响应。让我试着通过一个例子来解释它。我尝试访问 https://www.example.com:4043/country/,并在此页面上向 API
发出请求:/api/<country>/towns/
,然后 API
端点返回 404
响应所以它没有找到这个 URL
,这在使用 Google Chrome
和 sc-tool
时不会发生。我在 /etc/hosts
上设置了两个域 www.example.com
和 api.example.com
。我一直在努力解决它,但没有任何运气,我缺少什么吗?欢迎任何帮助。提前致谢。
有了更多的数据,我们也许能够找到问题所在。同时,这里有一个故障排除提示列表:
可能的问题:DNS 缓存在浏览器中,/etc/hosts 尚未使用(尚未)
如果您的浏览器在您更改 /etc/hosts
文件之前由于某种原因没有进行 DNS 查找,就会发生这种情况。然后连接将转到 Internet 中的域,该域可能没有您正在调用的 API 端点。
疑难解答:检查 ShimmerCat 的日志以查找请求。如果这是问题所在,关闭并打开浏览器可能会解决问题。
可能的问题:主机header不正确
ShimmerCat使用HTTP/1.1请求中的Host
header和HTTP/2请求中的:authority
header来区分域.它总是丢弃其中存在的任何端口号。如果这些 header 未设置或设置为 ShimmerCat 配置为侦听的域以外的域,服务器将认为这种情况非常卑鄙,它只会关闭连接。
故障排除:这不是 404 错误,而是连接关闭(如果尝试连接 un-proxied,直接连接到 ShimmerCat 正在侦听的 SSL 端口),或 Socks 连接失败(如果尝试通过 ShimmerCat 的 built-in SOCKS5 代理连接)。在前一种情况下,服务器将在其日志中打印消息 "Rejected request to Just https://some-domain-or-ip/some/path",使用域的实际值,或 "Rejected request to Nothing",如果不存在 header。第二种情况比较复杂,因为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
Extra-tip:浏览器的开发者工具中有一个网址字段。检查一下,它可能会告诉你一些事情!
可能的问题:将请求传递给 api back-end.
时出现问题API 后端对主机 header 以及身份验证 cookie 和请求参数等其他内容也很敏感。
故障排除: 一种诊断方法是使用 --show-proxied-headers
command-line 选项调用 ShimmerCat。它使 ShimmerCat 向日志报告代理 headers:
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,忘记停止它,并在更改一些配置位后再次启动它。这两个实例将同时 运行,并且它们中的任何一个都将选择与侦听端口建立的连接。
故障排除:关闭所有ShimmerCat实例,然后double-check有none运行使用[=]的对应形式20=]命令,然后用你想要的配置启动服务器。