标签: http

如何检查 Nginx 规则中是否存在响应标头?

事实证明,在 Nginx 中设置请求的重写规则非常容易。对于回应,没有那么多(至少对我来说不是)。如果未设置响应的 Content-Length 标头,我想从响应中删除 Content-Type 标头。我安装了NginxHttpHeadersMoreModule,这样我就可以删除标头,但我似乎找不到一种方法来使用 Nginx 配置中的规则来检查响应的 Content-Length 标头是否存在。任何有关如何执行此操作的建议将不胜感激!

http nginx http-headers

6
推荐指数
1
解决办法
3万
查看次数

wget - 仅当返回码为 200 时才保存,否则删除

我有一个脚本每隔几分钟检查一次我的公共 IP 地址。
问题是ISP有时会给我缓存的页面(我知道,我已经使用了wget中的所有相关参数,ISP是由一群无能的某人组成的,他们显然制作了自己的超高效缓存服务器)或我自己的路由器制作的错误页面。
结果,当 wget 应该保存我的 IP 地址时,它却保存了错误页面。

编辑:
我用什么来检测IP地址的变化
http://paste.debian.net/292602/

linux http wget

6
推荐指数
1
解决办法
2万
查看次数

HTTP 到 HTTPS 本地代理,可以通过代理进行 HTTPS 连接

这是交易:

  • 我们的客户端软件只能使用http协议连接,不能使用https。
  • 然而,安全要求决定了端到端的安全性,因此我们在与服务器通信时需要使用 https。
  • 现在我已经能够通过使用具有以下配置的stunnel在测试环境中执行此操作:

stunnel.conf 文件:

[mylocalproxy]
client = yes
accept = 127.0.0.1:3000
connect = the.real.server:443
Run Code Online (Sandbox Code Playgroud)
  • 鉴于上面的 stunnel 配置,我可以将我的测试客户端配置为使用端点地址http://localhost:3000/endpoint/url/,并且一切正常。
  • 但在生产环境中,客户端无法直接通过网络访问真实服务器。来自客户端的 HTTP/S 流量必须经过代理服务器。
  • 我的问题:
    • 是否可以配置 stunnel 以使用代理服务器进行连接?
    • 如果无法使用 stunnel,是否有其他方法可以实现此目的?

windows http proxy https stunnel

6
推荐指数
1
解决办法
4341
查看次数

Nginx - 允许没有主机标头的请求

当 Nginx 收到缺少 Host 标头的请求时,它会拒绝该请求并返回 400 响应。正如它应该。

有没有办法解决?

有一个硬件需要能够对我的 Nginx Web 服务器进行 REST 调用,但该设备未发送主机标头。我对此无能为力,我无法控制该设备的内部运作。

这将是唯一一个与我的 Web 服务器通信且缺少主机标头的设备,并且它将始终连接到同一位置。服务器使用基于名称的虚拟主机。

我尝试使用headers-more-nginx模块重建我的服务器,因为我相信它可以在处理请求之前向请求添加标头。我将以下行添加到该虚拟主机的 server{} 块中:

more_set_input_headers  "Host: device.myserver.com";
Run Code Online (Sandbox Code Playgroud)

但请求仍然被 400 拒绝。

编辑:

我忘了提及这些设备目前能够向 lighttpd 1.4.28 Web 服务器发出请求。我正在尝试让他们在 Nginx 上工作。我在 lighttpd 配置文件中找不到任何应该允许它工作的特殊内容,似乎 lighttpd 不需要这个标头。

编辑2:

tcpdump 的结果(我删除了不应该放在网上的内容):

POST http://XXX.XXX.XXX.com/index/get-next-command HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 62

user=XXX&pass=XXX&v=0103HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10-1ubuntu3.21
Set-Cookie: PHPSESSID=XXX; path=/
Set-Cookie: username=XXX; path=/
Set-Cookie: password=XXX; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: …
Run Code Online (Sandbox Code Playgroud)

http nginx http-headers

6
推荐指数
1
解决办法
8821
查看次数

如何处理新的 HTTPS 连接中的突然爆发?

我在负载平衡器后面有一组 Java Vertx 服务器,用于处理峰值流量。一分钟它可能处理 150k r/m,下一分钟它可能处理 2mm r/m,然后又回到 150k r/m。我发现在这些高峰期间,整个队列可能会在几分钟内无响应并断开连接,而任何一台机器上的 cpu 和 mem 压力几乎没有达到 50% 的利用率。

为了测试究竟是什么导致了中断,我设置了一个测试服务器,它与我的生产队列中的一个服务器的规格相匹配,以查看在它发出之前我可以投入多少。我的测试涉及使用其他 10 台机器,每台机器打开 500 个到服务器的 https 连接,并发送 1mm 请求,每个请求有效负载约 2kb。这总共打开了 5k 个并发连接,发送了总共 10mm 的请求,用于大约 20gb 的数据传输。

一旦连接打开,我每分钟可以发出大约 70 万个请求。我只是通过向健康端点发出请求并记录响应时间来监控服务器的可用性。响应时间快,几十毫秒。我对这些结果很满意。

但是在大量数据开始进入之前,这 10 台机器必须首先建立 5k 连接。在此期间,服务器无响应,甚至在我尝试检查运行状况端点时可能超时。我相信这就是导致我的生产车队中断的原因 - 新连接的突然增加。一旦建立连接,服务器就可以轻松处理传入的所有数据。

我已经更新了 nofile ulimit、net.core.netdev_max_backlog、net.ipv4.tcp_max_syn_backlog 和 net.core.somaxconn,但在几秒钟内收到一连串 5k 新连接请求时它仍然挂起。

我可以做些什么来更快地建立新的连接?

编辑:

实际的服务器在 docker 容器中运行。我的网络设置没有应用于容器。接下来要尝试一下,看看它是否有所作为。

编辑编辑:

这一切都在 SSL 中。通过普通 HTTP 快速建立如此多的连接几乎是即时的。所以我必须弄清楚如何更快地建立 TLS 连接。

编辑编辑编辑:

我发现本机 java 安全 ssl 处理程序是瓶颈。切换到netty-tcnative(又名本机 OpenSSL)几乎解决了我的 HTTPS 问题。

networking linux http java tcp

6
推荐指数
1
解决办法
385
查看次数

Win32/.NET 应用程序和浏览器(但不是 CURL)突然无法在 AWS VM 上发出 HTTP 请求

环境:AWS / Microsoft Windows Server 2019 虚拟机

一些 .NET 应用程序在 VM 上运行(作为 Windows 服务),这些应用程序发出各种 HTTP 请求。其中之一还使用 MQTT(通过 MQTTnet)将事件从外部服务中继到不同的 HTTP API。

几天内一切都会按预期工作,直到最终来自应用程序的 HTTP 请求开始超时。

Windows 事件查看器每隔几分钟就会显示以下错误:“WinHTTP Web 代理自动发现服务服务因以下特定于服务的错误而终止:无法创建终结点映射器数据库条目。”

此时,似乎任何 Win32/.NET 应用程序都将无法执行 HTTP 请求,包括 IE 等,但 CURL 除外。同样,其他网络连接和协议似乎也很好。我假设这可能是由于 WinHttp(或其他低级 Win32 HTTP 服务)的问题造成的?我花了一些时间研究 Web 代理自动发现服务,并试图理解为什么它会突然开始失败(以及这是原因还是只是结果),但我在网上没有找到任何信息。

我还没有找到可以解决此问题的纠正措施(重新启动服务、使用 netsh 重置内容等)。似乎只有完全重新启动 Windows 才能解决该问题。此时,WinHTTP Web 代理自动发现服务再次正常工作,http 请求再次工作,等等。

我什至很难找到从哪里开始解决这个问题。 文本

windows http winhttp

6
推荐指数
1
解决办法
1716
查看次数

通过 SSL 需要 Host: 标头吗?

即使请求不是 HTTP/1.1,是否也需要通过 SSL 的 Host: 标头?

因此,如果客户端通过 SSL 连接,并发送以下请求:

GET / HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
  1. 由于缺少 Host: 标头,Web 服务器是否应该抛出错误的请求?
  2. Web 服务器是否应该以 HTTP/1.0 200 OK 响应进行响应?
    ( index.html 文件始终存在,因此对/的请求永远不会导致 403/404)

更新:

如果我在 中禁用 SNI openssl s_client,apache 将在没有 Host: 标头的情况下工作。

为什么在 SNI 开启时需要 Host: 标头?

ssl http host-headers

6
推荐指数
2
解决办法
1423
查看次数

如何通过 HTTP/Web 浏览器启用 Shell 访问?

我希望通过 HTTP(使用 Web 浏览器)向我的一些用户授予 Shell 访问权限。是否有实用程序,最好是免费的,我可以用它来启用它。

没有。用户约为。100 并且我想要为每个人设置单独的 shell 会话,并且 Web 界面应该要求他们使用他们的用户/密码凭据登录。

linux http ssh shell web-server

5
推荐指数
1
解决办法
8861
查看次数

IIS 的“失败请求跟踪”中未跟踪 HTTP 500 错误

我在 IIS7 中创建了一个新站点,在该站点下添加了一个新应用程序。当我尝试使用这个新应用程序下的 ASP.NET Web 服务时,我收到一个 HTTP 500 内部服务器错误。

我查看了事件日志、IIS 日志,并尝试设置“失败的请求跟踪”,但似乎没有任何跟踪。我已将其设置为检查所有内容、详细错误日志记录和范围为 400-600 的 HTTP 错误。但是在 FailedReqLogFiles 文件夹下没有记录任何内容。此 IIS 配置中的其他站点似乎可以很好地跟踪失败的请求。

我可以看到 HTTP GET 请求被记录在该站点的 IIS 日志中,但它们显然不是很有帮助,因为它们只是显示请求返回 500 错误。

我已检查资源管理器中站点文件夹的权限,并确保匿名访问已打开,并且应用程序池标识也可以访问文件夹的内容。

有任何想法吗?我是否提供了有关问题的足够信息?在此先感谢您提供的任何帮助或建议。

iis windows-server-2008 http iis-7

5
推荐指数
1
解决办法
7203
查看次数

使用基本身份验证响应 HTTP 选项

我们有一个在 IIS6 基本身份验证后面托管 Office 文档的网站。

IE 具有用于基本身份验证的身份验证令牌,用于下载文件。用户单击“打开”,然后 Microsoft Office 协议发现对提供文件的目录执行 HTTP OPTIONS 请求。但是,Office 没有 IE 具有的身份验证令牌,因此它会再次提示输入凭据。然后点击取消将在 Office 中显示该文件。

由于我们不是类似 Sharepoint 的应用程序,并且我们没有响应 OPTIONS 的方法,因此我想使用 OPTIONS 方法(使用“Microsoft Office Protocol Discovery ") 类似于空的 200,如 RFC 2616所述:

如果没有包含响应正文,则响应必须包含一个字段值为“0”的 Content-Length 字段。

我倾向于使用 200 响应的 ISAPI 过滤器 - 在基本身份验证发生之前。Windows 身份验证或匿名访问不是选项。有没有我缺少的替代品?

http iis-6 microsoft-office http-basic-authentication

5
推荐指数
1
解决办法
5415
查看次数