在 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 又会启动。
2. 配置 OpenResty 环境
2.1 编译和安装
OpenResty 的编译和安装流程,在官网上讲得很清楚,我不再赘述。
在这里我假设 OpenResty 已经安装到默认路径 /usr/local/openresty
。
修改 /usr/local/openresty/nginx/conf/nginx.conf
,将其中的 server
段下的 listen 80
改为 listen 8080
。
这是因为 80 端口只能被 root 用户启动。而在本文中我们是使用当前用户启动 nginx 的。
如果 8080 端口也被占用,请自行换成可用端口。
2.2 创建 plist 文件
launchctl 依赖一个 plist 配置文件来工作。我们需要手动创建这个文件。
plist 是一种标准的 xml 格式,这种格式的详细介绍,可以看这里:cocos2d-x中的plist文件格式详解 。
launchctl 对这个配置文件的格式有一些具体的要求,可以查看 launchd.plist 。
我们创建的 ~/Library/LaunchAgents/org.openresty.plist
文件,内容如下:
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>Label</key>
6 <string>org.openresty</string>
7 <key>ProgramArguments</key>
8 <array>
9 <string>/usr/local/openresty/nginx/sbin/nginx</string>
10 <string>-p</string>
11 <string>/usr/local/openresty/nginx</string>
12 </array>
13 <key>RunAtLoad</key>
14 <true/>
15 <key>KeepAlive</key>
16 <false/>
17 <key>HardResourceLimits</key>
18 <dict>
19 <key>NumberOfFiles</key>
20 <integer>512</integer>
21 </dict>
22 <key>SoftResourceLimits</key>
23 <dict>
24 <key>NumberOfFiles</key>
25 <integer>512</integer>
26 </dict>
27</dict>
28</plist>
注意其中 Label、Program和ProgramArguments 这三个 Key 是必须存在的。
KeepAlive 这个值建议设置成 false ,除非在 nginx.conf 中设置了 daemon off
。Wayne 在 launchctl笔记 中作了解释:
设定nginx登录后自启动后发现,由于缺省情况下是生成子进程后父进程立即退出,导致launchctl在KeepAlive配置的作用下反复启动nginx,产生了很多错误信息,所以在设置守护进程的时候要注意规避这类问题,nginx可以通过设置daemon off;或者去除掉KeepAlive设置来解决。
2.3 载入任务
1launchctl load ~/Library/LaunchAgents/org.openresty.plist
这条命令会直接启动 openresty ,下次系统重启的时候,也会自动启动。
2.4 使用 80 端口
既然是自己用,那么使用 8080 总是让人很不爽。要使用 80 端口,也很简单。
首先,将 ~/Library/LaunchAgents/org.openresty.plist
复制到 /Library/LaunchDaemons/org.openresty.plist
:
1cp ~/Library/LaunchAgents/org.openresty.plist /Library/LaunchDaemons/org.openresty.plist
/Library/LaunchDaemons
是给管理员使用的,在用户登录前生效,以 root 身份执行任务。
为什么不复制到 /Library/LaunchAgent
中呢?因为 Wayne 在 launchctl笔记 中提到:
LaunchAgents下的plist都会以当前登录用户的身份load进来……
然后,移除当前的监听:
1launchctl unload ~/Library/LaunchAgents/org.openresty.plist
2rm ~/Library/LaunchAgents/org.openresty.plist
最后,用 sudo 调用 launchctl:
1sudo launchctl load /Library/LaunchDaemons/org.openresty.plist
当然,记得要把 nginx 配置文件中的监听端口改成 80 。
3. 快捷方式
在开发过程中,经常需要重启 nginx 进程。在我的电脑上,有两个 nginx 进程,一个负责正常的 HTTP 服务;一个负责测试 OpenResty 功能。
我写了一个脚本 openresty
用于快速操作 nginx 进程。
1#!/bin/bash
2sign=${1:-reload}
3prefix=${2:-1}
4
5if [ "$prefix" = 1 ]; then
6 prefix='/usr/local/etc/openresty'
7else
8 prefix="$hhl/server"
9fi
10
11echo "nginx -s $sign -p $prefix"
12nginx -s "$sign" -p "$prefix"
在实际使用中,我只需要这样调用就行了:
1#!/bin/bash
2openresty reload 1
3openresty reopen 2
- 文章ID:2217
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/using-openresty-in-osx/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。