通过nginx进行Socket连接
我有一台生产服务器,上面运行着nginx服务器,用来处理与多个服务的连接。在另一台机器上,这台机器只能通过VPN从生产服务器访问,我有一台开发服务器,用来测试一些网络应用。
我想让互联网能够访问开发机器提供的服务,所以我需要把进来的流量转发到开发服务器上。
1.- 客户端通过套接字连接请求 a.domain.com(端口7081)。
2.- nginx需要转发这个请求,我有以下代码来实现这个功能。
注意:a.domain.com的VPN接口是10.8.0.1。
server {
listen 7081;
server_name a.domain.com;
location / {
proxy_pass http://10.8.0.210:7081;
proxy_set_header X-Real-IP $remote_addr;
}
}
3.- 在开发服务器(10.8.0.210)上,我有一个服务在端口7081上监听。
客户端的套接字连接返回了以下内容。
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.6.35</center>
</body>
</html>
4.- a.domain.com上的nginx服务器记录了以下内容。
XXX.XXX.XX.XX - - [11/Feb/2011:08:58:10 -0300] "-" 400 173 "-" "-"
有什么想法吗?
谢谢!
1 个回答
1
错误请求——这意味着这不是一个有效的HTTP请求。
Nginx只能处理HTTP、SMTP、POP3和IMAP这些协议。
如果你想处理其他类型的请求,比如其他协议,你就需要使用像iptables中的DNAT这样的工具。