我使用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:
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服务器)中具有等效方法.所以你不需要触摸节点代码.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。