如何访问nginx中的原始请求(和端口)

时间:2014-09-29 11:52:44

标签: apache web nginx

我有以下网络配置: F5 LB - > 2 NGNIX节点 - >应用服务器

对于服务器到服务器的调用,我们根据源服务器上的scheme,port和uri对请求进行签名,并通过基于相同的参数再次重新签名请求来比较目标上的此签名。 服务器到服务器调用遵循以下路径: 源服务器 - > F5 LB - > NGNIX - >目的地服务器。

源服务器发送的原始请求将发送到不带端口的https,因此无端口签名(或使用默认端口)。 LB为请求添加自定义端口并将其传递给NGNIX。 NGNIX又配置为将请求传递给服务器方案,主机和端口到应用服务器:

proxy_set_header Host $host:$server_port;
proxy_set_header X-Scheme $scheme;

目标服务器收到来自LB的端口,而不是与源服务器发送的原始请求一起发送的端口,最终导致目标服务器上的签名检查失败。 使用Apache测试了相同的情况,使用带代理服务器的ajp,并且传递的请求是保留原始端口,而不是LB添加的端口。

经过彻底阅读后,它出现了一个简单的问题: 如何访问ngnix中的原始请求(和端口)?

以下是相关配置的其余部分:

proxy.conf:

proxy_redirect          off;
client_max_body_size      10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffers           32 4k;
proxy_buffer_size       8k;
proxy_http_version      1.0;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

构造

log_format upstreamlog '[$time_local] $remote_addr $status "$request" $body_bytes_sent - $server_name to: $upstream_addr $upstream_response_time sec "$http_user_agent"';

server {

listen       9080;
listen       9443 ssl;
server_name  myserver.com;

root html;

error_log /data/server_openresty/error.log info;
access_log /ldata/server_openresty/logs/access.log upstreamlog;

gzip on;
gzip_types text/plain text/xml text/css text/javascript application/javascript application/xhtml+xml application/xml;

ssl_certificate         /data/server_openresty/nginx/certs/dev_wildCard.crt;
ssl_certificate_key     /code/server_openresty/nginx/certs/dev_wildCard.key;
ssl_protocols           SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers             HIGH:MEDIUM:!aNULL:!MD5;

### headers passed to the proxies
proxy_set_header Host $host:$server_port;
proxy_set_header X-Scheme $scheme;

location /api/serverA{
    proxy_pass  http://serverA-cluster;
}

location /api/serverB{
    proxy_pass  http://serverB-cluster;
}

}

0 个答案:

没有答案