2018年11月第三周

shadowssocks日志级别配置

Context

这个,,闲得无聊,看了看shadowsocks.log文件👇

1
2
3
4
5
6
# 江湖险恶啊,,请求IP地址处理了下下。
2018-11-20 07:45:21 INFO connecting mtalk.google.com:5228 from 1*4.2*6.2*0.10:42373
2018-11-20 07:46:21 INFO connecting mtalk.google.com:5228 from 1*4.2*6.2*0.10:42376
2018-11-20 07:46:39 INFO connecting notifications.google.com:443 from 1*4.2*6.2*0.10:42377
2018-11-20 07:47:22 INFO connecting mtalk.google.com:5228 from 1*4.2*6.2*0.10:42239
2018-11-20 07:47:58 INFO connecting clients4.google.com:443 from 1*4.2*6.2*0.10:42346

日志信息中没啥特别有用的信息,,关键是这么长时间了,日志文件已经很大了👇

1
2
[root@host ~]# ls -lh /var/log/shadowsocks.log
-rw-r--r-- 1 root root 56M Nov 20 08:21 /var/log/shadowsocks.log

已然55M了,既然目前没有时间精力去搞输出更详细的日志,,那么只好想办法把这些日志信息要么按日期时间分割下,要么提高下日志输出级别(正常请求信息不输出,只输出WARN级别以上的信息)。

开搞

很用力地翻了文档,没找到什么关于日志的信息。只知道日志文件在/var/log/shadowsocks.log,然并卵。只好自己动手翻源码了,好可怕。。。

这个Python,,零零星星翻过两遍,在廖雪峰的博客网站上,并没有实际深入去了解,更别说做项目了(关键是工作中暂时用不到..),有点怂。
打开项目之后,并不知道从哪儿开始看…不过,我们可以搜索关键字信息啊,哈哈…笑得一点底气都没有…直接搜『/var/log/shadowsocks.log』,我们可以看到在⁨shadowsocks-2.8.2⁩/⁨shadowsocks⁩/shell.py文件中👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 日志文件配置路径 R224
config['log-file'] = config.get('log-file', '/var/log/shadowsocks.log')

## config?难道是我想的那种config么???继续往下看 R245
logging.getLogger('').handlers = []
logging.addLevelName(VERBOSE_LEVEL, 'VERBOSE')
if config['verbose'] >= 2:
level = VERBOSE_LEVEL
elif config['verbose'] == 1:
level = logging.DEBUG
elif config['verbose'] == -1:
level = logging.WARN
elif config['verbose'] <= -2:
level = logging.ERROR
else:
level = logging.INFO
verbose = config['verbose']
logging.basicConfig(level=level, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
## 看到这儿好像问题解决了。。

原来配置文件中可以通过 verbose 来设置日志的输出级别,结合脚本代码和日志信息,可以看到默认级别为 INFO,那么接下来我们只需要在/etc/shadowsocks.conf中添加"verbose": -1就可将日志级别提升至WARN了~别忘了重启服务噢

1
2
3
4
[root@host ~]# ssserver -c /etc/shadowsocks.json -d restart
INFO: loading config from /etc/shadowsocks.json
stopped
started

亲测有效~但是!WARNING日志也很多,,无奈直接改成了"verbose":-2
关于其他配置,有兴趣的同学可以查阅下shell.py文件中的config对象的具体信息。

另外

日志输出信息是在⁨shadowsocks-2.8.2⁩/shadowsocks⁩/tcprelay.py文件中

1
2
# R293
logging.info('connecting %s:%d from %s:%d' %(common.to_str(remote_addr), remote_port, self._client_address[0], self._client_address[1]))

看样子我们可以控制日志具体输出哪些内容的,,对python比较了解的同学可以尝试修改下,可以试着添加上请求用户的信息~

微信防盗链

Context

微信公众号使用开发模式后,部分功能就只能使用API接口去实现了,,比如『自定义菜单』功能。所以这个时候,需要在后台实现类公众号后台的自定义菜单功能。这其中就会涉及到素材引用的问题,,倘若直接在自己服务器中的后台中引用,就会出现如下图片👇
@微信防盗链

但如果直接在浏览器中输入图片地址就可以正常访问。后来得知是referrerPolicy在作怪。

meta标签

我们需要做的是在请求图片资源的时候隐藏自己的referrer,避免腾讯识别出我们的服务器不是自己人。
具体做法是添加meta标签(详细信息参考MDN-Referrer-Policy)👇

1
2
# content值也可以是no-referrer
<meta name="referrer" content="same-origin">

倘若,,引用的图片是通过CSS中background-color引用的,那就悲催了。。想办法将div元素转为img元素,通过src属性引用图片,这样也是可以的。

img.referrerPolicy

如果不想用meta标签,也可以在img元素中添加referrerPolicy属性,也可以正常引用(详见HTMLImageElement-referrerPolicy)。如果无效,请尝试清空缓存之后重新请求,亲测有效~

如果是引用外部样式,,可以在link标签中添加referrerpolicy属性,,详见Element-link

需要注意的是,,

img.referrerPolicy和link.referrerpolicy属于实验功能,使用前务必检查自己的浏览是否支持!
另外,,不能通过ducument.referrer='no-referrer'去修改,因为ducument.referrer是只读属性..详见ducument.referrer

其他

text-overflow样式用来控制文字溢出盒子之后的处理逻辑,,
值为clip,则直接裁切(即隐藏)
值为ellipsis,则显示溢出省略标记

white-space: nowrap 文本不换行

word-wrap用来控制文本超出元素边界后的对英文单词换行的处理逻辑,适用于块元素,行元素需设置width、height。
值为break-word,则以单词为单位换行;
值为break-all,则以字母为单位换行。