您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Linux >> 一台server,一个域名,不同端口上运行不同服务,如何使用Nginx来进行根据不同路径转发到不同服务?

一台server,一个域名,不同端口上运行不同服务,如何使用Nginx来进行根据不同路径转发到不同服务?(1/2)

来源:网络整理     时间:2017/9/5 0:37:54     关键词:

关于网友提出的“ 一台server,一个域名,不同端口上运行不同服务,如何使用Nginx来进行根据不同路径转发到不同服务?”问题疑问,本网通过在网上对“ 一台server,一个域名,不同端口上运行不同服务,如何使用Nginx来进行根据不同路径转发到不同服务?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 一台server,一个域名,不同端口上运行不同服务,如何使用Nginx来进行根据不同路径转发到不同服务?
描述:

1,目前我的server在80端口上跑了一个shipyard,在19999端口上跑了一个netdata,在8000端口上跑了一个lets chat,现在我希望能够统一这三个服务的入口,只要一个域名就能狗使用这三个功能。
2,目前使用location根据不同路径来匹配,但是每次匹配之后都只会单纯做一个请求的转发,所以当请求到达相应的服务时,携带了请求的原始路径,也无法正常访问。
3,我尝试了使用rewrite规则,例如:

将/netdata/这个路径的请求全部定位到19999端口,我的配置如下:

        location ^~ /netdata/ {
#               proxy_cache js_cache;
                proxy_set_header Host spdocker.rd.tp-link.net;
                rewrite /netdata/(.+)$ /$1 break;
                proxy_pass http://localhost:19999;
        }

无论是在nginx.conf还是sites-enabled的default中,当我访问域名+/netdata的时候都会出现file not exist的问题,看了下请求的路径也把/netdata加上去了。

请问如何解决这个问题!


解决方案1:

如果你的后端服务不支持指定路径的话,不建议这么做。即使能够 rewrite 掉一部分,再拿 body filter 改写正文里的部分,还是可能漏掉一些,或者把 js 搞坏什么的。

还是用不同的域名吧。或者去改后端服务的代码让它支持指定 prefix path。

解决方案2:

一般用vhost配合子域名实现吧。 比如访问shipyard.xxxxx.com 到 127.0.0.1:8080

upstream shipyard {
  server 127.0.0.1:8080;
}

server{
  server_tokens off;
  listen 80;
  server_name shipyard.xxxxx.com;
  access_log /var/log/nginx/rd.shipyard.log;

  gzip on;
  gzip_types *;
  gzip_proxied any;

  location /{
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass       http://shipyard;
  }
}

要是只能用一个域名你试试改下location的匹配规则

解决方案3:

可以考虑做二级域名,server_name来控制

解决方案4:

我之前想了很久很久,还是没有方法。/(ㄒoㄒ)/~~

解决方案5:

楼上的好麻烦
说个我的方案
目标方案:

相关图片

相关文章