将参数传递给@proxy 位置?

Pass param to @proxy location?

我想使用 NGINX 设置 nuxt 作为负载平衡器。此外,我想为图像添加一些缓存。

现在我的图片得到了 404:

    location ~ ^/img.+\.(?:ico|gif|jpe?g|webp|png|woff2?|eot|otf|ttf|svg|js|css)$ {
        expires 365d;
        add_header Pragma public;
        add_header Cache-Control "public";

        try_files $uri $uri/ @proxy;
    }
    
    location @proxy {
        expires 365d;
        add_header Content-Security-Policy "default-src 'self' 'unsafe-inline';";
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-Cache-Status $upstream_cache_status;

        proxy_redirect                      off;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_ignore_headers        Cache-Control;
        proxy_http_version          1.1;
        proxy_read_timeout          1m;
        proxy_connect_timeout       1m;
        proxy_pass http://1649681_app/$request_uri;
        #proxy_cache                 nuxt-cache;
        #proxy_cache_bypass          $arg_nocache; # probably better to change this
        #proxy_cache_valid           200 302  60m; # set this to your needs
        #proxy_cache_valid           404      1m;  # set this to your needs
        #proxy_cache_lock            on;
        #proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
        #proxy_cache_key             $uri$is_args$args;
    } 

似乎 $request_uri 在行 proxy_pass http://1649681_app/$request_uri 中是错误的 - 但我怎样才能将请求的路径传递到 @proxy 位置?

不,在命名(以及正则表达式)位置内使用变量为 proxy_pass 指令指定 URI 并非完全错误。然而,这样的事情会有一个缺点 - 如果你不能使用 IP 而不是主机名指定你的上游地址,你将需要一个 resolver defined in your configuration (worse) or an additional upstream block to define your 1649681_app backend (better). More details can be found (完全相同也适用于命名位置)。

话虽如此,如果您不明确指定任何内容,您如何看待将什么请求 URI 传递给 proxy_pass 指令中指定的上游?它将 正好 正在处理的 URI(如果由于某种原因你需要传递修改后的 URI,你需要通过 rewrite 修改它规则)。

对于给定的配置,假设您不需要修改请求 URI 或查询参数,您应该简单地使用

proxy_pass http://1649681_app;

而且,您了解 $uri/ 参数的确切含义吗?它使 try_files 指令检查给定的 URI 是否是在其中搜索索引文件的目录。我真的怀疑您是否需要使用 that 那种正则表达式模式。删除它,它只是一个额外的(某种昂贵的)系统内核 stat 调用。使用

try_files $uri @proxy;

相反。