适合开发个人网页公司主页博客网站开发网站建设

转载自 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;
    }
}

"upstream tcpssh":转发的目的地址和端口等设置;其中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

 

 

适合开发个人网页公司主页博客网站开发网站建设

转载自 http://www.5180it.com/f/article/82.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐