Nginx实现socket代理

在工作生活中经常会使用到代理,而nginx也是最常用的web服务器之一,想必大家都很熟悉。

这里用nginx做一个简单的socket代理服务端。

应用场景:客户端A想要访问服务器B的数据库服务,但奈何网络受限端口不通,另外正好有一台服务器C既可以被客户端A访问,也可以访问服务器B的数据库服务,这时可以通过nginx做一个socket代理,以实现客户端A访问到B的数据库。

1. 安装nginx

我平时比较习惯使用tengine,官方下载地址

下载完成后使用tar解压:

tar zxvf tengine-2.3.2.tar.gz

预编译(为了最小化演示,不添加其他参数,默认安装位置为/usr/local/nginx/,实际使用中请根据需求自行修改):

./configure --with-stream #这里需要添加stream模块,如在实际安装中需要其他模块请自行添加

编译安装:

make && make install

2. 修改nginx配置文件

示例配置文件,在默认配置文件中添加stream区域:

worker_processes1; events { worker_connections1024; } #添加以下配置实现socket代理 stream{ server{ listen 8080; #nginx socket监听端口 proxy_pass xxxxx:1521;#服务器B的IP地址和数据库服务监听端口 } } #添加以上配置实现socket代理 http { include mime.types; default_typeapplication/octet-stream; sendfileon; keepalive_timeout65; server { listen 80; server_namelocalhost; location / { root html; indexindex.html index.htm; } error_page 500 502 503 504/50x.html; location = /50x.html { root html; } } }

3. 启动nginx

/usr/local/nginx/sbin/nginx

4. 测试

现在只需要在客户端A通过数据库工具访问 nginx服务器IP的8080端口,就可以登录到服务器C的数据库了。

5. nginx安装时可能遇到的报错

./configure: error: the HTTP rewrite module requires the PCRE library.

解决方法:yum -y install pcre-devel 内网请自行搭建yum源或编译安装,如果是编译安装需要在nginx预编译时添加参数指定路径

./configure: error: SSL modules require the OpenSSL library.

解决方法:yum -y install openssl openssl-devel 内网请自行搭建yum源或编译安装,如果是编译安装需要在nginx预编译时添加参数指定路径