代码之家  ›  专栏  ›  技术社区  ›  KasparTr

Nginx URI路径端口重定向Docker的意外行为

  •  1
  • KasparTr  · 技术社区  · 8 年前

    我在8080端口部署了一个Docker容器。 我将我的nginx服务器配置为指向nginx中的8080端口。像这样配置:

    server {
       ...
       location / {
         proxy_pass http://127.0.0.1:8080;
       }
       ...
    

    这工作正常,对服务器的调用被重定向到docker容器。

    我现在需要将不同的URI路径指向不同的容器。 例如,我需要/service1路径来指向我的原始docker容器。所以我这样做了:

    server {
       ...
       location / {
       }
    
       location /service1 {
         proxy_pass http://127.0.0.1:8080;
       }
    

    我遵循以下指南: https://gist.github.com/soheilhy/8b94347ff8336d971ad0#step-5----add-blog-and-mail

    我重新加载并重新启动了nginx-s,但当我导航到{IP\u ADDRESS}/service1时,出现了一个白标签错误。我不明白这一点。

    它是否与位置/{}成为emtpy有关?

    编辑

    按照建议,我在8090上重新聚合了我的容器,并更换了nginx。将文件配置为:

    server {
       ...
       location / {
          proxy_pass http://127.0.0.1:8080;
       }
    
       location /service1 {
         proxy_pass http://127.0.0.1:8090;
       }
    

    当我HTTP到[IP\U地址]/服务1时,我仍然得到404。

    编辑2

    根据建议,我更改了nginx。conf文件,以避免将“service1”传递给容器,但错误响应表明它仍然接收到它。

    nginx公司。形态:

    location / {
    }
    
    location = /service1 {
        return 302 /service1/;
    }
    
    location /service1/ {
        proxy_pass http://127.0.0.1:8090;
    }
    

    错误:

    {
       "timestamp": "2018-04-07T09:56:44.600+0000",
       "status": 404,
       "error": "Not Found",
       "message": "No message available",
       "path": "/service1/image"
    }
    

    需要明确的是,这个错误是由Docker而不是Ngnix生成的,所以重定向正在工作?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Will Keeling    8 年前

    问题可能是 /service1 路径被传递给您的容器,然后它会以404响应,因为它不知道如何处理它。

    尝试以下应剥离的操作 /服务1 从路径:

    location = /service1 {
        return 302 /service1/;
    }
    
    location /service1/ {
        proxy_pass http://127.0.0.1:8090/;
    }
    

    请注意,后面的斜杠很重要,必须遵守。

    推荐文章