nginx重写的URL前缀无效

unguejic  于 2022-11-28  发布在  Nginx
关注(0)|答案(1)|浏览(208)

我使用docker和nginx与varnish一起运行。
因为我运行的是docker,所以我在nginx配置(resolver 127.0.0.11 ipv6=off valid=10s;)的顶部手动设置了解析器,这样,对容器IP的更改将在不需要重新启动nginx的情况下获得。
这是配置中给我带来麻烦的相关部分:

location ~^/([a-zA-Z0-9/]+)$ {
            set $args ''; #clear out the entire query string
            set $card_name $1;
            set $card_name $card_name_lowercase;
            rewrite ^ /cards?card=$card_name break;
            proxy_set_header x-cache-key card-type-$card_name;
            proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header REQUEST_URI $request_uri;
                proxy_http_version 1.1;
                set $backend "http://varnish:80";
                proxy_pass $backend;
                proxy_intercept_errors on;
                proxy_connect_timeout 60s;
                proxy_send_timeout   86400s;
                proxy_read_timeout   86400s;
                proxy_buffer_size 128k;
                proxy_buffers 4 256k;
                proxy_busy_buffers_size 256k;
                error_log /var/log/nginx/error.log;
                access_log /var/log/nginx/access.log;
            error_page 503 /maintenance.html;
        }

当我访问这个的URL时,例如https://example.com/Test,我得到500内部服务器错误。
在nginx错误日志中,我看到以下内容:
2022/04/27 23:59:45 [error] 53#53: *1 invalid URL prefix in "", client: 10.211.55.2, server: example.com, request: "GET /Test HTTP/2.0", host: "example.com"
我不确定是什么导致了这个问题--http://包含在后端中,所以它确实有一个正确的前缀。
如果我只使用proxy_pass http://varnish:80,它可以正常工作,但是后端需要是一个变量,以便强制docker使用解析器。

kjthegm6

kjthegm61#

我也遇到过类似的问题。我不知道为什么,但定义
设置$后端“http://varnish:80”;
位置块外部

相关问题