【问题标题】:Exception Value: Invalid HTTP_HOST header: 'products_web:8001'. The domain name provided is not valid according to RFC 1034/1035异常值:无效的 HTTP_HOST 标头:'products_web:8001'。根据 RFC 1034/1035,提供的域名无效
【发布时间】:2020-04-27 08:14:07
【问题描述】:

使用 docker 我创建了 3 个 django 项目:- 产品、订单、电子邮件。

支持技术:- nginx 和 postgres。

这里每个项目都作为微服务工作,每个服务作为单独的单元工作。

我必须从 orders service 获取 product details,为此我使用了 requests 管道

orders/src/views.py

response = requests.get("http://products_web:8001/products/fetch/?prod_id=%s" % product).json()

当我执行时,以 html 格式获取响应,将错误定义为 异常值:无效的 HTTP_HOST 标头:'products_web:8001'。根据 RFC 1034/1035,提供的域名无效。

以下是 docker-compose.yaml

version: '2'


services:



  products_web:
    build: ./products
    command: bash -c "python3 ./products/manage.py makemigrations && python3 ./products/manage.py migrate && python3 ./products/manage.py runserver 0.0.0.0:8001"
    volumes:
      - .:/code
    ports:
      - "8001:8001"
    restart: always
    depends_on:
      - datab
    links:
      - datab

  emails_web:
    build: ./emails
    command: bash -c "python3 ./emails/manage.py makemigrations && python3 ./emails/manage.py migrate && python3 ./emails/manage.py runserver 0.0.0.0:8002"
    volumes:
      - .:/code
    ports:
      - "8002:8002"
    restart: always
    depends_on:
      - datab
    links:
      - datab

  orders_web:
    build: ./orders
    command: bash -c "python3 ./orders/manage.py makemigrations && python3 ./orders/manage.py migrate && python3 ./orders/manage.py runserver 0.0.0.0:8003"
    volumes:
      - .:/code
    ports:
      - "8003:8003"
    restart: always
    depends_on:
       - datab
    links:
      - datab
    stdin_open: true
    tty: true 

  datab:
    image: postgres
    environment:
        - POSTGRES_DB=postgres
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres

  nginx:
    image: nginx:latest
    build: ./web
    ports:
      - "8084:80"
    links:
      - products_web
      - orders_web
      - emails_web
    depends_on:
      - products_web
      - orders_web
      - emails_web

下面是 nginx.conf

server {

    listen 8000;
    server_name 0.0.0.0;
    charset utf-8;

    location /api/v1/products {
      rewrite /api/v1/products(.*) /products$1 break;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_pass http://products_web:8001;
   }


   location /api/v1/emails {
      rewrite /api/v1/emails(.*) /emails$1 break;
      proxy_pass http://emails_web:8002;
      proxy_redirect off;
      proxy_set_header Host $host;
   }


   location /api/v1/orders {
      rewrite /api/v1/orders(.*) /orders$1 break;
      proxy_pass http://orders_web:8003;
      proxy_redirect off;
      proxy_set_header Host $host;
   }

}

【问题讨论】:

    标签: django docker nginx


    【解决方案1】:

    警告是告诉您下划线 (_) 在主机名中无效。您在 DNS 中看到下划线的最常见位置是在服务器记录中,例如:_protocol._tcp.example.com,但它们不允许出现在主机名中。您将需要重命名products_web 服务。或许将下划线 (_) 替换为破折号 (-),例如 products-web 等。

    干杯!

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 2018-07-05
      • 2013-02-20
      • 2019-09-29
      相关资源
      最近更新 更多