在 apache 上部署 python 项目

最近在用 python 搞微信公众号开发,由于公众平台强制要服务器 80 端口,手头又没有空闲的资源,于是想到通过现有的 apache 来跑 python 程序。通过检索找到了 mod_wsgi 这样一个 apache 扩展模块,恰好能满足需求。

简单科普一下:WSGI(Web Server Gateway Interface)是专为 Python 定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。mod_wsgi 实现了 WSGI 标准,可以支持任何兼容该标准的 Python 应用。

一、安装 apache 开发包

首先需要安装 apache 开发包,因为 mod_wsgi 的安装需要依赖模块编译工具 apxs。

修改 /etc/httpd/conf/httpd.conf 中 servername 等配置项,使得 http://{server-ip}:{port} 能够正常访问。

二、升级 python 版本

CentOS 6 上的 Python 版本是 2.6.6,太过于老旧,很多新的模块无法使用。因此,我们需要拉源码包编译安装最新的 2.7 版本。

这里有一个坑:pip 需要依赖 Python 的 zlib 及 openssl 相关模块,而这些模块的编译以来于系统的相应开发库。因此必须先安装 zlib 和 openssl 开发库,然后再编译安装 Python,否则这些 python 模块不会参与编译。

安装后,将原有 python 替换为新版本:

执行 python -v,检测是否为新版本。如果报错:

则需要将 python2.7 的运行库路径加速动态装载器的搜寻路径:

然后通过 ldconfig 更新共享库的缓存即可:

注意:由于 yum 依赖于 python,我们需要让其使用 python2.6 版本,不然会报错。

三、安装 mod_wsgi 模块

这个 python 的模块需要通过 pip 安装,因此需要先升级 pip。通过一行命令搞定:

与上面 python 的安装相似,我们需要让其成为系统默认的版本:

然后通过 pip 安装 mod_wsgi 和 web.py:

apache 中加载 wsgi 模块,在 /etc/httpd/conf/httpd.conf 中一堆的 module 后加入:

四、部署 python 程序

在 /etc/httpd/conf/httpd.conf 中加入下面配置:

其中,wx 为 web 程序目录。main.py 的代码为:

测试 http://{server-ip}:{port}/wx/ 访问正常,说明配置 ok。

搬瓦工 VPS 搭建 V2Ray 服务器

不知不觉已到 2019 年,功夫网也进化得越来越强大了。所谓魔高一尺,道高一丈,梯子界新秀 V2Ray 登场了,以其强大的实力超越 SS/SSR,成为爬墙首选。

关于 V2Ray 的详细介绍可以官方文档,本文主要介绍其安装及使用方法。

一、设定时区

由于 V2Ray 需要客户端与服务端的时间一致(时间差不能超过 2 分钟),因此我们要把服务器的时区改为中国时区:

然后通过 ntp 同步一下时间:

设置完成后,检查一下当前时间是否与当地时间一致即可:

二、服务端安装与配置

安装 V2Ray 很简单,只需要一行命令就能搞定:

因为笔者用的是 CentOS 6,使用的是 Sysvinit 服务管理系统,不被脚本支持,因此需要手工加入服务脚本。将下述代码保存为/etc/init.d/v2ray,并添加执行权限。

加入开机启动,并开启服务:

配置文件路径 /etc/v2ray/config.json,其中最关键的字段是 “inbound”:

三、客户端安装与配置

V2Ray 官方提供 Linux/MacOS/Windows 平台的客户端,配置方式比较简单,填入服务端的 ip, port 和 id 即可。Android 平台可以使用 v2rayNG 这款客户端,其 UI 与配置文件均与 SS 客户端相似。

四、启用 BBR 加速

BBR 是 Google 于 2016 年推出的一个基于 Linux 内核的拥塞控制算法,通过优化 TCP 底层协议来实现网速加速。BBR 同锐速(ServerSpeeder)有些类似,其他类似的工具及性能对比可以参考这篇文章

由于搬瓦工家的 Vps 使用的 OpenVZ 虚拟化架构,无法安装原版的 BBR。有人通过内部流量转发的变通方式将其移植到了 OpenVZ 平台,并修改了部分魔性参数,使其加速性能比原版还好。

查看 VPS 虚拟化架构可以使用 virt-what 这个命令行工具:

移植到 OpenVZ 的 BBR 可以通过 rinetd 或者 haproxy 进行流量转发,笔者使用其 rinetd 版本,加速效果显著。安装只需要一行命令:

安装过程中会让你选择需要加速的端口号,按提示输入即可。BBR 每次开机会随系统自启,无需其他设置。

Use hash table in shell

Declare a hash array and assign:

Insert key-value pair or modify value by key:

Get keys and values by iterator:

You can use hash arrays just like normal arrays. “${animals[@]}” expands the values, “${!animals[@]}” (notice the !) expands the keys.

Reference: