请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多个服务使用一个端口

有elasticsearch和django分别完成的两个服务,一个开在本机9200一个开在本机8001,但对公网只有80一个端口接受http请求。在公网用客户端时访问都是通过同一个域名服务转发到本机80端口的,servername相同,应该如何配置nginx判断在80端口监听到的请求哪一个转发到localhost:8001哪一个转发到localhost:9200呢?

正在回答 回答被采纳积分+3

1回答

Jeson 2017-08-11 20:23:17

后端两个服务(9200、8001)对外需要共用一个域名和端口,这个时候就常见的、也是简单的实现方式就是基于不同的location 对访问路径作匹配,然后跳转到不同的后端服务。

    location /elasticsearch {

        proxy_pass http://127.0.0.1:9200/;

         include proxy_params;

    }


    location /django {

        proxy_pass http://127.0.0.1:8001/;

         include proxy_params;

    }

供参考

0 回复 有任何疑惑可以回复我~
  • 提问者 慕妹5495383 #1
    这个location的差异是在哪里体现的呢?nginx在80端口监听到来自外界的两种服务请求都是http数据包,且来自同一domain,没有location信息
    回复 有任何疑惑可以回复我~ 2017-08-11 22:19:10
  • Jeson 回复 提问者 慕妹5495383 #2
    区别在于请求的路径,客户端分别请求http://www.xxx.com/elasticsearch 和 http://www.xxx.com/django,Nginx的服务端中,通过location分别匹配,并通过proxy_pass代理。
    回复 有任何疑惑可以回复我~ 2017-08-11 22:37:01
  • 提问者 慕妹5495383 #3
    相当于公网租用的domain将所有url请求转发到本机(服务器)IP80端口,nginx能不能分析数据包中的信息再转发到具体端口?可以在客户端实现发请求包时header中包含某些meta信息。否则是否一定要另外新买一个域名,两种客户端分别通过两种domian转发,这样就有两个不同的server_name
    回复 有任何疑惑可以回复我~ 2017-08-11 23:42:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信