分类目录归档:Linux

nginx的proxy_pass使用https(SSL加密)

写这个文章的原因是因为今晨解决了一个电影FM网友经常访问网站502的问题。最近电影FM粉丝交流群越来越活跃了,感谢Rachel妹纸每周举行的猜电影活动。热衷电影的网友可以加入电影FM的交流QQ群:471644884。最近电影FM的访问量也上升了,高峰时候接近2w一天的IP。今晚美女主持人Kiki来访电影FM时,登录的时候遇到了502,其实我今天访问的时候也出现过一次。为什么会这样呢?

因为电影FM没有网站备案(做电影推荐也需要视听许可证???搞不懂),所以前端流量入口的机器放在阿里云的香港主机,后端也就是网站程序运行的主机在邻近的深圳机房。阿里云的主机之间互相访问速度还是可以的,就是香港主机的线路偶尔也会抽风(比较慢)。当然这些都问题不大,最大问题是香港和深圳的主机之间,多了一道墙。如果我们访问墙外的网站,如果带有敏感词,会被墙挡下来,并且1分钟内都无法访问,不过只是单个人的,还不至于影响所有人。现在问题是墙的工作室双向的,假如有个人在墙外输入了敏感词,墙就会把香港主机和深圳主机的连接挡下来,这时候会让所有用户都上不了网站了。所以为了解决这个问题,要么抛弃墙熟悉的HTTP通信,要么使用HTTPS加密传输(墙绝对不会解密HTTPS)。所以我最后决定在香港和深圳主机之间使用自签名的HTTPS。

回归正题,先生成一个RSA的key,加密算法选择aes也行,des3也行。这里使用1024位的des3。

openssl genrsa -des3 -out ssl.key 1024

会提示必须输入一个密码,随便输入一个就行了,下面我们要解密后才给nginx使用。

继续阅读

CentOS7上MySQL返回Too many connections

被这个问题困扰了一天,今天做微信开发,流量一大,django占用CPU很大,这个比较好解决,加进程加硬件即可。然而数据库连接开始报Too many connections,查了网上一些文章,直接改/etc/my.cnf加入max-connections=3000,无果。又查,在mysql里输入set GLOBAL max-connections=3000,数值是变了,然并卵。

刚才找到一个文章,才想起原来是CentOS7的systemd限制了服务进程的NOFILE,导致每次启动mysql服务后,查询max-connections一直是214,这个数字可能是默认的最大值吧。解决方法如下:

编辑 /usr/lib/systemd/system/mysqld.service,加入:
LimitNOFILE=infinity
LimitMEMLOCK=infinity

困扰整天的问题终于解决,撰文记下。

参考文献:

http://www.nethings.eu/quick-picks/mysql-max-connections/

发现一个不需要打密码的sudo方法

平常在在 /etc/sodoers 添加管理员时,一般这样写:

xiaoxia    ALL=(ALL)    ALL

虽然看不懂这句里面三个ALL表示什么意思,每次都这样写。最近在公子龙七的强烈推荐下,玩起了树莓派2(一个信用卡大小的微型计算机,不用200块就能买到),官方的raspbian系统(发展debian)不能用root,但sudo不需要密码。看了一下它的sudoers文件。Mark下来。

xiaoxia    ALL=(ALL)    NOPASSWD:    ALL

还是看不懂这三个ALL表示什么意思,也懒得去翻阅了,UNIX世界里学海无涯。有了这个东西,平常在我个人的MacBook Air上操作网卡路由表之类的方便多了 😀

继续阅读

Windows上最小的Python运行环境,700KB

之前还没有编译过Windows上的Python,打包发布一般使用py2exe和pyinstaller,生成的文件至少有3MB。而且Python只有VS的Project文件,也就是说,如果自己要用GCC来编译,就需要自己编写或者修改Makefile了。我是在Debian上安装了Mingw32之后,修改默认的Makefile来让它支持编译成Windows版本,而且源代码有大幅度改动,所以这里就不把过程写出来了,我也忘了做了多少修改。编译方法可以参考我的上一篇博文。建议有VS的同学还是选择VS编译比较方便,不用改动那么多。

python23

继续阅读

继续玩路由器,交叉编译Python 3.3,压成1.5MB

昨天在研究如何在嵌入式Linux上搭建Python运行环境,因为有了Python之后,很多工具例如GoAgent之类的东西就可以用上场了。昨天成功编译了Python2.6,参考了网上很多方法,但最后无果而终,现在总结了一套自己的编译方法,基本上可以秒杀所有Python版本的交叉编译,这里做一个总结。我的编译环境是Debian64位 无桌面版本,体积很小巧,安装在办公室电脑虚拟机里,在家里也可以远程编译代码。

首先在Python网站下载最新版源代码,这里我使用Python 3.3版本。解压下,有下面这堆东西。

download

 

继续阅读

无聊开始玩路由器,入门Tomato固件

在Wordpress上消失了一段时间,其实我最近几个月都比较宅。相信最近大家都了解过新出的一款很NB的路由器叫极路由,功能很强大,8G的可存储空间,可以安装路由apps也可以下载资源,据说翻墙插件还很给力。对新鲜事物一直保持着高度兴趣的我,却没有机会买到这款路由,而且据说价钱会越来越贵,说不定之后还有收费的apps。想在路由器上翻墙嘛,自己动手实践一下就可以了 🙂

在之前的《路由器上写CMCC自动登录验证脚本》  这篇文章中,我尝试了在使用openWRT的WR703N上接入8G的U盘也实现了在路由上安装和运行Python应用。不过当时很有目的性的玩玩,所以没有怎么深入探究底层的东西。

昨天在ziv同学的陪同下,搞来了两个Tenda的路由器,老板邓先生帮我刷了Tomato的固件。话说,以前我的703N也是在他这里网购的,不过这次路过实体店了。在他的店里,看着他轻轻松松的拆掉里面的电子元件,然后放到一个地方进行编程,接着又轻轻松松的安装回去。我呆呆的看着,觉得很酷。突然想起初中的时候,自己拆开一个mp3.5为了刷固件,短路两条引脚结果太暴力被我弄断了,为了修好到处找店铺想方设法焊接上那块芯片上的引脚,到最后还是放弃了。邓先生说这个Tenda的路由只能刷Tomato的固件,刷openWRT固件的路由价格贵,稳定性也不高,所以我就看着便宜的捡了70块钱的Tenda回去。

继续阅读

在路由器上写CMCC自动登录脚本2 (shell篇)

继上一篇在路由器上写CMCC自动登录脚本介绍用python脚本实现cmcc自动登录之后,用起来不是很爽!另外发现openwrt也不支持perl脚本,所以想到用shell脚本重新写一遍。方便在没有python环境下,能够直接使用。

今晚琢磨了两个小时,终于成功写出busybox能够支持的登录脚本了。因为登录过程中多次跳转,需要记录JSP的SessionID,所以需要下载安装完整版的wget,才能使用到wget的cookie功能!(busybox自带的wget不支持cookie功能)
继续阅读

写了个Python脚本监控nginx进程

接上一文用iptables让SSH服务对陌生人说不。还是有点担心这个学期内,nginx可能会因为系统各种原因而出现异常退出,导致Web服务暂停。所以,又来了一个方案。

#!/usr/bin/env python
import os, sys, time

while True:
    time.sleep(3)
    try:
        ret = os.popen('ps -C nginx -o pid,cmd').readlines()
        if len(ret) < 2:
            print "nginx process killed, restarting service in 3 seconds."
            time.sleep(3)
            os.system("service nginx restart")
    except:
        print "Error", sys.exc_info()[1]

设置文件可执行属性,加入到/etc/rc.local,总算放心了。
这种方法还可以监控别的进程,我相信应该有现成的监控软件,但是我觉得写个脚本更方便。

用iptables让SSH服务对陌生人说不

今晚老师跟我说服务器的Web挂了,但是FTP可以用。我登录了这个OpenVZ的VPS,发现nginx进程没了。为什么会发生这么神奇的事情呢?

我在/var/log/nginx下翻了日志文件,没有发现任何出错信息。然后想会不会是系统内存超了,被OpenVZ内核KILL了呢?查了一下,果然发现:

uid resource held maxheld barrier limit failcnt
3004536: kmemsize 3626521 4652581 51200000 51200000 0
lockedpages 0 0 2048 2048 0
privvmpages 34041 131231 131200 262200 3
shmpages 1281 1297 128000 128000 0

私有虚拟页面privvmpages的数值超了,有3次失败请求。一个页面4KB,所以这个VPS的内存是512M.

我在这个VPS上只开启了nginx,vsftpd,mysqld,php-cgi,xxfpm等服务,不可能占用那么多内存吧。php的进程数量是用自己写的xxfpm限制死了,只能有3个进程。这些所有的服务一共才占用100多MB内存,怎么可能超了512M呢?
继续阅读