Opened 20 months ago
Last modified 20 months ago
#2477 new enhancement
proxy_redirect is missing feature for HTTP header "Link" — at Version 1
Reported by: | Owned by: | ||
---|---|---|---|
Priority: | critical | Milestone: | |
Component: | nginx-core | Version: | 1.18.x |
Keywords: | Cc: | jochenwezel@… | |
uname -a: | Linux revproxy02 5.15.0-69-generic #76-Ubuntu SMP Fri Mar 17 17:19:29 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux | ||
nginx -V: |
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 3.0.2 15 Mar 2022 TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -ffile-prefix-map=/build/nginx-d8gVax/nginx-1.18.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --add-dynamic-module=/build/nginx-d8gVax/nginx-1.18.0/debian/modules/http-geoip2 --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module |
Description (last modified by )
PLEASE NOTE: please ignore space chars in urls in following ticket (I had to remove all external links to be able to post this ticket, here: "Maximum number of external links per post exceeded")
Used configuration
Given is a reverse proxy configuration like
location / { proxy_pass https :// upstream:port/; proxy_redirect https :// upstream:port/ /; }
As the documentation at https :// nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
explains, proxy_redirect
will change Location headers redirect. This is required and good.
HTTP Response of upstream server
My wordpress 6 system now starts to send HTTP responses like:
HTTP/1.1 200 OK Server: nginx/1.18.0 (Ubuntu) Date: Wed, 29 Mar 2023 15:31:02 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Link: <https :// upstream/index.php/wp-json/>; rel="https://api.w.org/" Link: <https :// upstreamindex.php/wp-json/wp/v2/pages/69>; rel="alternate"; type="application/json" Link: <https :// upstream/>; rel=shortlink Vary: Accept-Encoding Content-Encoding: gzip
HTTP protocol standard
Since I've never seen this type of 'link' header before, this was a real surprise to me. But it seems that it's a feature which exists for many years, now: https :// www.w3.org/wiki/LinkHeader
Problem description
The problem is, that the many Link headers remain unchanged and are delivered (as they are) to the client. Of course, the client machine doesn't know anything about my upstream server and can't access it to load these linked urls.
The result is, that my nginx reverse proxy response to the client contains unchanged Link headers
Link: <https :// upstream/index.php/wp-json/>; rel="https://api.w.org/" Link: <https :// upstreamindex.php/wp-json/wp/v2/pages/69>; rel="alternate"; type="application/json" Link: <https :// upstream/>; rel=shortlink
Feature request
So, proxy_redirect
should (by default) substitute in headers
Location
Link
[array]
Optionally, the substitution of Link headers could be configured with another switch (e.g. proxy_redirect_links
) to on|off|default