Nginx 配置错误
Nginx configuration errors
我在使用 url 配置 nginx 反向代理时遇到了一些问题。
我的配置是:
events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
access_log /dev/stdout combined;
error_log /dev/stdout warn;
server {
ssl_certificate /opt/ssl/ca.crt;
ssl_certificate_key /opt/ssl/ca.key;
listen 443 ssl;
location /api/v1/namespaces/mynamespace/services/prometheuslb/proxy/ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://prometheuslb.mynamespace.svc.skydns.local:9090/";
proxy_pass $endpoint;
}
location /api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy/ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://pushgatewaylb.mynamespace.svc.skydns.local:9091/";
proxy_pass $endpoint;
}
location /api/v1/namespaces/mynamespace/services/cratedb/proxy/ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://cratedb.mynamespace.svc.skydns.local:4200/";
proxy_pass $endpoint;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
}
}
}
对于 Prometheus url 我有一个 无限循环 所以页面无法加载。
对于 Pushgateway,它重定向错误,因为它应该在 /api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy/ 中查找样式,但它忽略了 url 部分,例如它应该在 [= 中查找样式55=]/静态/jquery-2.1.4.min.js
对于 cratedb,我收到此错误:资源被解释为样式表但使用 MIME 类型传输 text/html
我可以修改现有的服务器块,但我不能创建一个单独的服务器块。
我测试了 ping 目标,它们工作正常,即使我不使用变量,它们也工作正常,但我需要使用带有解析器的变量,因为我们需要 nginx 正常启动,即使端点不可用。
如何修复这些错误?
谢谢。
编辑1:
非常感谢@Richard Smith 的回复,我不是 nginx 专家,非常感谢您的帮助:
新配置:
location ~ ^/api/v1/namespaces/mynamespace/services/prometheuslb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://prometheuslb.mynamespace.svc.skydns.local:9090";
proxy_pass $endpoint;
}
location ~ ^/api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://pushgatewaylb.mynamespace.svc.skydns.local:9091";
proxy_pass $endpoint;
}
location ~ ^/api/v1/namespaces/mynamespace/services/cratedb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://cratedb.mynamespace.svc.skydns.local:4200";
proxy_pass $endpoint;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
}
修复了 cratedb 样式错误和 Prometheus 无限循环。
现在我在 prometheus 中有其他错误,在检查浏览器时说 GET https://domain/api/v1/namespaces/clautagsfed/services/prometheuslb/proxy/api/v1/query?query=time()&_=1541522597396 400 (Bad Request),
所以似乎配置中缺少一些东西(没有变量它工作正常)。
关于 Pushgateway 与上面解释的相同的问题,它应该在 /api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy/static/jquery-2.1.4.min.js 中看起来是样式,但它在 jquery 中看起来-2.1.4.min.js
谢谢
使用变量时,proxy_pass
指令的行为会发生变化。基本上,如果指定 URI,则需要指定完整的 URI。有关详细信息,请参阅 this document。
- 从您的
$endpoint
变量中删除尾随 /
- 使用
rewrite...break
语句转换 URI,或者将您的位置转换为 正则表达式 并使用捕获
例如:
location ~ ^/api/v1/namespaces/mynamespace/services/prometheuslb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://prometheuslb.mynamespace.svc.skydns.local:9090";
proxy_pass $endpoint$is_args$args;
}
我在使用 url 配置 nginx 反向代理时遇到了一些问题。 我的配置是:
events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
access_log /dev/stdout combined;
error_log /dev/stdout warn;
server {
ssl_certificate /opt/ssl/ca.crt;
ssl_certificate_key /opt/ssl/ca.key;
listen 443 ssl;
location /api/v1/namespaces/mynamespace/services/prometheuslb/proxy/ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://prometheuslb.mynamespace.svc.skydns.local:9090/";
proxy_pass $endpoint;
}
location /api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy/ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://pushgatewaylb.mynamespace.svc.skydns.local:9091/";
proxy_pass $endpoint;
}
location /api/v1/namespaces/mynamespace/services/cratedb/proxy/ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://cratedb.mynamespace.svc.skydns.local:4200/";
proxy_pass $endpoint;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
}
}
}
对于 Prometheus url 我有一个 无限循环 所以页面无法加载。
对于 Pushgateway,它重定向错误,因为它应该在 /api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy/ 中查找样式,但它忽略了 url 部分,例如它应该在 [= 中查找样式55=]/静态/jquery-2.1.4.min.js
对于 cratedb,我收到此错误:资源被解释为样式表但使用 MIME 类型传输 text/html
我可以修改现有的服务器块,但我不能创建一个单独的服务器块。
我测试了 ping 目标,它们工作正常,即使我不使用变量,它们也工作正常,但我需要使用带有解析器的变量,因为我们需要 nginx 正常启动,即使端点不可用。
如何修复这些错误? 谢谢。
编辑1:
非常感谢@Richard Smith 的回复,我不是 nginx 专家,非常感谢您的帮助: 新配置:
location ~ ^/api/v1/namespaces/mynamespace/services/prometheuslb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://prometheuslb.mynamespace.svc.skydns.local:9090";
proxy_pass $endpoint;
}
location ~ ^/api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://pushgatewaylb.mynamespace.svc.skydns.local:9091";
proxy_pass $endpoint;
}
location ~ ^/api/v1/namespaces/mynamespace/services/cratedb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://cratedb.mynamespace.svc.skydns.local:4200";
proxy_pass $endpoint;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
}
修复了 cratedb 样式错误和 Prometheus 无限循环。
现在我在 prometheus 中有其他错误,在检查浏览器时说 GET https://domain/api/v1/namespaces/clautagsfed/services/prometheuslb/proxy/api/v1/query?query=time()&_=1541522597396 400 (Bad Request),
所以似乎配置中缺少一些东西(没有变量它工作正常)。
关于 Pushgateway 与上面解释的相同的问题,它应该在 /api/v1/namespaces/mynamespace/services/pushgatewaylb/proxy/static/jquery-2.1.4.min.js 中看起来是样式,但它在 jquery 中看起来-2.1.4.min.js
谢谢
使用变量时,proxy_pass
指令的行为会发生变化。基本上,如果指定 URI,则需要指定完整的 URI。有关详细信息,请参阅 this document。
- 从您的
$endpoint
变量中删除尾随/
- 使用
rewrite...break
语句转换 URI,或者将您的位置转换为 正则表达式 并使用捕获
例如:
location ~ ^/api/v1/namespaces/mynamespace/services/prometheuslb/proxy(/.*)$ {
resolver 127.0.0.1 valid=30s;
set $endpoint "http://prometheuslb.mynamespace.svc.skydns.local:9090";
proxy_pass $endpoint$is_args$args;
}