Articles of 套接字

NGINX:如何将HTTPstream量代理到一台服务器,并向另一台服务器提供stream量?

我是nginx新手,以及它如何处理locatoins,并希望得到我遇到的问题的帮助: 在同一台服务器上,我有一个Apache Web服务器和一个WebSocket服务器。 Apache工作在端口8080上,websocket服务器工作在9090上。我想在前面放一个nginx代理,这样http / https通信代理到apache,ws / wss通信代理到websocket服务器。 我有以下configuration: location /ws* { proxy_pass ws://127.0.0.1:9090; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } 这工作正常,但我面临的问题是,所有ws *请求也redirect到Apache服务器,而我只希望他们被redirect到WS服务器。 我读过nginx只需要匹配的第一个位置,但这似乎是错误的在我的情况。 所以问题是我如何代理http(s)stream量只能到apache和ws(s)通信到web套接字服务器?

Linux:确定所有连接的套接字发送缓冲区使用的内存

在Redhat Linux上,有没有办法确定当前连接的所有套接字的发送缓冲区的“实际”内存总量? 我正在解决Java项目中潜在的内存泄漏问题,并且很好奇我的代码中的发送缓冲区大小设置如何转换为这些缓冲区使用的实际内存。 谢谢你的帮助!

UDP套接字绑定到一个IP?

假设我有两台主机 – 在这个例子中使用虚拟IP,主机A的IP为1.1.1.1。 主机B有两个IP – 2.2.2.2和2.2.2.3。 如果主机B正在侦听端口8888,并且从1.1.1.1看到一个包,则产生一个响应并将其发送到与原始连接不同的IP上,这是否表明主机A(1.1.1.1)是不是会看到回应包? 1.1.1.1:8888 – > 2.2.2.2:8888(请求) 2.2.2.3:8888 – > 1.1.1.1:8888(回应) 我对套接字的理解是,一个套接字由一个IP和一个端口组成,所以如果服务器响应一个全新的客户端没有用来build立连接的客户端,客户端将不会得到响应。

微软TMG 2010是否至less通过SSL处理websocket?

我认为,如果我通过HTTPS发布了一个带有websockets的IIS 8 web服务器,即使使用TMG也不会有问题。 但是,无论发布,过滤和请求设置如何,我在通过TMG时都看不到任何websocket连接升级请求到达Web服务器。 使用SignalR我可以回退到所讨论的浏览器支持的较小传输。 当我绕过TMG当然很好用。 我是否需要find另一个防火墙/filter来使这个工作或有办法吗? 即使find哪些产品支持networking套接字的信息,我也遇到了麻烦,我所看到的只是当前代理服务器不足1%的奇怪报价是不兼容的,使用HTTPS应该可以缓解任何问题。 而且,每当我把“websocket”与微软产品一起放入谷歌search时,结果就是简单的胡言乱语和/或恶意软件网站。 tl; dr:我意识到Windows Server 2012仍然不是RTM,但有没有办法通过TMG 2010 SP2build立IIS 8 websocket连接?

Websockets和防火墙

我首先在Stack Overflow上问了这个问题 ,但后来我认为Server Fault可能是一个更好的地方发布它。 我有两个WebSocket服务器都运行在不同的端口比80和443.这两个服务器运行在只有端口80和443打开的防火墙后面。 WebSocket Server A:800 | |—–|FireWall:80 & 443|—–> INTERNET WebSocket Server B:801 | 我正在寻找的是一种让我的客户端连接到WebSocket服务器的方式,而无需知道端口,也无需打开任何其他端口(而不是80和443)的防火墙。 所以我想,也许我的防火墙和WebSocket服务器之间的中介服务器(或代理服务器)可以configuration为当客户端请求www.mywebsite.com/a端口80或443(通过防火墙)中介服务器将客户端连接到WebSocket服务器A.当客户端在端口80或443上询问www.mywebsite.com/b时,中间服务器将其连接到WebSocket服务器B.这是可能的吗? 如果有的话,是否有任何服务器,你可能知道有这个function实现? 在另一个说明(也许不是很不一样), TCP打孔和上面解释的方法之间有什么区别?

Nginx不能正确代理websockets

使用nginx的开发版本(1.3.12)。 在我启用网站的相关文件中: upstream twisted { server 127.0.0.1:8088; } server { listen 80; ## listen for ipv4 server_name *.clurn.co.uk clurn.co.uk; access_log /var/log/nginx/clurn.co.uk.access.log; location / { root /var/www/clurn.co.uk; index index.html index.htm; } location /websocket { proxy_pass http://twisted; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } location /websocket/server { deny all; } […snip…] } 与nginx网站上的例子不同的是升级的资本u,它似乎是高速公路和/或txWS实例正确识别websocket所必需的(我不记得它是哪个atm)。 现在,如果我通过服务器上的127.0.0.1:8088访问websockets,那么它似乎工作,但如果我通过127.0.0.1/websockets访问它不,所以必须有错误的编组数据包通过nginx。 如果我运行netcat […]

nginx – 为什么我不能在proxy_passpath中使用variables?

为什么我不能在proxy_pass中使用variables$ user – 就像下面的例子一样? server { listen 80; server_name ~^(?P<user>[az|AZ|0-9|_|-]+)\.example\.net$; root /home/$user/webapps/; location /app/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unix:/home/$user/webapps/app/run/gunicorn.sock:/; } } 这是可能实现还是应该放弃? 而这一个将是完美的,但它也不工作。 server { listen 80; server_name ~^(?P<user>[az|AZ|0-9|_|-]+)\.example\.net$; root /home/$user/webapps/; location ~ ^\/(?P<app>[\w-_]+)(\/.*)?$ { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unix:/home/$user/webapps/$app/run/gunicorn.sock:/; } } 我读了这个和那里 ,但在这里,但没有一个通过Unix套接字覆盖proxy_pass。

networkingpipe理员是否阻止传出stream量到不知名的端口?

我已经编写了一个Java服务器来监听端口49474.我的客户端运行在美国各地的Android手机上。 当然,他们将连接各种networking:家庭,工作,学校,图书馆,麦当劳。 服务器和客户端之间通过Java Socket传输原始JSON的stream量。 有人告诉我,我必须使用端口80或443,并且我的stream量必须是实际的HTTPstream量,否则路由器/防火墙会检测到我的stream量不是HTTPstream量并丢弃它。 networkingpipe理员阻止连接到我的端口所在的端口的通常情况如何? 此外,如果我只是将端口号切换到443,那么路由器/防火墙是否会检测到我的stream量不是HTTPstream量,即使在知名端口上也是如此?

套接字TCP服务器瓦特/ RTT和重传

我有一个在Python中使用套接字构build的TCP服务器。 我正在构build的应用程序是时间敏感的,所以数据的完整性很重要,因此我们需要TCP。 带宽非常低。 还有一个客户端每隔50毫秒向服务器请求一次数据。 如果服务器没有数据或实际需要的数据,客户端会收到OK消息。 每当客户端向服务器发出请求时,它就发送一个5字节的帧(不包括来自IP和TCP的40个额外字节)。 另一方面,服务器或者以5字节的帧(在大多数情况下)或者大于70字节的帧(通常为每秒) 两边的sockets都是这样设置的: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # this line is excluded in client's case sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 8192) sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) sock.settimeout(0.5) 一切运行良好在本地networking(没有滞后),但每当我连接到公共IP(我是端口转发)的服务器,它滞后了很多。 滞后可能高达15秒(在那一刻它超时),这是令人难以置信的多。 RTT大部分时间停留在200-210毫秒。 在WireShark上,我可以看到有很多(伪)重传和dup ACK。 我能做什么? 我已经禁用了Nagle的algorithm,但是还没有成功。

主机信息与TCP端口

原谅这个问题,我是一个devise师试图让我的头在可能的networking架构。 我在example.com上有一个通配符域。 客户端通过TCP连接到foo.example.com:1234。 处理连接的进程是否可能知道客户端连接到哪个子域? 只是要更清楚: Client -[packet]-> foo.example.com:1234 -[host,packet]-> server1.internal 我的想法是我可以使用HAProxy将请求路由到正确的机器,但因为它不是HTTP,我不确定是否可以从传入的数据包中获取子域。 任何帮助,将不胜感激。