在 OS X 中使用 OpenResty

1. 移除 lighttpd

在 Mac OS X 上安裝lighttpd 的時候,我使用 launchctl 來實現 lighttpd 的自動啓動。如今,只須要 unload 便可。 html

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

這會當即中止 lighttpd 的運行。接下來,將 homebrew.mxcl.lighttpd.plist 從~/Library/LanuchAgents 目錄中移除。不然下次啓動系統的時候,lighttpd 又會啓動。 nginx

2. 配置 OpenResty 環境

2.1 編譯和安裝

OpenResty 的編譯和安裝流程,在官網上講得很清楚,我再也不贅述。 shell

在這裏我假設 OpenResty 已經安裝到默認路徑 /usr/local/openresty 。 bash

修改 /usr/local/openresty/nginx/conf/nginx.conf ,將其中的 server 段下的listen 80 改成 listen 8080 。 app

這是由於 80 端口只能被 root 用戶啓動。而在本文中咱們是使用當前用戶啓動 nginx 的。 post

若是 8080 端口也被佔用,請自行換成可用端口。 測試

2.2 建立 plist 文件

launchctl 依賴一個 plist 配置文件來工做。咱們須要手動建立這個文件。 spa

plist 是一種標準的 xml 格式,這種格式的詳細介紹,能夠看這裏:cocos2d-x中的plist文件格式詳解 。 .net

launchctl 對這個配置文件的格式有一些具體的要求,能夠查看 launchd.plist 。 rest

咱們建立的 ~/Library/LaunchAgents/org.openresty.plist 文件,內容以下:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>org.openresty</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/openresty/nginx/sbin/nginx</string>
    <string>-p</string>
    <string>/usr/local/openresty/nginx</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <false/>
  <key>HardResourceLimits</key>
  <dict>
    <key>NumberOfFiles</key>
    <integer>512</integer>
  </dict>
  <key>SoftResourceLimits</key>
  <dict>
    <key>NumberOfFiles</key>
    <integer>512</integer>
  </dict>
</dict>
</plist>



注意其中 Label、Program和ProgramArguments 這三個 Key 是必須存在的。

KeepAlive 這個值建議設置成 false ,除非在 nginx.conf 中設置了 daemon off 。Wayne 在launchctl筆記 中做了解釋:

設定nginx登陸後自啓動後發現,因爲缺省狀況下是生成子進程後父進程當即退出,致使launchctl在KeepAlive配置的做用下反覆啓動nginx,產生了不少錯誤信息,因此在設置守護進程的時候要注意規避這類問題,nginx能夠經過設置daemon off;或者去除掉KeepAlive設置來解決。

2.3 載入任務

launchctl load ~/Library/LaunchAgents/org.openresty.plist

這條命令會直接啓動 openresty ,下次系統重啓的時候,也會自動啓動。

2.4 使用 80 端口

既然是本身用,那麼使用 8080 老是讓人很不爽。要使用 80 端口,也很簡單。

首先,將 ~/Library/LaunchAgents/org.openresty.plist 複製到/Library/LaunchDaemons/org.openresty.plist :

cp ~/Library/LaunchAgents/org.openresty.plist /Library/LaunchDaemons/org.openresty.plist

/Library/LaunchDaemons 是給管理員使用的,在用戶登陸前生效,以 root 身份執行任務。

爲何不復制到 /Library/LaunchAgent 中呢?由於 Wayne 在 launchctl筆記 中提到:

LaunchAgents下的plist都會以當前登陸用戶的身份load進來……

而後,移除當前的監聽:

launchctl unload ~/Library/LaunchAgents/org.openresty.plist
rm ~/Library/LaunchAgents/org.openresty.plist

最後,用 sudo 調用 launchctl:

sudo launchctl load /Library/LaunchDaemons/org.openresty.plist

固然,記得要把 nginx 配置文件中的監聽端口改爲 80 。

3. 快捷方式

在開發過程當中,常常須要重啓 nginx 進程。在個人電腦上,有兩個 nginx 進程,一個負責正常的 HTTP 服務;一個負責測試 OpenResty 功能。

我寫了一個腳本 openresty 用於快速操做 nginx 進程。

#!/bin/bash
sign=${1:-reload}
prefix=${2:-1}

if [ "$prefix" = 1 ]; then
    prefix='/usr/local/etc/openresty'
else
    prefix="$hhl/server"
fi

echo "nginx -s $sign -p $prefix"
nginx -s "$sign" -p "$prefix"



在實際使用中,我只須要這樣調用就好了:

#!/bin/bash 
openresty reload 1
openresty reopen 2
相關文章
相關標籤/搜索