NGINX 反向代理改变变量

NGINX 反向代理改变变量

我们正在尝试使用 NGINX 作为反向代理来过滤 URL 请求。基本上,如果您没有输入正确的 URL,您将无法访问。

这是我的服务器站点配置:

server {

    listen 192.168.1.63:443;

    ssl on;
    ssl_certificate /etc/nginx/ssl/ssl.crt;
    ssl_certificate_key /etc/nginx/ssl/ssl.key;

    server_name domain.test.com;

    set $upstream 192.168.1.10;

    location ~* /(domain1|domain2|domain3|domain4|%7FVIC) {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
           proxy_pass http://$upstream;
       }
}

一切正常,除了%7FVIC。我们试图保护的应用程序,客户端需要访问站点根目录下的变量/某些内容。因此 URL 为:https://domain.test.com/%7FVIC01663918

当我查看日志时,似乎 NGINX 正在拦截变量并重写它。以下是错误日志中的片段:

2018/06/18 14:57:30 [error] 11647#11647: *16 open() "/usr/share/nginx/htmlVIC01663918" failed (2: No such file or directory), client: xx.xx.xx.xx, server: test.domain.com, request: "POST /%7FVIC01663918 HTTP/1.1", host: "test.domain.com", referrer: "https://test/domain.com/domain1/"

看起来它正在%7FVIC改变/htmlVIC01663918

那么我们如何让 NGINX 绕过这个变量或者忽略它并停止改变它呢?

答案1

%7F是 7Fh 字符代码的 URL 编码表示。nginx将在处理请求之前对其进行解码。您可以在正则表达式location语句中插入 7Fh 字符,但必须使用正则表达式语法而不是 URL 语法(例如\x7F)。

例如:

location ~* /(domain1|domain2|domain3|domain4|\x7FVIC) { ... } 

相关内容