proxy_protocol_port variable should store the PROXY_PORT rather than CLIENT_PORT
Maxim Dounin
mdounin at mdounin.ru
Mon May 15 13:17:31 UTC 2017
Hello!
On Sat, May 13, 2017 at 09:11:13PM +0200, Janusz M wrote:
> I'd expect to see the original request's port 80 or 443 in this variable
> rather than relatively useless (IMHO) CLIENT_PORT which looks like 51501.
The $proxy_protocol_port, much like $proxy_protocol_addr, reflects
client port for the proxy protocol header. It is to be used
(again, much like $proxy_protocol_addr) to log original client's port,
which is needed to trace a particular client. It also can be used in
X-Real-IP / X-Forwarded-For to pass the port to upstream servers.
Quoting nginx 1.11.0 changes:
*) Feature: the $proxy_protocol_port variable.
*) Feature: the $realip_remote_port variable in the
ngx_http_realip_module.
*) Feature: the ngx_http_realip_module is now able to set the client
port in addition to the address.
Hope this help to understand how it is expected to be used.
> A typical use case for this change would look like the following:
>
> 1. nginx HTTP server is running behind Amazon Load Balancer in TCP mode
> with PROXY PROTOCOL enabled (can be any TCP load balancer with proxy
> protocol on, useful for websockets for example)
> 2. nginx has the proxy_protocol turned on
> 3. we (or other apps, upstream servers) want to know what was the ORIGINAL
> port/protocol of the incoming request (eg. was it 80/HTTP or 443/HTTPS).
>
> Currently it seems that it's impossible to get the request port/protocol
> value from nginx behind tcp load balancer. If nginx stored the PROXY_PORT
> instead of the CLIENT_PORT value in that (or another) variable it would be
> extremely easy for other apps to know the original port/protocol.
>
> >>>
> server {
> listen 80 proxy_protocol;
> ...
> proxy_set_header X-Forwarded-Port $proxy_protocol_port; # 51505 instead
> of 443/80 !!
> }
This is a completely different use case. Moreover, this use case
can be easily avoided by forwarding connections to different
ports within nginx. And so, quoting your own words, "relatively
useless".
> Please let me know if it's feasible or planned, or if we could actually
> read the original incoming request port in a different way
No, there are no plans to change current behaviour.
--
Maxim Dounin
http://nginx.org/
More information about the nginx-devel
mailing list