NGINX:使用上游服务器名称

问题描述

我在 Ubuntu 上运行 Nginx/1.19.6。

我正在努力让上游模块正常工作而不返回 404。

我的 *.conf 文件位于 /etc/Nginx/conf.d/

FILE factory_upstream.conf:

upstream factoryserver  {
    server  factory.service.corp.com:443;
}

FILE factory_service.conf:

server
{
    listen 80;
    root /data/www;

    proxy_cache factorycache;
    proxy_cache_min_uses 1;
    proxy_cache_methods GET HEAD POST;

    proxy_cache_valid 200  72h;
    #proxy_cache_valid any  5m;

    location /factory/ {
        access_log /var/log/Nginx/access-factory.log  main;
        proxy_set_header x-apikey abcdefgh12345678;
        ### Works when expressed as a literal.#   proxy_pass https://factory.service.corp.com/;
        ### 404 when using the upstream name.
        proxy_pass https://factoryserver/;
    }
}

我将错误日志设置为调试,但在重新加载配置并尝试调用后,错误日志中没有新记录。

Nginx -t     # Scans OK
Nginx -s reload    # no errors
cat /var/log/Nginx/error.log
...
2021/03/16 11:29:52 [notice] 26157#26157: signal process started
2021/03/16 11:38:20 [notice] 27593#27593: signal process started

access-factory.log 确实记录了请求:

127.1.2.3 --;[16/Mar/2021:11:38:50 -0400];";GET /factory/api/manifest/get-full-manifest/PID/904227100052 HTTP/1.1" ";/factory/api/manifest/get-full-manifest/PID/904227100052" ;404; - ;/factory/api/manifest/get-full-manifest/PID/904227100052";-" ";ID="c4cfc014e3faa803c8fe136d6eae347d ";-" ";10.8.9.123:443" ";404" ";-"

为了帮助调试,我缓存了 404 错误,“proxy_cache_valid any 5m;”在上面的例子中注释掉了: 当我使用上游名称时,缓存文件包含以下内容

<@#$ non-printable characters $%^>
KEY: https://factoryserver/api/manifest/get-full-manifest/PID/904227100052
HTTP/1.1 404 Not Found
Server: Nginx/1.17.8
Date: Tue,16 Mar 2021 15:38:50 GMT
...

密钥包含名称“工厂服务器”,我不知道这是否重要。可以? 服务器版本与我输入命令Nginx -v时看到的不同,即:Nginx版本:Nginx/1.19.6 缓存文件和命令行中的版本差异是否表明了什么?

当我切换回 proxy_pass 中的文字服务器名称时,我收到 200 响应,其中包含所请求的数据。然后缓存文件中的 Key 包含文字上游服务器名称

<@#$ non-printable characters $%^>
KEY: https://factory.service.corp.com/api/manifest/get-full-manifest/PID/904227100052
HTTP/1.1 200
Server: Nginx/1.17.8
Date: Tue,16 Mar 2021 15:59:30 GMT
...

我将有多个上游服务器,每个服务器提供不同的服务。该配置将部署到多个工厂,每个工厂都有自己的上游服务器。 我希望部署团队只需更新 *_upstream.conf 文件,并在部署站点之间保持 *_service.conf 文件静态。

  • factory_upstream.conf
  • product_upstream.conf
  • shipping_upstream.conf
  • abc123_upstream.conf

为什么我在使用命名的上游服务器时会收到 404?

解决方法

请提供有关代理传递请求的服务器配置的更多信息。我现在看到的唯一区别是您在上游服务器中指定了端口 (443)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...