NGINX 重写被忽略/无法使用 proxy_pass

NGINX Rewrite ignored / not working with proxy_pass

上游供应商应用程序中的错误。在我们的节点应用程序中编写了一条路由来代理请求并避免错误,但无法使 NGINX 重写正常工作。我已经尝试了许多重写的变体,现在我已经束手无策了。在重写上花费的时间比实际代码多... =(

IN: /Txtranscription/transcription/TranscriptionHandler.ashx?q=c3R1ZHlfaWQ...
OUT: /Txtranscription/transcription/TranscriptionHandler.ashx?q=c3R1ZHlfaWQ...
EXPECTED: /transcription?encoded=c3R1ZHlfaWQ... 

### override handling of /Txtranscription/transcription/TranscriptionHandler.ashx
location /Txtranscription/transcription/TranscriptionHandler.ashx {
    add_header Access-Control-Allow-Origin $cors_header;
    access_log  logs/vapi.proxy.log lfupstream;
    error_log  logs/vapi.error.log error;
    rewrite ^/Txtranscription/transcription/TranscriptionHandler\.ashx\?q=(.*)$ /transcription?encoded= break;
    proxy_pass http://vapi;
}

你根本不需要重写请求,你可以将路径附加到 proxy_pass 指令,Nginx 将用 URI 替换原始请求 URI 中位置块的匹配部分你的 proxy_pass 指令。

所以这应该有效:

location /Txtranscription/transcription/TranscriptionHandler.ashx {
    set $args encoded=$arg_q;
    ....
    proxy_pass http://vapi/transcription$is_args$args;

示例:

 location ~ ^/connector(/?)(.*)$ {
    proxy_buffer_size 64k;
    proxy_buffers 16 32k;
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Connection "Keep-Alive";
    proxy_set_header Proxy-Connection "Keep-Alive";
    proxy_set_header Authorization "";
    set $upstream_endpoint http://YOUR-END-POINT/$is_args$args; 
    proxy_pass $upstream_endpoint;
  }

神奇之处在于 -> 位置 ~ ^ /admin (/?)(.*)$

然后 -> /$2$is_args$args;