我有一个在端口8080上运行的java spring应用程序,此应用程序应返回标头'x-auth-token',此应用程序在nginx反向代理后面运行。
应用程序正确生成标题,当我直接请求它时(绕过nginx):
http://169.54.76.123:8080
它以响应标头集中的标头响应
但是当我通过nginx反向代理发出请求时,标题不会出现
https://169.54.76.123
nginx处理ssl终止。
我的nginx配置文件
upstream loadbalancer {
server 169.54.76.123:8080 ;
}
server {
listen 169.54.76.123:80;
server_name api.ecom.com;
return 301 https://api.ecom.com$request_uri;
}
server {
listen 169.54.76.123:443 ssl;
keepalive_timeout 70;
server_name api.ecom.com;
ssl_certificate /etc/ssl/api_chained.cert ;
ssl_certificate_key /etc/ssl/api.key ;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3 SSLv2;
ssl_ciphers ALL:!ADH:RC4+RSA:HIGH:!aNULL:!MD5;
charset utf-8;
location / {
proxy_pass http://loadbalancer/$request_uri ;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
问题是:为什么nGinx不会将'x-auth-token'传递给响应?
如何将其纳入回复?
我试图在变量中获取值,但似乎nGinx没有它:
我使用$sent_http_x_auth_token
和$upstream_htto_x_auth_token
,但这些变量不包含任何值(我认为)
我尝试使用这些变量自己添加标题:
add_header x-auth-token $sent_http_x_auth_token;
没有成功
也尝试过:
add_header x-auth-token $upstream_http_x_auth_token;
也没有成功。
另外,我试过了:
proxy_pass_header x-auth-token;
没有成功
有什么问题?我该怎么调试呢? 哪个部分阻止或阻止'x-auth-header'?上游或代理还是什么?
感谢您的帮助
答案 0 :(得分:0)
通常你应该做任何事情,因为nginx不会从响应中删除自定义标题。
您可以使用log_format
指令来跟踪请求的执行情况,例如
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent '
'X-Auth-Token: "$sent_http_x_auth_token"';
access_log logs/access.log main;
在你的位置背景中。
检查时,您是否收到200响应代码,确认请求成功?
答案 1 :(得分:0)
sent_
前缀不应存在。
记录客户标头的正确方法是在其前面加上http_前缀,然后将客户标头全部小写,并将破折号(-)转换为下划线(_)。例如,“ Custom-Header”将为http_custom_header
所以正确的记录方式是:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_x_auth_token"';
access_log logs/access.log main;
还请注意,如果标题中包含下划线,则需要通过在nginx配置中添加以下内容来明确允许它:
underscores_in_headers on
如果要测试自定义标头,则可以使用curl:
curl -v -H "Custom-Header: any value that you want" http://www.yourdomain.com/path/to/endpoint
-H将添加标头,-v将显示已发送的请求和响应标头