我们正在将kubernetes/ingress-nginx
用于我们的Azure AKS实例。我有一个大约9kb长的URI(对于运行在.Net core 2.2中的Identity Server,它包含一个post_logout_redirect_uri
和一个非常长的id_token_hint
)。
但是,由于nginx拒绝了414 URI Too Long
的查询,因此我无法越过入口。我可以在Nginx日志中看到该请求,但不能在Identity Server日志中看到该请求,因此该请求以前显然已经退回。
我尝试使用配置映射更新nginx配置,但未成功。这些设置已应用(之前已经帮助我解决了其他问题)。但是,在这种情况下,我尝试执行的操作似乎没有任何效果。这是我正在使用的配置图:
apiVersion: v1
data:
http2-max-header-size: "64k"
http2-max-field-size: "32k"
proxy-body-size: "100m"
client-header-buffer-size: "64k"
large-client-header-buffers: "4 64k"
kind: ConfigMap
metadata:
name: nginx-ingress-controller
namespace: kube-system
以下是身份服务器的入口注释:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress-name
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt
nginx.ingress.kubernetes.io/send_timeout: "180"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "180"
nginx.ingress.kubernetes.io/proxy-read-timeout: "180"
nginx.ingress.kubernetes.io/proxy-send-timeout: "180"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-headers: "authorization,content-type"
nginx.ingress.kubernetes.io/proxy-body-size: 250m
nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
最后,如果我检查Pod上的Nginx配置,它的确包含我的更新值,位于全局配置部分。
...
keepalive_timeout 75s;
keepalive_requests 100;
client_body_temp_path /tmp/client-body;
fastcgi_temp_path /tmp/fastcgi-temp;
proxy_temp_path /tmp/proxy-temp;
ajp_temp_path /tmp/ajp-temp;
client_header_buffer_size 64k;
client_header_timeout 60s;
large_client_header_buffers 4 64k;
client_body_buffer_size 8k;
client_body_timeout 60s;
http2_max_field_size 32k;
http2_max_header_size 64k;
http2_max_requests 1000;
types_hash_max_size 2048;
server_names_hash_max_size 1024;
server_names_hash_bucket_size 64;
map_hash_bucket_size 64;
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 64;
variables_hash_bucket_size 128;
variables_hash_max_size 2048;
underscores_in_headers off;
ignore_invalid_headers on;
...
任何信息或建议将不胜感激,谢谢!
答案 0 :(得分:-1)
要解决此问题,请编辑您的nginx.conf。打开终端或使用ssh客户端登录到远程服务器。键入以下命令,使用诸如vi或joe或nano的文本编辑器编辑nginx.conf:
# vi /etc/nginx/nginx.conf
使用纳米文本编辑器:
$ sudo nano /etc/nginx/nginx.conf
必须以root身份运行:
# vi /usr/local/nginx/conf/nginx.conf
将以下行添加到http或服务器或位置上下文中,以增加nginx.conf中的大小限制,输入:
# set client body size to 2M #
client_max_body_size 2M;
client_max_body_size指令指定客户端请求的最大接受主体大小,由请求标头中的Content-Length行指示。如果大小大于给定的大小,则客户端将收到错误“请求实体太大”(413)。 保存并关闭文件。重新加载Nginx Web服务器,输入:
# /usr/local/nginx/sbin/nginx -s reload
使用nginx本身重新加载它:
# /sbin/nginx -s reload
对于RHEL / CentOS / Debian / Ubuntu Linux,请尝试:
# service nginx reload
如果您使用的是基于systemd的系统,请运行:
$ sudo systemctl reload nginx.service
参考文献: