Nginx支持Socket转发过程详解
序言
一网友在群中问,nginx支持socket转发吗?
实话说,我没做过socket转发,但是我知道socket跟http一样都是通过tcp或者udp通信的,我猜测啦一下nginx应该支持吧,然后又在网上查啦一下,网上说支持,也有支持的相关官方文档,且有理有据,于是我秉承不瞎扯,知之为知之的科学态度,我只对网友回啦两个字:“可以”,就不过多扯,此时群中也有网友为他解答问题啦,我就继续干我的活啦,干活,干活,干活,干活,没有过多的关注这个问题,没有过多的关注这个问题。
一小时后,半天后,半个月后,一年后 ,十年后 ...
此去经年,我又来到群中:哇靠,这货竟还在执着于同样的问题,不停的问:“怎么弄,怎么弄?” !! 感觉杨过的黯然销魂掌都练成啦,这个货为什么还没有半点进展。难道他在参悟天书5卷,准备修仙成佛!
于是我就对此问题产生啦极大的兴趣,开始搞。从搞到搞到结束不过30分钟,不过30分钟,搞定,搞定。下面的篇幅我会详解整个过程。
说此段子大家勿喷我,但是我只想对群中的此类网友说:
1、你们在问怎么做之前,官方文档有见到过吗,百度过相关文章吗?
2、百度文档后,有亲自操刀过吗?想游泳不下水行吗?
3、自己操刀过程中,一旦出错,你们有没有认真对待过错误信息?
4、在解锁一门招式的时候,有没有思考过类似的招式是怎么样的?或者你来设计这个招式会是什么样子的?思考?思考?关联?关联?
话有点过分,希望能引起你的关注,如果与你不对症,绕过即可,勿喷。
前10分钟,先写一个socket的服务端与客户端可以通信
实现服务端可以向客户端发送信息,客户端接受到信息后,显示出来。用c#控制台程序实现。
服务端监听本机ip与端口,服务端代码如下:
class Program
{
static Socket sck = null;
static void Main(string[] args)
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//监听本机ip
IPAddress ip = IPAddress.Parse("172.18.8.196");
IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(""));
sck.Bind(endPoint);
sck.Listen();
Console.WriteLine("开启监听!");
Thread thread = new Thread(JtSocket);
thread.IsBackground = true;
thread.Start();
while (true)
{
var msg = Console.ReadLine().Trim();
if (msg != "")
{
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(msg); //将要发送的数据,生成字节数组。
accSck.Send(buffer);
Console.WriteLine("向客户端发送了:" + msg);
}
}
}
static Socket accSck = null;
static void JtSocket()
{
while (true)
{
accSck = sck.Accept();
Console.WriteLine("链接成功!");
}
}
}
客户端连接ip为nginx代理服务器ip,客户端如下:
class Program
{
static Socket clientSocket = null;
static Thread thread = null;
static void Main(string[] args)
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//这里联通nginx代理服务器地址ip
IPAddress ip = IPAddress.Parse("172.18.8.252");
IPEndPoint endpoint = new IPEndPoint(ip, Convert.ToInt32(""));
clientSocket.Connect(endpoint);
thread = new Thread(ReceMsg);
thread.IsBackground = true;
thread.Start();
Console.WriteLine("");
Console.ReadKey();
}
static void ReceMsg()
{
while (true)
{
byte[] buffer = new byte[ * * ];
clientSocket.Receive(buffer);
string ReceiveMsg = System.Text.Encoding.UTF8.GetString(buffer).Substring(,);
Console.WriteLine("接收到数据:" + ReceiveMsg);
}
}
}
中间10分钟,搭建nginx服务器
准备一台linux服务器。nginx官网:http://nginx.org/ 。在网上搜到大致用的是 ngx_stream_core_module 这个模块,这里你也可以关注一下官方文档中的其他模块都是做什么的,那么这有相关的启用配置说明,与示例配置。
第一句便是:该ngx_stream_core_module模块是自1.9.0版本。此模块不是默认构建的,应使用配置参数启用 --with-stream 。
那好吧,我们就安装nginx,搞这个的,安装应该都会吧。
[root@localhost /]# cd /usr/local/src
[root@localhost src]# wget http://nginx.org/download/nginx-1.11.10.tar.gz
然后解压,解压完,根据文档提示需要使用这个参数--with-stream 来启用功能。
[root@localhost src]# ./configure --prefix=/usr/local/nginx --with-stream
然后,make,make install。
完成之后就是nginx配置配置文件啦,这个文档中有示例,可知与events模块平级,按照这做就好啦。
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
stream{
upstream abc{
server 172.18.8.196:11911;
}
server{
listen 11911;
proxy_pass abc;
}
}
ok,保存退出,重启nginx使配置生效即可。到这里所有的操作就都完成啦,让我们拭目以待,看下结果吧。
最后10分钟,测试nginx转发socket结果
启动服务端--->显示:开启监听--->启动客户端----> 客户端显示:连接成功---->服务端输入:abc----->服务端:点击回车---->客户端显示:abc。如下
服务端:
客户端:
至此所有的都已整个过程都已结束,功能实现。
我这里只是想抛砖引玉,勿喷!!
总结
接下来是大家最喜欢的总结内容啦,内容有二,如下:
1、希望能关注我其他的文章。
2、博客里面有没有很清楚的说明白,或者你有更好的方式,那么欢迎加入左上方的2个交流群,我们一起学习探讨。
Nginx支持Socket转发过程详解的更多相关文章
- Nginx搭建反向代理服务器过程详解
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- Nginx 搭建反向代理服务器过程详解
1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet ...
- 【转】Nginx搭建反向代理服务器过程详解
阅读目录 1.1 反向代理初印象 1.2 反向代理的作用 2.1 Nginx是神马? 2.2 Nginx的应用现状 2.3 Nginx的核心特点 3.1 准备一个ASP.NET网站部署到IIS服务器集 ...
- Nginx搭建反向代理服务器过程详解(转)
一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...
- PHP Socket 编程过程详解
使用代码 目的:开发一个客户端用于发送string消息到服务端,服务端将相同的信息反转后返回给客户端. PHP服务器 第1步:设置变量,如“主机”和“端口” $host = "127.0.0 ...
- Nginx服务器中配置非80端口的端口转发方法详解
这篇文章主要介绍了Nginx服务器中配置非80端口的端口转发方法详解,文中使用到了Nginx中的proxy_pass配置项,需要的朋友可以参考下 nginx可以很方便的配置成反向代理服务器: 1 2 ...
- Nginx核心配置文件常用参数详解
Nginx核心配置文件常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Nginx权威文档的话童鞋们可以参考Nginx官方文档介绍:http://nginx.org/ ...
- Nginx的介绍和安装详解
[介绍+安装]Nginx的介绍和安装详解 == 介绍和安装 == Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反转代理服务器, 其性能与IMAP/POP3代理服务器相当.Nginx ...
- MySQL关闭过程详解和安全关闭MySQL的方法
MySQL关闭过程详解和安全关闭MySQL的方法 www.hongkevip.com 时间: -- : 阅读: 整理: 红客VIP 分享到: 红客VIP(http://www.hongkevip.co ...
随机推荐
- AutoLayout没有相对比例布局
怎么实现相对比例布局 比如我一个控件相对上边距的位置在整个屏幕的比例 可以用stack view来管理相对布局
- 汇编语言实现led灯的跑马灯
led实验1.看原理图 看设备工作的原理(可能需要阅读芯片手册),看设备与cpu的连接关系 GPIO具有输入输出功能.输入:cpu想知道io引脚是高电平还是低电平那么就是输入方式输出:cpu想控制io ...
- --@angularJS--简单的带嵌套的指令demo
<!DOCTYPE HTML><html ng-app="app"><head> <title>custom-directiv ...
- js原生继承之——构造函数式继承实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 解决mysql 1062 主从错误
1062错误----主键冲突,出现这种情况就是从库出现插入操作,主库又重新来了一遍,iothread没问题,sqlthread出错 解决方案: 从库操作 mysql> stop slave; Q ...
- Div里面载入另一个页面的实现(取代框架)(AJax)
随着框架越来越不火了,HTML5就不对框架支持了,iframe也只有url了,Div就担当了此大任 DIV+CSS在页面部局确实也很让人满意,使用也更方便 今天突然遇到一个问题,那就是需要导入另一个页 ...
- U盘为什么还有剩余空间,但却提示说空间不够
你的U盘是FAT32格式,它只支持单一小于4G的文件复制,将U盘改为NTFS格式,可以解决题.方法:开始——运行,输入“cmd”,回车,在命令符后输入:convert h: /fs:ntfs,回车(假 ...
- MyBatis 一对多关联查询
sqlxml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC ...
- 浅谈js代码规范
要放假了 后天就可以 回家,心里很高兴,忙里偷闲写篇博客吧!!!! 声明:这是我自己总结的,如果有不对的地方请大家不要较真 一 .变量声明 对所有的变量声明,我们都应该指定var,如果没有指定var ...
- 【ci框架基础】之部署百度编辑器
在ci框架下加载编辑器,现在复习下内容.我的框架文件名称为ci 1.下载百度编辑器ueditor,http://ueditor.baidu.com/ 一般情况下下载ubuilder版即可,并将uedi ...