wusheng678612 2018-09-20 04:25 采纳率: 100%
浏览 3639
已采纳

关于 nginx proxy_set_header 的问题

先上配置文件。

 worker_processes  2; 
events { 
    worker_connections  1024; 
} 

http { 
    include       mime.types; 
    default_type  application/octet-stream; 
    sendfile        on; 
    keepalive_timeout  65; 

    upstream ab{ 
            server 10.32.4.202:7010;
            server 10.32.4.202:7011;
    } 

    server {    #Nginx代理服务器 
            listen       80; 
            server_name  10.0.0.102; 

        location / { 
                proxy_set_header Host 10.32.4.202:7010;
                    proxy_pass  http://ab;
                } 

        error_page   500 502 503 504  /50x.html; 
        location = /50x.html { 
            root   html; 
        } 

    }
} 

用户访问10.0.0.102,代理到10.32.4.202:7010或10.32.4.202:7011端口.(负载均衡)
10.32.4.202:7010对应10.0.0.100:8080端口
10.32.4.202:7011对应10.0.0.100:8081端口
10.0.0.100:8080和10.0.0.100:8081,是用户真正要访问的应用服务器.

为啥要经过一层10.32.4.202呢,因为公司有加密策略,所有上传的文件都要解密,所有下载的文件都要加密.请求必须要从这里过一下.

经过n次尝试,以上配置,可以访问的通了.
但是,proxy_set_header设置为7010端口,所有的请求都到了10.0.0.100:8080这台应用,就无法起到负载均衡的作用.

问题来了,要实现如下功能,应如何配置呢.
1,用户必须统一入口(10.0.0.0.102).
2,请求必须经过10.32.4.202(要加解密);
3,还能使用负载均衡功能.

感激不尽!

  • 写回答

5条回答 默认 最新

  • oyljerry 2018-09-20 10:36
    关注

    类似你上面的方法,自己内部再转发一次

     server {
      listen      8001 default_server;
      server_name web1.example.com;
      location / {
        proxy_pass       http://web1.local:80;
        proxy_set_header Host web1.local:80;
      }
    }
    
    server {
      listen      8002 default_server;
      server_name web2.example.com;
      location / {
        proxy_pass       http://web2.local:80;
        proxy_set_header Host web2.local:80;
      }
    }
    
    server {
      listen      8003 default_server;
      server_name web3.example.com;
      location / {
        proxy_pass       http://web3.local:80;
        proxy_set_header Host web3.local:80;
      }
    }
    
    upstream main {
      server 127.0.0.1:8001;
      server 127.0.0.1:8002;
      server 127.0.0.1:8003;
    }
    
    server {
      listen      80;
      server_name example.com;
      location / {
        proxy_pass http://main;
      }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))