从 Lighttpd 到 OpenResty

两年前,我写了 从Apache到Lighttpd。现在,是时候又发生改变了。

前段时间,我写了许多关于 OpenResty 的文章,并在公司内网服务器和自己的电脑上开始使用 OpenResty。

现在,我开始在外网部署 OpenResty。

编译和安装

OpenResty 的编译和安装就是老三套:

tar xzvf ngx_openresty-VERSION.tar.gz
cd ngx_openresty-VERSION/
./configure
make
make install

默认情况下,OpenResy 会安装到 /usr/local/openresty 中,编译时会默认使用 luajit。 继续阅读从 Lighttpd 到 OpenResty

基于 OpenResty 的服务器架构设计

这个服务器架构不一定能用上,记录在这里,算是一个小小的学习成果。

1. 技术选择

  • Cocos2d-x 3.x —— 客户端框架。
  • WebSockt —— 网络协议。
  • HTTP —— 网络协议。
  • OpenResty —— 基于 nginx+lua 实现 WebSocket 或 HTTP 服务器。
  • MySQL —— 数据库支持。
  • Redis —— NoSQL 支持。

继续阅读基于 OpenResty 的服务器架构设计

将 nginx 注册为系统服务

nginx 提供了 -s signal 命令行参数让我们对其进行操作。我们可以很方便地利用 -p prefix 参数指定启动路径来启动多个完全隔离的 master 进程;还可以使用 -c filename 显式指定不同的配置文件。

由于 prefix 的路径一般都比较长, reload 或者 reopen nginx master 进程就会比较不方便。此时可以采用我在 在 OS X 中使用 OpenResty – 3.快捷方式 中提到的自建快捷方式的形式来简化这些操作。

更一般的,在服务器上我们会采用操作系统提供的标准服务的方式来进行这些简化。当然,这种方法一般仅针对一个 nginx master 进程进行操作。

本文将介绍在多个操作系统上将 nginx 注册为服务的方式(其实,也没有那么多啦)。

1. Mac OS X

参照 在 OS X 中使用 OpenResty – 2. 配置 OpenResty 环境 进行配置即可。

2. CentOS

根据 CentOS Nginx的一个初始化脚本(用于启动、停止、查看状态) 一文提供的方法,我整理了代码到 gist 上,只需要将 nginxd 下载到 /etc/init.d 并执行 addnginxservice 脚本即可。

下面的代码自动帮你做了上面的事:

wget --no-check-certificate https://gist.githubusercontent.com/zrong/9c7dfce8f274ee451188/raw/77eada5f92dd5583838390f26cc9790b00e63137/nginxd
wget --no-check-certificate https://gist.githubusercontent.com/zrong/9c7dfce8f274ee451188/raw/a0084d1ae6d5175c913e4593c99d493487d14c75/addnginxservice && source addnginxservice

3. Ubuntu

已经都是 Ubuntu了,自然是直接 apt-get 啦。这个没什么好说的。

4. Windows

nginx 的 Windows 二进制包并没有提供注册成为服务的功能。官方提供的方法和 Linux 相同,都是使用命令行参数进行操作。例如下面的 来自官方wiki 的方法,进入 nginx 文件夹,启动nginx进程:

cd nginx/
start nginx.exe

使用下面的命令查看 nginx 进程是否正在运行:

tasklist /fi "imagename eq nginx.exe"

关闭 nginx 进程:

nginx.exe -s quit

nginx 并不是为 windows 开发的,windows 版本的作用是为了方便在 windows 上工作的程序员们使用 nginx 。因此,nginx 好像并没有什么需要成为一个服务的动力。尽管 Running as a service. 出现在了 Possible future enhancements 列表中。

如果一定要在 windows 下将其注册为服务的话,把 Nginx 创建为 Windows 的一个服务原文)一文提供了一种方式。这是一篇写于 2009 年的文章,我并没有在我的 Windows 8.1 上尝试,因为我直接使用 Vagrang 了。

(全文完)

在 OS X 中使用 OpenResty

我曾经写过 在 Mac OS X 上安装lighttpd ,从那时起,我的 Mac 上的 HTTP 服务器一直是 lighttpd。

现在,为了学习 OpenResty ,我将 lighttpd 进行了替换。下面记录这个过程。

1. 移除 lighttpd

在 Mac OS X 上安装lighttpd 的时候,我使用 launchctl 来实现 lighttpd 的自动启动。现在,只需要 unload 即可。

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.lighttpd.plist

这会立即停止 lighttpd 的运行。接下来,将 homebrew.mxcl.lighttpd.plist 从~/Library/LanuchAgents 目录中移除。否则下次启动系统的时候,lighttpd 又会启动。

继续阅读在 OS X 中使用 OpenResty

几个常用的WAMP套件

WAMP,就是:Windows、Apache、MySQL和PHP,用于快速在Windows系统上搭建PHP开发和运行平台。
当然,也有LAMP(Linux、Apache、MySQL和PHP)。

  • XAMPP推荐!
    有for Linux、Windows、Mac OS X、Solaris等操作系统版本,还有一个Lite版本
    最新版本1.5.2,包括Apache HTTPD 2.2.0, MySQL 5.0.20, PHP 5.1.2 + 4.4.2-pl1 + PEAR + Switch, MiniPerl 5.8.7, Openssl 0.9.8a, PHPMyAdmin 2.8.0.3, XAMPP Control Panel 2.2, eAccelerator 0.9.4-rc1, Webalizer 2.01-10, Mercury Mail Transport System for Win32 and NetWare Systems v4.01a, FileZilla FTP Server 0.9.14a, SQLite 2.8.15, ADODB 4.80, Zend Optimizer 3.0.0, XAMPP Security
    Lite版本包括Apache 2.2.0 + PHP 5.1.2 (without PEAR) + MySQL 5.0.20 + phpMyAdmin 2.8.0.3 + Openssl 0.9.8 + SQLite 2.8.15 + eAccelerator 0.9.4 rc1
  • PHPnow(国产!)推荐!
    Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包。
    简易安装、快速搭建支持虚拟主机的 PHP 环境。附带 PnCp.cmd 控制面板,帮助你快速配置你的套件,使用非常方便。
    PHPnow 是绿色的,解压后执行 Setup.cmd 初始化,即可得到一个 PHP + MySQL 环境。
    然后就可以直接安装 Discuz!, PHPWind, DeDe, WordPress 等程序。
    * 支持虚拟主机:便捷的虚拟主机管理
    * 虚拟主机代理:可与 IIS 共存 (泛解析代理)
    * 插件支持:ASP | ASP.NET | JSP
    喜欢自己配置 PHP 环境?
    PHPnow 仅使用了 DOS 命令脚本 和 PHP 程序,完全可以自己修改,打造自己的套件!
    手动配置 PHP 还是有必要掌握的,PHPnow 只是为你减少重复的动作。
  • EasyPHP
    当前最新版本1.8,包含Apache1.33、PHP4.3.10、Mysql4.1.9和PHPmyAdmin2.6.1
  • Uniform Server(miniServer)
    最新版本3.3,包括Apache2, Perl5, PHP5, MySQL5,可以以插件方式支持PHP4
  • AppServ
    最新版本2.4.5,包括Apache 1.3.34、PHP 4.4.1、MySQL 5.0.16、phpMyAdmin-2.5.7-pl1

2009年3月3日11:23:48更新

mysql启动 1067错误

我的MySQL本来安装在“G:\sites\mysql”路径下。今天突发奇想,将原来的sites文件夹改名为Inetpub,那么MySQL的安装路径也就改为”“G:\Inetpub\mysql”了。这样,MySQL服务当然无法成功启动,于是开始下面的漫漫征程:

1.来到我们可爱的Dos窗口,运行“G:\Inetpub\mysql\bin\mysqld-nt -remove”,卸载MySQL服务

2.接着运行“G:\Inetpub\mysql\bin\mysqld-nt -install MySQL –defaults-file=”G:\Inetpub\mysql\my.ini”重新安装MySQL服务,并指定当前的ini文件为MySQL安装目录下的my.ini

3.本来以为大功告成,继续执行“net start MySQL”,结果出现“错误1067:进程意外中止”。这个错误可是伴随了我好长时间了,每次安装MySQL都可能碰到,但是不知怎么重装一次就又好了。所以碰到它我并不感到特别奇怪。

4.去“C:\winnt”看看,找到一个名为“my.ini”的文件,删掉它,再次启动MySQL服务。错误依然故我……我晕!!!

5.检查“G:\Inetpub\mysql\my.ini”,看到这样红色的两句,修改basedir和datadir的值,将其改成相应的目录(我已经将其修改为正确的目录)。再次启动MySQL服务(心里面那个紧张呀……),在等待了N<2秒之后,错误继续出现。我的心凉了。

[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306

#Path to installation directory. All paths are usually resolved relative to this.
basedir="G:/Inetpub/mysql/"

#Path to the database root
datadir="G:/Inetpub/mysql/Data/"

6.使出最后一招,重装MySQL!!!我依然选择安装到“G:\inetpub\mysql”目录。当然,保留了原来的“Data”目录,其它的一律删除。

7.安装完后,一切试用默认设置,可是MySQL依然无法启动!错误还是1067!!!!这个顽固的错误,怎么会这样!!!

8.查找注册表,删除所有与MySQL有关的键值。我就不信了!每操作一次,我就重启一次Windows!

9.第三次安装MySQL,错误还是错误,并没有因为我的努力而消失。

10.我开始烦躁,开始Google,那么多帖子,说的方法都无法解决我的问题。不过倒是给我一点启示,就是在my.ini上做文章。我复制了多份my.ini,分别放在安装目录、Winnt目录、C:\,我还把mysql的安装目录复制到了C:\,可是仍然无济于事。

11.最后一遍安装。我没有更改任何设置,包括安装路径都采用默认的(我极其讨厌MySQL4.1的默认安装路径)。可是,这次,MySQL启动成功了!

12.我欣喜若狂,我检查了My.ini的值,basedir的值是安装目录,datadir的值是安装目录下的data目录。我立刻卸载了MySQL,再次安装,安装目录为“G:\inetpub\mysql”。这次启动不成功。这并没有让我沮丧,我好像找到了问题的根源。

13.再次卸载,再次安装,安装目录为默认。启动成功后,将my.ini中的datadir的值更改为“G:/inetpub/mysql/data/”,重新启动MySQL,不成功!!!这说明,MySQL的启动失败的原因是数据库或者数据库路径问题!数据库路径当然是没有问题的,所以我怀疑数据库。

14.进入到data目录中,发现data目录下有许多文件,删除根目录下的所有文件,仅保留子文件夹(每个文件夹就是一个数据库,这个当然是不能删除的),然后启动MySQL服务。终于成功了。

15.google上找到的相关资源迷惑了我的眼睛。我在My.ini上耗费了太多的时间,却没有注意数据库的问题。也许是上一个版本留下了太多与路径相关的数据导致MySQL启动失败?可能。无论如何,我已经解决了这个该死的1067错误了。


以下为网友评论

Jeff(210.72.237.66)在 2005年9月20日18:05星期二 评论: [删除] [回复]
非常感谢你的经验,否则我还不知道怎么解决!
另外再补充一下我的发现:
我的数据库中有InnoDB类型的表,所以不能将/mysql/data/ibdata1文件删除,否则数据库中InnoDB类型的表都不能访问,所以需要保留。其它文件删除。