我正尝试根据值**$host变量为proxy_pass规则使用不同的方案**。
然而,这似乎并不起作用,这是我们观察到的行为。
如果我们用proxy_pass https://$upstream;
这样的常量模式设置 proxy_pass,一切都很好,但是如果我们尝试用自定义变量替换硬编码的模式值(https),然后使用proxy_pass $myscheme://$upstream;
Nginx似乎忽略了$myscheme,并尝试在不使用模式的情况下解析$upstream,这显然是失败的。
即使我们将变量设置为set $myscheme https;
,也会发生这种情况。
这种行为正常吗?我们做错了什么?有没有办法根据运行时设置的变量值使用不同的方案?
当前(不工作)配置
根据我们的测试,看起来(至少我们运行的版本)Nginx实际上没有替换 proxy_pass 中的变量
worker_processes 4;
worker_rlimit_nofile 100000;
events {
worker_connections 100000;
multi_accept on;
use epoll;
}
http {
log_format timed_combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
server {
listen 443;
server_name myservername;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/xxx;
ssl_certificate_key /etc/letsencrypt/live/xxx;
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types application/json text/json text/plain application/x-javascript text/xml text/css application/xml;
access_log /var/log/nginx/access.log timed_combined;
set $myscheme https;
set $myhost myhostname;
location / {
proxy_pass $myscheme://$myhost;
}
}
}
NGINX版本:一、10.三
1条答案
按热度按时间fnvucqvd1#
这适用于前面提到的Nginx
1.10.3
(和最新的1.23.3):