Nginx实现socket代理
在工作生活中经常会使用到代理,而nginx也是最常用的web服务器之一,想必大家都很熟悉。
这里用nginx做一个简单的socket代理服务端。
应用场景:客户端A想要访问服务器B的数据库服务,但奈何网络受限端口不通,另外正好有一台服务器C既可以被客户端A访问,也可以访问服务器B的数据库服务,这时可以通过nginx做一个socket代理,以实现客户端A访问到B的数据库。
1. 安装nginx
我平时比较习惯使用tengine,官方下载地址http://tengine.taobao.org/download_cn.html
下载完成后使用tar解压:
tar zxvf tengine-2.3.2.tar.gz
预编译(为了最小化演示,不添加其他参数,默认安装位置为/usr/local/nginx/,实际使用中请根据需求自行修改):
./configure --with-stream #这里需要添加stream模块,如在实际安装中需要其他模块请自行添加
编译安装:
make && make install
2. 修改nginx配置文件
示例配置文件,在默认配置文件中添加stream区域:
worker_processes 1;
events {
worker_connections 1024;
}
#添加以下配置实现socket代理
stream{
server{
listen 8080; #nginx socket监听端口
proxy_pass xxxxx:1521; #服务器B的IP地址和数据库服务监听端口
}
}
#添加以上配置实现socket代理
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.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预编译时添加参数指定路径