shell 脚本如何判断所在目录问题

这是某业务广泛的 QQ 群里的一次讨论,尘光大前辈问起都是怎么获取脚本所在绝对路径。

首先有同学表示可以使用 pwd配合 $0参数,但是很明显脚本执行的时候并不一定在当前 working dir,这就会带来一个明显的问题就是,如果执行的方式是 ./a.sh,那么获取到的$0和 pwd 的结果才是相同的,否则就是不同的:

当然,可以说判断执行的方式,根据判断$0是否是绝对路径等方法可以区分这个情况,但是首先这样就变得麻烦,其次软链接的情况就不能通过这个判断,一个简单的验证:

尘光前辈关于软链接的实际应用的陈述:

~/bin/setup-firewall.sh -> /opt/gateway/bin/setup-firewall.sh 这种情况,如果是 ~/bin/setup-firewall.sh 这样运行的话,pwd的方案获取到的是 ~/bin/setup-firewall.sh,而不是 /o[……]

Read more

目录

  1. 什么是 Websocket
  2. 为什么使用 Websocket
  3. 性能理论分析
  4. Websocket 服务端和反代实践
  5. 对反代性能进行测试
  6. Websocket 和 HTTP

什么是 Websocket

Websocket 是起初由 HTML5 定义的一个建立在单 TCP 连接上的全双工通信协议,后从 HTML5 规范独立并由 RFC 6445 标准化,但仍被习惯性地称为 HTML5 Websocket。

Websocket 工作在 HTTP 的80和443端口并使用前缀 ws://或者 wss://(with ssl) 进行协议标注,但是实际上这个协议和 HTTP 并没有什么关联性,参见 RFC 6455 Section 1.7 的说明,在建立时,使用 HTTP/1.1 101状态码进行协议切换,当前标准不支持两个客户端之间不借助 HTTP 直接建立 Websocket 连接,参见 StackOverflow
[crayo[……]

Read more

在 Nginx 中,四层的数据被称为 stream,和四层代理有关的模块主要有:

  • ngx_stream_core_module:四层代理的基本功能模块
  • ngx_stream_upstream_module:四层代理转发到上游的模块
  • ngx_stream_proxy_module:四层代理相关配置

其他 stream 相关模块用于如 SSL 支持、geoip 支持、简单访问控制支持等,本次测试并没有使用到。

使用的注意事项

Nginx 的四层反代功能较为简单,其访问控制模块因为源站 IP 可以进行伪造,基本不可用于 UDP Flood 的防护。

使用健康检测功能的前提是他们在一个共享内存的 zone 里,注意各个区块的层次关系即可,zone 是配置上游服务器组共享内存的功能,因此 zone 要放在 upstream 区块。status 命令即监控dashboard 是 ngx_http_status_module 的内容,严格来说不是四层代理的部分。

我使用的 UDP 反代配置:[……]

Read more

浅谈 DNS 的解析

DNS 这个东西大概是个网民就听过,然而大部分人对它的观念停留在“能上 QQ 上不了网站就改 DNS 试试”的程度上,DNS 系统的结构和基本的查询流程是非常经典的程序员面试题,实际上我也被问到过,听说 SA 入职培训还有 DNS 相关课程的时候我还很吃惊这有什么好培训的,然后没几天自己就踩了 DNS 的坑,发现这里面能谈的东西还是不少而且我自己很多概念也并不是很清楚

DNS 的全程是 domain name service,关于域名系统和 DNS 出现的缘由不在此细讲,首先来说说什么是域(domain)和域名(domain name),这些内容定义在 RFC1034 和 RFC1035,先看看维基百科这个图:

域名的系统(域名空间)是一个树状结构,其中被虚线框起来的就是一个域,域从层次上看有域和子域的关系,如 www.example.com  中, .com  是顶级域(TLD), .example.com  是 [crayon-59[……]

Read more

Nginx plus 的 UDP 反向代理主动健康检测

万能的 Nginx 在今年支持了 UDP 的负载均衡,依旧是由于某些原因我打算试一试这个 UDP 反代功能,实际上 Linux 平台能做 UDP 的代理的工具很少,Nginx 几乎是唯一的选择,然后它自带的主动健康检测和 dashboard 监控是 Nginx-plus 才有的(实际上自己用插件写的话应该也不是很困难,但是这个我确实不会写)Nginx-plus 的安装也很有意思,从官网下载一个 key 和一个 crt,然后添加到 apt,连接 nginx.com 的仓库的时候会进行双向的 TLS 认证(一般的 HTTPS 只有客户端验证服务器,这个模式更类似网上银行和支付宝的客户端证书)

Nginx的四层反代功能是由 ngx_stream_xxx_module 提供,使用一个 stream 区块代替 http 区块,其余配置和做 Web Server 的时候差不多,来看个例子,这个例子是 dnsmasq 监听53,nginx 从10086端口反代到53:

是不是很简单呢,本来就是嘛,Nginx stream m[……]

Read more