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;
上游供应商应用程序中的错误。在我们的节点应用程序中编写了一条路由来代理请求并避免错误,但无法使 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;