Tag: 反向代理

Docker上的Nginx反向代理和卸载的资产

我想让我的博客(由Ghost支持)通过Docker提供服务,并可以通过URL cv.totem.io/blog访问。 问题是,URL不能纠正。 对于亲属url: <script src="/ghost/ghost.js?v=b0685c4e1f"></script>而对于绝对: <link rel="canonical" href="http://localhost:2368/"> 这似乎是绝对URL的Docker容器的configuration问题,以及来自Nginx亲属的一个问题。 这是我的Nginxconfiguration: server { listen 443; server_name cv.totem.io; rewrite ^(.*) http://$host$1 permanent; } upstream blog { server 127.0.0.1:7070; keepalive 8; } server { server_name www.cv.totem.io cv.totem.io; location / { root /var/www/totem/curriculum; index index.html index.htm; } location /blog { proxy_pass http://blog/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; […]

如何在开发过程中模仿“反向代理或负载平衡器设置背后的Docker容器”

在Docker容器内部开发和testing应用程序,并最终以相同的方式在生产环境中运行它们,是减lessused to work on my machine but is magically failing in production一个很好的方法, used to work on my machine but is magically failing in production风险方面used to work on my machine but is magically failing in production 。 这也体现在因子no。 我所试图遵循的10个着名的因素宣言中的任何一个对于给定的用例都是有意义的: Keep development, staging, and production as similar as possible. 在我们的生产服务器上,我们有一个反向代理,在端口80上接收传入请求,并根据通过虚拟域访问主机时使用的Host头将它们转发到正确的容器 – 例如对app1.domain.name请求转到app1容器,而对app2.domain.name请求转到app2容器等。我们使用traefik ,但它也可以是jwilder / nginx-proxy或任何其他反向代理或负载平衡器。 没有其他的容器端口公开地暴露给应用程序容器。 我现在的问题是,在开发过程中模拟这个设置的最有效的方法是什么? […]

docker群模式的反向代理

我有一个群集,一个经理和一个工人,我有多个服务这些正在运行这个群集不同的端口。 所以我想要将多个域映射到这些服务。 像nginx虚拟主机一样 例; x.com => xservice:8080 y.com => yservice:8081 z.com => zservice:8082 我听说https://traefik.io/解决了这个问题。 但我不喜欢这个。 这个问题的最佳做法是什么?

如何查看Traefik中失败的代理?

我正在构build一个基于微服务的PHP Web应用程序,目前,进入我的应用程序的路线是在不同的端口上。 这对发展很好,但是一旦启动就不会那么可靠。 我有: SPA前端10001端口 端口10000上的HTTP API 在10002上的Web Socket 我希望这些都在同一个端口上。 我最近发现Traefik看起来非常灵活,能够适应我未来的需求。 我很欣赏我可以使用NginX进行简单的代理,但是我非常喜欢能够告诉代理通过APIredirectstream量的想法(将在未来有用)。 但是,我已经build立了一个Traefikconfiguration,而且它并不像我想要的那样代理。 我正在努力让它产生日志来说出什么是错误的,我正在寻找一个“快速取胜”来鼓励我继续坚持下去。 我已经configuration了一个主机到容器卷,所以它可以探索Docker,使用-v /var/run/docker.sock:/var/run/docker.sock )。 我不明白为什么需要知道我的容器,因为我打算在我的traefik.toml设置所有的configuration。 所以,当我(模糊地)理解它时,我需要设置入口点(stream量进入),前端(如何路由的决定)和后端(服务器做什么)。 我最初的尝试是这样的: # Entrypoints definition # # It looks like we have one entry point, and use # frontends to filter WS/HTTP [entryPoints] [entryPoints.everything] address = ":10005" # Frontends definition [frontends] [frontends.http] backend = "backend-spa" [frontends.http-api] backend […]

docker和jwilder / nginx-proxy http / https问题

我通过boot2docker在osx上使用boot2docker 。 我有2台主机: site1.loc.test.com和site2.loc.test.com指向了site1.loc.test.com主机的ip地址。 两者都应该可以通过80和443端口。 所以我使用jwilder/nginx-proxy进行反向代理。 但实际上,当我通过docker-compose运行所有的端口时,每次尝试通过80端口打开时,我都会redirect到443 (301 Moved Permanently) 。 可能是我错过了jwilder/nginx-proxyconfiguration中的东西? 泊坞窗,compose.yml proxy: image: jwilder/nginx-proxy volumes: – /var/run/docker.sock:/tmp/docker.sock:ro – certs:/etc/nginx/certs ports: – "80:80" – "443:443" site1: image: httpd:2.4 volumes: – site1:/usr/local/apache2/htdocs environment: VIRTUAL_HOST: site1.loc.test.com expose: – "80" site2: image: httpd:2.4 volumes: – site2:/usr/local/apache2/htdocs environment: VIRTUAL_HOST: site2.loc.test.com expose: – "80"

traefik反向代理与docker后端 – 在traefik的configuration文件configuration前端规则,而不是通过容器标签

为了使用traefik作为Docker容器前的反向代理,其dynamicIP地址可能会随时间而改变,traefik附带一个docker 后端 。 我可以find的所有设置都遵循相同的模式: 首先,在没有额外的configuration文件的情况下启动docker模式下的traefik,激活主机networking模式(可选,这样traefik可以看到主机上的所有Dockernetworking,如果需要的话),并安装Docker unix套接字,以便traefik可以听到容器启动和停止。 docker run –rm -p 80:80 –net=host –name traefik-reverse-proxy -v /dev/null/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik –docker –loglevel debug 然后,启动另一个容器并至less设置以下标签 : traefik.backend:“一些后端名称” traefik.frontend.rule:“主机:本地主机;方法:GET”(或任何你的规则是) traefik.port:80(或者你的容器在内部暴露的任何端口) 例: docker run –rm –name nginx -l traefik.backend="some-backend-name" -l traefik.frontend.rule="Host: localhost; Method: GET" -l traefik.port="80 nginx 然后,做一个curl localhost ,可以在traefik容器的日志中看到它接受了请求,并将其发送到NGINX容器。 到目前为止,这么好…但是,我不喜欢这个事实,我必须在应用程序本身(我的docker-组成文件设置容器,标签等通常位于)。 相反,我想将其与应用程序分开,并将其configuration为traefikconfiguration的一部分。 这是可能的吗? 我试过的是从示例nginx容器中traefik.frontend.rule标签,而是为traefik装入以下configuration文件: [frontends] [frontends.frontend1] backend = "some-backend-name" […]

docker集装箱之间redirect的最佳做法

鉴于我有多个在Docker容器中运行的Web应用程序,我希望能够让用户在服务中redirect到另一个服务。 我不知道如何实现这一点 – 特别是如果我想我的应用程序可以从一个docker主机移植到不同的主机。 假设我们有一个将用户redirect到ServiceB的ServiceA。 所以我们有一个关系 ServiceA –> ServiceB 一种方法是静态分配端口和主机名,并将它们设置为我的Web服务的环境variables – 这是我不喜欢的,因为我不想关心在哪个端口上运行哪个服务。 第二种方法是使用像nginx这样的代理并链接服务并使用代理主机和端口。 但是这需要在将服务移动到不同的主机时更改代理configuration。 想到的第三种方法是使用etcd和大使来注册和解决服务。 所以ServiceA将会使用一个ServiceB-Ambassador来查找etcd中的ServiceB。 这导致许多docker集装箱只是为了连接服务。 你更喜欢哪种方式? 还是有不同的方法? 编辑 真正的问题是将ServiceB的uri注入到ServiceA中,所以我可以使用像-DserviceB.uri=<serviceUri>这样的参数启动我的ServiceA,以便serviceA可以构build正确的redirect头。

Docker-compose traefik PathPrefixStrip不能正常工作

我有个问题让我生气,请帮助我。 我想从一个免费的无ip子域访问我的所有应用程序,所以我认为traefik可以为我做这个,我想访问所有我的应用程序,如: mysubdomain.no-ip.com/emby mysubdomain.no-ip.com/pydio mysubdomain.no-ip.com/adminer… 这是我的docker组成: version: "2" services: db: image: linuxserver/mariadb restart: always environment: MYSQL_ROOT_PASSWORD: "test" labels: – "traefik.enable=false" volumes: – ./config/mariadb:/etc/mysql/ ports: – '3306:3306' adminer: image: adminer restart: always labels: – "traefik.enable=true" – "traefik.backend=adminer" – "traefik.frontend.rule=PathPrefixStrip:/dbadmin" – "traefik.backend.port=8080" volumes: – ./config/adminer:/config emby: image: emby/embyserver:latest restart: always labels: – "traefik.enable=true" – "traefik.backend=emby" – "traefik.frontend.rule=PathPrefixStrip:/media" […]

Docker路由/反向代理问题,不能curl其他容器

我有一个单一的docker主机在单个容器内运行2个Web应用程序。 我有一个nginx容器设置在他们作为一个反向代理作为他们的前面。 有两个DNS条目指向这个单一的主机不同的子域名,所以我可以达到应用程序1与app1.domain.com和app2与app2.domain.com。 这个设置工作正常,每个应用程序都可以访问更广泛的宇宙。 但是,app2也需要能够对由app1提供的web服务进行http调用。 出于某种原因,http : //app1.domain.com的http调用不能从app2容器中parsing。 curl http://app1.domain.com返回Failed to connect to app1.domain.com port 80: No route to host. 奇怪的是,我可以从app2的容器中ping通app1.domain.com,并成功parsing为主机的url。 我已经尝试在docker主机上禁用iptables与service iptables stop ,并导致curl和ping命令只是简单地挂一段时间,最后返回一个关于未知主机的ping错误,无法parsing主机的curl。 最后,我可以使用docker的ip地址和端口从app2的容器curl到app1,尽pipe这不是一个理想的解决scheme,因为它需要改变这个app的部署和configuration方式,以便可以发现这个ip地址和端口。 更新: iptables -n -L -v -x输出 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp — eth1 […]