当前位置: 首页 > GNU/Linux, Linux系统 > 正文

Nginx下配置webssh

0x00 前言

作为学校数据中心机房的维护人员,有时候总有一个电话打过来说咋咋咋哪台服务器出了点问题啥的。平时在宿舍或者工作室还好,关键是有时候TM正在上课啊。也就是说只能处在3G/4G网络环境下,由于学校防火墙那边对外的控制端口都控制的比较死,所以总得想个法子能在任何时候随时随地的连上校内集群,所以,本篇blog应运而生。

技术上基本没啥含量,只是在配置Nginx通过虚拟主机的方式做反向代理的时候遇到了点小问题,在此和大家分享。

0x01 关于webssh

初次认识webssh也是之前在一些技术类的门户网站上了解到的,了解到它是一个基于web的ssh连接客户端。这样以来,就很方便在任何时候连接远程服务器了,只要有个浏览器就行,就不用找啥putty、xshell等工具了。

webssh项目地址:https://github.com/xsank/webssh

知道有这么个好东西,这会儿总算是找上用场了。所以,就搭了个试试。如果只是简单运行下那是很简单的,只是我目前的网络环境还是有点复杂,而且为了安全考虑,最好做虚拟主机只能通过域名访问。由于webssh的web框架是采用Tornado开发的,所以一般采用Nginx做反向代理比较靠谱。所以,基本要求就是:Nginx做反向代理、虚拟主机。当然为了安全考虑,防止有人扫描到我的域名暴露了web借口,我还简单添加了我邮件通知的功能,以防入侵者通过我的webssh接口爆破我的内网服务器。

0x02 Nginx相关配置

nginx.conf做虚拟主机,只需要做server模块的配置,我的服务器是有多个虚拟主机。而Nginx的代理功能是通过http proxy模块来实现的。默认在安装Nginx时已经安装了http proxy模块因此可直接使用http proxy模块。所以nginx.conf的配置如下:

上面的服务器做了多虚拟主机,有php的,有静态的,也有我们的webssh的应用。通过上面的配置,页面访问基本没啥问题都可以打开,但是没法连接,一直显示连接失败“connection closed”,而且根据webssh的错误信息显示如下:

webssh-1

 

 

据此应该是请求的资源找不到,再通过F12查看JS发现,这个Tornado是基于Websocket的,所以需要咋们的Nginx还要支持Websocket。浏览器里头的JS错误:

webssh-2

 

 

 

于是查了下,Nginx下的相关配置,有些给出的配置如下:

更该了配置后发现还是不能使用,又查了一些配置,有些在location里又给出了下面的配置 :

索性加了这个,发现可以正常使用了。所以对server2的完整配置如下:

这是参考的博文连接: https://chrislea.com/2013/02/23/proxying-websockets-with-nginx/

至此,webssh的配置算是完成了。下面是正常使用的状态:

webssh-3

 

 

 

 

 

但还是对nginx的反向代理配置不太熟悉啊,所以在此总结下关于这方面的配置。一般的反向代理大都涉及到下面这些方面的:

对上面的配置参数一一做个解释:

1. 指令 proxy_pass

这个指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式,例如:proxy_pass http://localhost:8000/uri/;

2. 指令 proxy_redirect

它是个URL重定向的功能。如果需要修改从被代理服务器传来的应答头中的”Location”和”Refresh”字段,可以用这个指令设置。具体可以参考:Nginx的proxy_redirect作用

3. 指令 proxy_next_upstream

如果后端的服务器返回500、502、503、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。

4.指令 proxy_set_header

设置由后端的服务器获取用户的主机名或者真实IP地址,以及代理者的真实IP地址。

5.指令 client_body_buffer_size

用于指定客户端请求主体缓冲区大小,可以理解为先保存到本地再传给用户。

6.指令 proxy_connect_timeout

表示与后端服务器连接的超时时间,即发起握手等候响应的超时时间。

7.指令 proxy_send_timeout

表示后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接。

8.指令 proxy_read_timeout

设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx已经进入后端的排队之中等候处理的时间。

9.指令 proxy_buffer_size:设置缓冲区大小, 默认,该缓冲区大小等于指令proxy_buffers设置的大小。

10.指令 proxy_buffers:设置缓冲区的数量和大小。nginx从代理的后端服务器获取的响应信息,会放置到缓冲区。

11.指令 proxy_busy_buffers_size:用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐的大小为proxy_buffers*2。

12.指令 proxy_temp_file_write_size:指定proxy缓存临时文件的大小。

0x03 开发邮件通知功能

简单分析一下webssh的源码,主要有这么几个重要的处理模块:

daemon.py  到远程SSH服务器的登录、传输数据的处理

data.py  对服务器端与客户端(浏览器)的json的数据的处理

handlers.py  响应客户连接请求处理

进一步查看源码,可以看出咋们需要在远程服务器登录成功之后发送咋们的提醒邮件。所以,可以简单修改一些handler.py文件。并一个邮件发送的模块mail.py,在handler.py中导入这个模块并使用这个模块的sending()方法发送邮件就OK了。下面是相关文件的修改:

在webssh源码根目录下添加mail.py文件以支持邮件发送功能:

至此,邮件发送功能就成功了,下面是接收到的邮件样例:

webssh-4



这篇博文由 s0nnet 于2016年02月03日发表在 GNU/Linux, Linux系统 分类下, 通告目前不可用,你可以至底部留下评论。
如无特别说明,独木の白帆发表的文章均为原创,欢迎大家转载,转载请注明: Nginx下配置webssh | 独木の白帆
关键字: ,

Nginx下配置webssh:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter