通过nginx进行Socket连接

0 投票
1 回答
1873 浏览
提问于 2025-04-16 11:38

我有一台生产服务器,上面运行着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这样的工具。

撰写回答