如果客户端提供,NGiNX 标头将更新

如果客户端提供,NGiNX 标头将更新

我们的应用程序在 NGiNX 服务器上运行,并根据主机的逻辑决定数据库。

从过去的几天开始,我们的一个客户覆盖主机、用户代理和其他标头,而 NGiNX 无法获取准确的标头详细信息,导致我们的应用程序变得混乱。

GET /api/http.php” _ 200 24 “-” “-” “-” “_” “-” to: 10.0.0.48:8080: 0.014 request_time 0.153

通常我们会得到

 /index.php HTTP/1.1” vtermination.com 302 5 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36” “-” “_” “-” to: 10.0.0.27:8080: 0.004 request_time 0.347

NGiNX 是否有可能不会替换主机和用户代理等标头?

答案1

标头变量由连接到您的服务器的 HTTP 客户端设置。

nginx 不会以任何方式覆盖这些标头,因此您的应用程序必须准备好从这些标头中获取任意值。

但是,如果您只关心 HTTPHost标头,那么您可以限制 nginx 将传递给您的应用程序的请求。

配置看起来应该是这样的:

server {
    listen 443 ssl;
    listen 80;
    server_name example.com;

    ... rest of application and SSL configuration ...
}

server {
    listen 443 ssl default_server;
    listen 80 default_server;

    ... SSL configuration with self-signed keys ...

    return 404;
}

第一个配置块中的 使得 nginx 在标头server_name为 时仅向该块发送请求。您需要将您自己的域名更改为该行。Hostexample.com

第二个server块用于所有其他Host标头值,或所有没有Host标头的请求。在这种情况下,我们只是对每个请求响应 HTTP 状态代码 404。

相关内容