Nginx 通过 header 中的标识进行分发

提示:nginx根据头信息转发到不同的服务


前言

如果服务器只能暴露一个端口,但是有两个或多个http网页需要代理怎么办呢?

通过在本地部署一台nginx设置头信息,然后代理到目标服务器的nginx,目标服务器根据头信息的不同,代理到不同的服务,就可以实现,暴露一个端口的情况下,代理到多个服务。

tcp协议的不支持这样设置。我之前研究了很久,没找到方法。

nginx参考文档icon-default.png?t=N7T8https://nginx.org/en/docs/


一、调用流程

二、配置说明

1.本地nginx配置

在本地nginx中设置头信息。

    server {    server {
        listen       1999;
        server_name  127.0.0.1;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            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 server_source_name 'server1';
            proxy_pass http://198.168.31.45:1699;
        }

    }     

    server {
        listen       2999;
        server_name  127.0.0.1;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            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 server_source_name 'server2';
            proxy_pass http://198.168.31.45:1699;
        }

    } 

2.测试或生产nginx配置

根据不同nginx头信息代理到不同的服务

     #------根据代理头转发-------start--
      server {
        listen       1699;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #需要这个配置说明
        underscores_in_headers on; 
        location / {  
 
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
             if ($http_server_source_name = "server1"){
                proxy_pass http://server1:8000;
                break;
            }
            if ($http_server_source_name = "server2"){
                proxy_pass http://server2:8001;
                break;
            } 
            
            #头信息都不符合时调用的默认地址
            proxy_pass http://server:8002;
        }              
       
    }
    #------根据代理头转发-------end--

总结

通过配置本地的nginx和测试或生产的nginx就可以将多个网页通过一个端口暴露出来,可以来应对公司中端口不好申请的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驿外无主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值