Nginx反向代理..带有标题键和值或url路径的动态主机名

时间:2017-06-13 04:47:02

标签: nginx networking dynamic proxy routes

我有一些nginx问题。希望你能帮我解决这个问题。

有几个服务器

  1. 用户PC互联网联网;
  2. Nginx代理,主机名为“nginxproxy”,位于内部网络中,它只有服务器,其公共IP为“1.1.1.1”但是jumphost,8090是监听。
  3. server1 hostnamed“tomcat1”位于内部网络中(仅具有专用IP“70.1.1.1”)
  4. server2 hostnamed“tomcat2”位于内部网络(只有私有IP“70.1.1.2”)
  5. 和5,6,...还有更多的服务器主机名为apache1,apache2,redis1等......

    现在我的客户端希望直接向位于内部网络的服务器发送http请求调用。但这是不可能的(因为没有Public ips ..)所以调用必须首先传入nginx代理。

    我只是徘徊,当我从用户pc调用请求时,目标服务器主机名放在请求的标头或URL上,nginx可以解析它并组合到内部网络中的目的地吗?

    例如我这样称呼,

         http://nginxproxy:1888/[destination hostname]/[path, files like index.html, some keys and values.&k1=v1. etc....]
    

    我希望nginx传递并转换它并像这样调用目标主机

         http://[destination hostname]:8888/[path, files like index.html, some keys and values.&k1=v1. etc....]
    
    我尝试这样做。有一些错误..

    打印错误日志 “localhost无法解析(10060:操作超时),客户端:127.0.0.1,服务器:localhost,请求:”GET / localhost / 8080 / index“

    server {
        listen       1888;
        server_name  localhost;
    
        location  ~^\/([a-zA-Z0-9]+)\/([0-9]+)\/([a-zA-Z0-9]+) {
        proxy_pass http://$1:$2/$3;
        }
    
    
    
    }
    

    还有一个..

    在java代码中, 我这样设置

        import org.apache.http.HttpMessage;
    
        HttpMessage request;
        request.addHeader("destinationHost", "tomcat2");
        request.addHeader("destinationPort", "8888");
    

    并调用此网址

         http://nginxproxy:1888/[path, files like index.html, some keys and values.&k1=v1. etc....]
    

    可以将网址转换为

        http://tomcat2:8888/[path, files like index.html, some keys and values.&k1=v1. etc....]
    

    并传递到那里?

    如果是这样,我该如何设置nginx.conf

    非常感谢你,祝你有个美好的一天..

0 个答案:

没有答案