适合开发个人网页,公司主页、博客等网站开发和网站建设
转载自 http://www.5180it.com/f/article/82.html
Nginx支持TCP端口转发
有个接口是通过socket通信,对端服务器访问存在IP限制,只好通过跳板机,因为它具备访问对端服务器的权限。nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信。
安装nginx,stream模块默认不安装的,需要手动添加参数:–with-stream,根据自己系统版本选择nginx1.9或以上版本
nginx.conf (请注意,stream配置不能放到http内,即不能放到/etc/nginx/conf.d/,因为stream是通过tcp层转发,而不是http转发)
1、对于已经安装nginx的,检查是否编译时带with-stream参数,#有with-stream参数,可以代理tcp协议
nginx -V |grep with-stream
2、修改主配置文件,添加stream目录
在nginx.conf最后一行添加 include /usr/local/nginx/tcp.d/*.conf;
注意不要在http里面
请注意,stream块和http块是两个不同的模块,stream不属于http模块,即不能放到/etc/nginx/conf.d/,stream是通过tcp层转发,而不是http转发。
3、创建对应的tcp.d目录,新建文件tcp.conf(文件名可以自己取)
添加下面配置
stream{
upstream tcpssh{
server 172.18.144.20:8365;
}
server{
listen 8365;
proxy_connect_timeout 20s;
proxy_timeout 5m;
proxy_pass tcpssh;
}
}
"server":提供转发的服务,即访问localhost: 8365 ,会跳转至代理"tcpssh"指定的转发地址.。
4、保存,并重启nginx
nginx -s reload
5、测试
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
// 建立连接
Socket s = new Socket("120.79.69.105", 8365);
// 读取键盘输入流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 端口输出
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
System.out.println("bbbbbbbbbbbbbbbbbbbbbbbb");
// 输入886结束输出
while ((line = br.readLine()) != null) {
if ("886".equals(line)) {
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}
s.close();
}
}
可以看到后台日志,发现已能接受到,说明nginx配置成功了
如果nginx -s reload发现并没生效,而且nginx -t 也没报错
可以先停止nginx 然后启动
nginx -s reload 在重启时 遇到下面问题
nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)
解决方法:
需要先执行
nginx -c /etc/nginx/nginx.conf
nginx.conf文件的路径可以从nginx -t的返回中找到。
nginx -s reload