我在 Ubuntu 上运行 nginx/1.19.6。
我正在努力让上游模块在不返回 404 的情况下工作。
我的 *.conf 文件位于 /etc/nginx/conf.d/
文件 factory_upstream.conf:
upstream factoryserver {
server factory.service.corp.com:443;
}
文件 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
...
密钥包含名称“factoryserver”,我不知道这是否重要。可以?服务器版本和我输入命令 nginx -v 看到的不一样,即: nginx version: 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?