Articles of 反向代理

通过主机名将ssh连接转发到docker容器

我已经进入了一个非常具体的情况,虽然还有其他方法可以做到这一点,但我还是有点沉迷于此,想find一种方法来做到这一点: 背景 假设我有一台服务器运行多个服务,并将其隐藏在独立的docker集装箱中。 由于大多数这些服务都是http,我正在使用一个nginx代理来向每个服务公开特定的子域名。 例如,节点服务器在端口80绑定到主机上的127.0.0.1:8000的Docker容器上运行。 我将在nginx中创build一个虚拟主机,将所有对myapp.mydomain.com请求代理到http://127.0.0.1:8000 。 这样一来,除了通过myapp.mydomain.com之外,docker容器不能从外部访问。 现在我想以gogs.mydomain.com指向gogs容器的方式启动一个gogs docker容器。 所以我启动这个在端口8000绑定到127.0.0.1:8001 gogs容器 。 和一个nginx网站代理请求gogs.mydomain.com到http://127.0.0.1:8001 ,它运作良好… 然而,gogs是一个git容器,我也想通过[email protected]:org/repo访问repos,但是不能用于当前的设置。 一种方法是将容器的端口22绑定到主机上的端口0.0.0.0:8022 ,然后git ssh url可以是[email protected]:8022/repo 。 (这似乎并没有工作;当我推到这样的uri的起源,git要求gogs.mydomain.com用户git的密码 – 而不是gogs.mydomain.com:8022 – 但这可能是我'这个问题做错了,也不在这个范围之内,不过,我也希望对此有任何诊断) 问题 我主要关心的是,我希望ssh端口<gogs container>:22被代理,就像我使用nginx代理http端口; 即任何SSH连接gogs.mydomain.com传递到容器的端口22 。 现在我不能将容器的ssh端口绑定到主机的ssh端口,因为主机上已经有一个sshd运行了。 此外,这将意味着任何连接到*.mydomain.com传递到容器的sshd。 我想要任何SSH连接: mydomain.com host.mydomain.com或mydomain的IP地址被接受并转发到主机上的sshd gogs.mydomain.com或git.mydomain.com被接受传递到gogs容器上的sshd *.mydomain.com (其中*是上述可能性以外的任何内容)被拒绝 如果是http,我可以通过nginx轻松完成这项工作。 有没有办法做到这一点的SSH? (也想出去,问:有没有一种方法可以完成任何 tcp服务?) 任何对我在这里尝试的方式的洞察也是受欢迎的。 我不介意被告知什么时候我想做的事完全是愚蠢的。 我脑海里已经有了什么: 也许我可以共享主机上的sshd套接字容器作为ro卷? 这将意味着容器内的sshd可以获取到*.mydomain.com所有连接。 有没有办法让容器内的sshd 拒绝除gogs.mydomain.com或git.mydomain.com之外的所有连接? 然而,主机上的sshd会收集所有到*.mydomain.com的连接,包括gogs.mydomain.com ; 所以会有冲突。 我不知道,我实际上没有尝试过。 我应该尝试吗?

带有Apache 2.4的RFC 2616

我使用Apache 2.4.3作为反向代理,因为它的广告符合RFC 2616.我的应用程序使用这样的头来启用代理上的caching: Cache-Control: public, s-maxage=0 Expires: … (+1 day) X-Group: A Vary: X-Group ETag: W/"foo1" 在第一个请求加热caching之后,如果我的应用程序更改为响应此: Cache-Control: public, s-maxage=0 Expires: … (+1 day) X-Group: B Vary: X-Group ETag: W/"foo2" 如果来自Apache的If-None-Match标头匹配源产生的ETag,应用程序将以304 Not Modified进行响应。 然而,Apache然后caching第二个200响应,并用新的响应replace “foo1”logging,而不是用不同的ETagcaching两个响应。 因此,取代If-None-Match: W/"foo1", W/"foo2" ,下一个重新生效请求就是If-None-Match: W/"foo2" 。 所以caching不断地错过,而不是总是得到命中。 从RFC 2616第12.1节: 但是,源服务器并不局限于这些维度,而是可以根据请求的任何方面来改变响应,包括请求头字段之外或本规范未定义的扩展头字段之内的信息。 我已经尝试了Vary的以下组合: Vary: X-Foo Vary: * Vary: User-Agent 我也尝试了强和弱的ETags,无论我不能让Apache同时caching两个响应,它总是比以前节省更多。 如果它不能保存一页以上的方差,那么ETag是无用的,Last-Modified将是一样的好。 从Apache […]

在负载testing中,nginx – connect()失败

我一直在做我的nginx反向代理wrk的一些负载testing – >我的web应用程序设置,我注意到,当我达到1000+并发连接,nginx开始返回502s和以下错误信息: 2015/04/17 20:45:26 [crit] 6068#0: *1116212677 connect() to \ 127.0.0.1:3004 failed (99: Cannot assign requested address) \ while connecting to upstream, client: xxx.xxx.xx.165, server: \ foo.bar.com, request: "GET /my/route HTTP/1.1", upstream: \ "http://127.0.0.1:3004/my/route", host: "foo.bar.com" wrk命令是: wrk -t10 -c500 -d5m "https://foo.bar.com/my/route" -H "Accept: application/json" 我试图弄清楚这里可能出了什么问题。 我的web应用程序正在侦听由端口3004的nginx代理的请求。是否nginx用尽端口? Web应用程序无法处理这么多的请求? 请求是否超时? 我不清楚这一点,并希望有更多的洞察力。

Apache2反向代理似乎间歇性地冻结?

Apache2反向代理似乎间歇性地冻结时,代理一个tomcat的Web应用程序。 问题是,每当我尝试login到代理的这个web应用程序时,每隔一段时间(通常在闲置之后一天或两天)就会冻结。 应用程序只是无限期地冻结,没有500响应代码…浏览器只是等待和等待。 如果我一直试图从我的浏览器提示url,它最终会再次开始工作。 我试图通过直接导航到Tomcat端口8080上的Web应用程序来重现此问题,但是我从来没有能够不经过反向代理重现此问题。 这是我的反向代理configuration…任何错误发现想法? 谢谢 在/ etc / apache2的/网站可用/默认 ProxyPass /manage/ http://localhost:8080/manage/ ProxyPassReverse /manage/ http://localhost:8080/manage/ ProxyPass /manage http://localhost:8080/manage ProxyPassReverse /manage http://localhost:8080/manage /etc/apache2/mods-available/proxy.conf <IfModule mod_proxy.c> #turning ProxyRequests on and allowing proxying from all may allow #spammers to use your proxy to send email. ProxyRequests Off <Proxy *> AddDefaultCharset off Order deny,allow Deny from all […]

Nginx无限redirect循环

为什么http://compassionpit.com/blog/会经历无限的redirect循环? 这是我的nginx conf文件。 该站点由端口8000上的nodejs服务器运行,Apache提供博客(wordpress)和论坛(phpBB)。 该论坛正在解决就好了,在http://www.compassionpit.com/forum/ … server { listen 80; server_name www.compassionpit.org; rewrite ^/(.*) http://www.compassionpit.com/$1 permanent; } server { listen 80; # your server's public IP address server_name www.compassionpit.com; index index.php index.html; location ~ ^/$ { proxy_pass http://127.0.0.1:8000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location @blogphp { internal; root /opt/blog/; include […]

Nginx作为负载均衡器。 频繁上行超时(110:连接超时)连接上行

我正在尝试在Centos 7虚拟机上使用nginx作为负载平衡器来replace老化的Coyote Point硬件设备。 然而,在我们的一个web应用程序中,我们看到日志中频繁且持续的上游超时错误,而客户端正在报告使用该系统时的会话问题。 这里是我们的nginx.conf的相关位 user nginx; worker_processes 4; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } upstream farm { ip_hash; server www1.domain.com:8080; server www2.domain.com:8080 down; server www3.domain.com:8080; server www4.domain.com:8080; } server { listen 192.168.1.87:80; server_name host.domain.com; return 301 https://$server_name$request_uri; } server { listen 192.168.1.87:443 ssl; server_name host.domain.com; ## Compression gzip on; gzip_buffers […]

公开IMAP服务器到Internet:DMZ或端口转发?

我们目前已将所有电子邮件存储在内部networking中的Dovecot IMAP服务器上。 networking上的客户端机器能够连接并访问他们的电子邮件。 现在我们希望允许某些用户使用IMAP从外部连接和查看他们的电子邮件。 我们目前有一个防火墙/路由器与一个专用(未使用的)DMZ端口。 我看到它的方式有两种select: 在路由器上设置端口转发,将端口585或993上的任何IMAP请求转发给服务器; 服务器可以validation用户。 将反向代理IMAP服务器连接到路由器的DMZ; 这反过来可以将IMAP请求转发到内部networking上的服务器(在这种情况下可以selectvalidation用户名)。 有没有人对这两种方法的优点提出任何build议/意见? 我发现很难想象在三脚防火墙的DMZ中增加一个额外的反向代理的好处,因为它无论如何都是有效地进行端口转发的。 …或者我错过了什么?

通过nginx获得分块的请求

首先是一些背景:我们有一个embedded式设备,可以将很多小事件上传到Web服务器。 分块编码用于发布此信息。 每个事件都作为一个单独的块发送,所以web服务器(node.js)可以立即对事件做出反应。 所有这一切都像一个魅力。 禁用服务器并在服务器上运行netcat会显示设备发送的内容: sudo nc -l 8080 POST /embedded_endpoint/ HTTP/1.1 Host: url.com User-Agent: spot/33-dirty Transfer-Encoding: chunked Accept: text/x-events Content-Type: text/x-events Cache-Control: no-cache 120 {"some","json message"} 232 {"other","json event"} 232 {"and a lot more","up to 150 messages per second!"} 0 现在我在我的networking服务器(版本1.6.0)上安装了nginx。 最后,我希望它处理SSL,我想处理加快正常的networkingstream量。 如果我现在启用nginx这个服务器configuration: server { listen 8080; location / { proxy_http_version 1.1; expires off; […]

我需要一个SSH的反向代理解决scheme

嗨,这里是我有一个企业数据中心的一个项目的服务器的情况。 我在端口22上有一台对这台机器的SSH访问权限。有一些虚拟机在这台服务器上运行,然后在其他许多操作系统的工作背后。 现在,由于我在数据中心防火墙后面,所以我的主pipe问我是否可以做一些事情,让我可以让很多人直接访问这些虚拟机。 我知道如果我被允许获得22以外的端口的stream量,那么我可以做一个端口转发。 但是因为我不被允许,所以在这种情况下可以解决什么问题。 想要连接的人可能是完全的白痴。只要在他们的机器上打开putty,甚至可以filezilla,他们可能会很高兴。我已经configuration了一个Apache反向代理,用于将Internetstream量redirect到这些主机上的虚拟机。我不清楚至于SSH我能做些什么。所以在这种情况下,有什么等同于Apache反向代理可以做类似的工作的SSH。 我的手中没有防火墙或22以外的任何其他端口,事实上即使我请求他们不允许打开.2次SSH并不是我主pipe想要的东西。

通过中介服务器进行远程桌面的SSH隧道第二部分

我以前问过如何使用中间服务器来configuration2个SSH隧道,以便通过它们运行远程桌面,并设法使其工作。 现在,我正在尝试使用相同的机器,但以相反的顺序。 这是设置: Windows 7个人电脑在专用networking中,坐在防火墙后面。 公共访问Linux服务器,可以访问PC。 Windows 7笔记本电脑,在家里,我想在PC上做远程桌面。 我在笔记本电脑上使用Putty来创build一个从它到Linux服务器的反向隧道: R60666 localhost:3389 。 我在PC上使用Putty来创build一个从它到Linux服务器的常规隧道: L60666 localhost:60666 。 我SSH到Linux服务器,我运行telnet localhost 60666,它似乎产生预期的输出,如我在这里收到的debugging提示中所述。 我尝试将远程桌面从PC连接到笔记本电脑: localhost:60666 。 它要求我的用户名和密码,我点击确定,它locking我的笔记本电脑上的当前会话(所以我看到在笔记本电脑上的欢迎屏幕,而不是我的桌面),它显示远程桌面屏幕上的“欢迎”消息,然后它只是黑色。 它不会断开连接,它不会提供任何错误,而且我无法在“远程桌面”屏幕中执行任何操作。 我尝试了与Windows XP笔记本电脑相同的设置,并且遇到相同的症状。 我也尝试使用不同于60666的端口,但没有任何改变。 有人知道我在做什么错吗? 更新 :正如@jwinders所指出的,我无法直接从Linux服务器运行telnet PC 3389 。 由于Windows防火墙有一个规则允许在端口3389上的所有连接,我不知道是什么阻止它。 幸运的是,我能够从Linux机器创build一个SSH隧道到PC ssh 3389:localhost:3389 'domain\user'@PC 。