如何在Nginx中将主机设置为$upstream\u addr
我在Nginx.conf上有以下配置如何在Nginx中将主机设置为$upstream\u addr,nginx,nginx-location,nginx-reverse-proxy,Nginx,Nginx Location,Nginx Reverse Proxy,我在Nginx.conf上有以下配置 <b> http { log_format my_upstream '$remote_addr [$time_local] "$request" $status' '"$upstream_addr" $upstream_response_time $upstream_http_etag $host $http_host'; access_log /var/log/nginx/upstream.log my_upst
<b>
http {
log_format my_upstream '$remote_addr [$time_local] "$request" $status'
'"$upstream_addr" $upstream_response_time $upstream_http_etag $host $http_host';
access_log /var/log/nginx/upstream.log my_upstream;
upstream myapp{
ip_hash;
server x.x.x.174:8001;
server x.x.x.96:8001;
}
server {
listen 9000;
#websocket
location /jms {
proxy_pass http://myapp/jms;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $upstream_addr;
}
location / {
proxy_pass http://myapp;
}
}
}
</b>
http{
日志\格式我的\上游'$remote\ u addr[$time\ u local]“$request”$status'
“$upstream_addr”$upstream_response_time$upstream_http_etag$host$http_host”;
访问\u log/var/log/nginx/upstream.log my\u upstream;
上游myapp{
ip_散列;
服务器x.x.x.174:8001;
服务器x.x.x.96:8001;
}
服务器{
听9000;
#网袋
位置/jms{
代理通行证http://myapp/jms;
proxy_http_版本1.1;
代理设置头升级$http\U升级;
代理设置头连接“升级”;
代理\u集\u头主机$upstream\u addr;
}
地点/{
代理通行证http://myapp;
}
}
}
我尝试将主机设置为$upstream_addr,但不幸的是,我在请求中接收到null。
谁能帮我把主机设置为$upstream_addr。
谢谢
Bhaskar.正如Larry提到的,在选择上游之前,请求头(和主体)是固定的。因此,$upstream\u addr将始终返回null 您可以做的是添加两个级别的代理。但是如果你有很多myapp的上游,这可能会变得混乱
upstream myapp{
ip_hash;
server x.x.x.174:8001;
server x.x.x.96:8001;
}
upstream main {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 8001 ;
location / {
proxy_pass http://x.x.x.174:8001/jms;
proxy_set_header Host x.x.x.174:8001;
}
}
server {
listen 8002 ;
location / {
proxy_pass http://x.x.x.96:8001/jms;
proxy_set_header Host x.x.x.96:8001;
}
}
server {
listen 9000;
#websocket
location /jms {
proxy_pass http://main;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location / {
proxy_pass http://myapp;
}
}
proxy\u set\u header
在proxy\u pass
之前执行,即使您将其放在proxy\u pass
之后,在进入负载平衡之前,$upstream\u addr为空感谢Larry和Aakash让我了解并提供了一个解决方案,还有什么比打开多个端口更好的方法吗。