关于tcp代理与keepalive

 haproxy, nginx, 代理  关于tcp代理与keepalive已关闭评论
11月 172016
 

关于tcp代理涉及3个实体:

c: client

p: proxy

s: server

 

c  <—–> p <—–> s

c 和 p建立tcp连接, p 和 s 建立tcp连接;

对于tcp来讲,很可能不是http那样ask and answer then close的, 很有可能连接上长时间没有数据,那么会出现什么问题呢?

  1. 假如 c 和 p 之间的网线短了, c 不可能再关闭这个连接了,那么p如何释放这个连接呢?
    1. p 在该连接上设置keepalive,定期检查连接是否断开,一般系统设置的间隔时间为2小时
    2. 一定程度上,c也关心这个长时间没有使用的连接是否依然可用,那么,c也可以在该连接上设置keepalive
  2. 问题:
    1. p 是否会转发c 的keepalive 数据包?
      1. p 是tcp(传输层)的代理,只有接到数据才会转发,没有数据不会转发
      2. keepalive 实际上是一个数据长度为0的ip数据包
      3. 所以: p 不会转发keepalive
    2. 既然p不会转发keepalive,那么如果p和 s 之间的链路出现问题,c 将不知道其实连接已经不可用了,然后就会数据发送失败

总结:

  1. p 有必要和c、s keepalive
 Posted by at 下午 12:02

tinyproxy源码学习

 代理  tinyproxy源码学习已关闭评论
11月 052016
 
  1. 解析request_line 时,使用sscanf (php中也有该函数)
  2. upstream可以设置upstream代理,如: client要请求phpor.net,tinyproxy中可以配置如果client请求的是phpor.net,则请求proxy.phpor.net,而不是代理请求phpor.net
  3. remove_connection_headers 中定义了上行请求的请求头中包含的connection要去掉,如: connection,proxy-connection
 Posted by at 下午 11:19

nginx 配置点滴

 nginx  nginx 配置点滴已关闭评论
10月 192016
 
  1. 重定向
    1. rewrite可以重定向
    2. return 301 $url; 也能重定向,简单的重定向使用return 301更简介,如,强制访问443端口,80段定义如下:

       
  2. return 301 $url ; 不同于 return $url ;
    1. 后者不会导致页面跳转,而是服务器端代为请求了
  3. location = / 不能嵌套在其他的location中,虽然逻辑上似乎合理,但是执行不到
  4. nginx中常用的变量: http://nginx.org/en/docs/varindex.html
  5. lua openresty https://github.com/openresty/lua-nginx-module

关于location:

  1. location之间是互斥的,可以嵌套,但不可以继承,如:
    1. location / 嵌套在 location / 中,虽然没有语法错误,但是,内层的location不会被执行到
    2. location /sub 嵌套在 location / 中时,如果匹配到了location sub 则location / 里面 ,location /sub 外面的逻辑不会被执行到,这就是我所谓的不可以继承,效果等同于并列的两个location
 Posted by at 下午 1:58

svn to gitlab

 git  svn to gitlab已关闭评论
8月 292016
 

手动在gitlab上创建git仓库: http://gitlab.phpor.net/phpor/svn2gitlab.git

 

 

 Posted by at 下午 5:00

etcd 的访问控制

 etcd  etcd 的访问控制已关闭评论
8月 152016
 

https://coreos.com/etcd/docs/latest/auth_api.html

auth enable 之前必须添加root用户,添加时设置密码:

开启认证:

添加一个非特权账号:(注意,这时候就需要有权限的用户来操作了)

查看有哪些账号:

添加角色:

给角色添加能力:

通过 –help 查看用法:

注意,这里只添加了 /test1 的读写权限,不包含其子目录(文件),如果需要包含,请这么写:

查看有哪些角色了:

查看指定角色的权限:

将用户添加到角色:

查看用户拥有哪些角色:

列出etcd中的所有key:(-p 选项在目录的后面添加 /)

关于用户的更多操作:

 

 

 

 

 Posted by at 上午 1:33

haproxy 实现http隧道代理

 haproxy  haproxy 实现http隧道代理已关闭评论
7月 212016
 

什么是http隧道代理?(自己搜吧)

haproxy的经典逻辑是:每个请求都分配给所配置的后端(backend)来处理;对于connect请求,原则上不需要添加配置backend的,但是这不符合haproxy的规则;测试+跟踪源代码发现: haproxy根本不能实现http隧道代理,之于option http-tunnel 配置也不过是生命不要解析第一个请求之后的数据而已,connect请求还是要原样转发给backend的

 Posted by at 下午 7:38

haproxy 健康检查与域名解析

 haproxy  haproxy 健康检查与域名解析已关闭评论
7月 202016
 

配置:

其中:

  1. check 说明要开启健康检查
  2. fall 100 rise 1: 失败100次才会被自动摘掉,对于被摘掉的机器,成功1次就能挂回来
  3. resolvers dns: 使用指定的dns 进行解析; 如果为开启健康检查(即: check) 则该配置将不生效(这叫什么逻辑?),参考: http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.2-resolvers
  4. resolve-prefer ipv4: 参考ipv4地址,这个配置避免解析没有必要的ipv6, 参考: http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.3.2

    字面意思来看:DNS总是会解析ipv4和ipv6的,只是Haproxy优先参考哪一个。
    实测的结果是:指定了ipv4后,就不会再去解析ipv6地址了(这样效率更好)
    或许dns类库也可以一下子解析出来ipv4和ipv6的

 

 Posted by at 下午 4:40