ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

使用jwilder nginx-proxy,如何将子目录URL代理到特定容器?

2019-07-01 18:57:44  阅读:356  来源: 互联网

标签:nginx docker proxy docker-compose jwilder-nginx-proxy


我使用jwilder/nginx-proxy来制作反向代理.我尝试将http:// localhost:8000 / api重定向到特定的php服务.

目录结构:

.
+-- docker-compose.yml
+-- nginx
+-- nodejs
|   +-- index.js
|   +-- …
+-- php
|   +-- api

泊坞窗,compose.yml:

version: "3.1"

services:

  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    ports:
      - "8000:80"
    volumes:
      - ./php:/srv/www
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nodejs:
    image: node:alpine
    environment: 
      - NODE_ENV=production
      - VIRTUAL_HOST=localhost
      - VIRTUAL_PORT=8080
    expose:
      - "8080"
    working_dir: /home/app
    restart: always
    volumes:
      - ./nodejs:/home/app
    command: ["node", "index.js"]

  php:
    image: php:apache
    environment:
      - VIRTUAL_HOST=localhost
    volumes:
      - ./php:/var/www/html

这适用于nodejs服务.

现在,我想将调用重定向到http:// localhost:8000 / api到php服务.我想我必须添加到nginx conf中:

server {
  location /api {
    proxy_pass http://php:80/api;
    proxy_set_header Host $host;
  }
}

This feature is not built into the lib.
那么,我该如何实现呢?

解决方法:

一种方法是给php应用程序自己的虚拟主机:

  php:
    image: php:apache
    environment:
      - VIRTUAL_HOST=api.localhost
    volumes:
      - ./php:/var/www/html

然后,它将是可访问的:

curl -H 'Host: api.localhost' http://localhost:8000/api

几乎任何语言都可以实现设置标题.或者为了避免设置自定义标头,您可以将该DNS添加到/ etc / hosts文件中:

127.0.0.1 api.localhost

所以你可以这样卷曲:

curl -H http://api.localhost:8000/api

这是设置自定义标头的方式,例如在节点中:

var request = require('request')

var formData = {}

request({
    headers: {
      'Host': 'api.localhost'
    },
    uri: 'http://localhost:8080',
    method: 'POST'
  }, function (err, res, body) {
      console.log("it works")
      console.log(res)
    }
)

但是,我建议您使用/ etc / hosts方法,它应该在生产环境(DNS服务器)中具有等效方法.所以你不需要触摸节点代码.

标签:nginx,docker,proxy,docker-compose,jwilder-nginx-proxy
来源: https://codeday.me/bug/20190701/1349622.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有