MacOS編譯NGINX1.17

背景

使用Mac的開發者大多數的時候經過 brew 命令安裝各種軟件,好比 PHP、Python、Nodejs,Nginx 也不例外。html

默認狀況下Nginx安裝在/usr/local/Cellar/nginx,經過brew link nginx加軟鏈接到/usr/local/bin/nginx,雖然這樣徹底知足開發且符合 Mac 軟件的管理,可是卻不方便移植(好比想給不懂開發的用戶一鍵部署部署的應用包,作私有化部署的同窗應該對此不陌生)。nginx

從源碼編譯NGINX程序比安裝預編譯的安裝包要靈活不少,能夠添加特定的模塊(來自NGINX官方或者第三方的,好比給 Fastdfs 提供 HTTP 訪問文件能力的 fastdfs-nginx 模塊),固然本身編譯源碼拉取的能夠是已修復 bug 和新增特性的最新分支。正則表達式

編譯

依賴

  • PCRE——支持正則表達式。 是 Nginx 的核心和重寫模塊的所需依賴庫。
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.bz2
tar zxf pcre-8.43.tar.bz2
  • zlib——支持標頭壓縮。是 Nginx 的 Gzip 模塊所需。
wget http://zlib.net/zlib-1.2.11.tar.gz
tar zxf zlib-1.2.11.tar.gz
  • OpenSSL——支持HTTPS協議。是Nginx的SSL模塊和其餘模塊所需。
wget http://www.openssl.org/source/openssl-1.1.1c.tar.gz
tar zxf openssl-1.1.1c.tar.gz

構建NGINX

下載源

wget https://nginx.org/download/nginx-1.17.4.tar.gz
tar zxf nginx-1.17.4.tar.gz 
cd nginx-1.17.4

配置構建選項

NGINX編譯配置選項由./configure 設置各類參數,包括源文件和配置文件路徑、編譯選項、連接處理方法以及模塊列表。經過./configure能夠建立 Makefile 編譯代碼和安裝 Nginx。bash

./configure \
--user=nginx \
--group=nginx \
--prefix=./nginx \
--sbin-path=nginx \
--conf-path=nginx.conf \
--pid-path=nginx.pid \
--with-http_ssl_module \
--with-pcre=../pcre-8.43 \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1c
  • --prefix=path - 定義一個將保留服務器文件的目錄。一樣的目錄也將用於由 configure 設置的全部相對路徑(除了庫源的路徑)和nginx.conf 配置文件中。它默認設置爲/usr/local/nginx目錄。
  • --sbin-path=path - 設置 nginx 可執行文件的名稱。該名稱僅在安裝期間使用。默認狀況下,該文件被命名爲${prefix}/sbin/nginx
  • --conf-path=path - 設置 nginx.conf 配置文件的名稱。若是須要,經過在命令行參數 -c 文件中指定 nginx的配置文件,nginx 始終可使用不一樣的配置文件啓動。默認狀況下,該文件名爲${prefix}/conf/nginx.conf
  • --pid-path=path - 設置將存儲主進程的進程ID的 nginx.pid 文件的名稱。安裝完成後,可使用 pid 指令始終在 nginx.conf 配置文件中更改文件名。默認狀況下,該文件名爲 ${prefix}/logs/nginx.pid
  • --error-log-path=path - 設置主要錯誤,警告和診斷文件的名稱。安裝完成後,可使用error_log指令始終在 nginx.conf 配置文件中更改文件名。默認狀況下,該文件名爲${prefix}/logs/error.log
  • --http-log-path=path - 設置HTTP服務器的主要請求日誌文件的名稱。安裝完成後,可使用 access_log 指令始終在 nginx.conf 配置文件中更改文件名。默認狀況下,該文件被命名爲${prefix}/logs/access.log
  • --build=name - 設置一個可選的 nginx 構建名稱。
  • --user=name - 設置其憑據將被工做進程使用的非特權用戶的名稱。 安裝完成後,可使用 user 指令始終在 nginx.conf 配置文件中更改該名稱。默認的用戶名是 nobody
  • --group=name - 設置工做進程將使用其憑據的組的名稱。安裝完成後,可使用 user 指令始終在 nginx.conf 配置文件中更改該名稱。 默認狀況下,組名稱設置爲非特權用戶的名稱。
  • `--with-select_module

--without-select_module - 啓用或禁用構建容許 Nginx 使用select()方法工做的模塊。若是平臺可能不支持更合適的方法(例如kqueueepoll/dev/poll`),則會自動構建此模塊。服務器

  • --with-poll_module --without-poll_module - 啓用或禁用構建容許 Nginx 使用該poll()方法工做的模塊。若是平臺彷佛不支持更合適的方法(例如kqueueepoll/dev/poll),則會自動構建此模塊。
  • --without-http_gzip_module - 禁用構建壓縮HTTP服務器響應的模塊。須要zlib庫來構建和運行此模塊。
  • --without-http_rewrite_module - 禁止構建容許HTTP服務器重定向請求並更改請求URI的模塊。PCRE庫須要構建和運行該模塊。
  • --without-http_proxy_module - 禁用構建HTTP服務器代理模塊。
  • --with-http_ssl_module - 能夠構建一個將HTTPS協議支持添加到HTTP服務器的模塊。該模塊不是默認生成的。OpenSSL庫是構建和運行該模塊所必需的。
  • --with-pcre=path - 設置PCRE庫源的路徑。發行版(版本4.4 - 8.41)須要從PCRE網站下載並提取。該庫是location指令和ngx_http_rewrite_module模塊支持正則表達式所必需的。
  • --with-pcre-jit - 用「即時編譯」支持(1.1.12,pcre_jit指令)構建PCRE庫。
  • --with-zlib=path - 設置zlib庫源的路徑。庫分發(版本1.1.3 - 1.2.11)須要從zlib站點下載並解壓縮。該庫是ngx_http_gzip_module模塊所必需的。
  • --with-cc-opt=parameters - 設置將被添加到CFLAGS變量的附加參數。在FreeBSD下使用系統PCRE庫時,--with-cc-opt="-I /usr/local/include"應該指定。若是select()須要增長支持的文件數量,也能夠在這裏指定以下:--with-cc-opt="-D FD_SETSIZE=2048"。
  • --with-ld-opt=parameters - 設置將在連接期間使用的其餘參數。在FreeBSD下使用系統PCRE庫時,--with-ld-opt="-L /usr/local/lib"應該指定。

編譯安裝

make && make install

最後看到有test相關的數據輸出則表示編譯成功:微信

test -d './nginx' || mkdir -p './nginx'
test -d './nginx' \
                || mkdir -p './nginx'
test ! -f './nginx/nginx' \
                || mv './nginx/nginx' \
                        './nginx/nginx.old'
cp objs/nginx './nginx/nginx'
test -d './nginx' \
                || mkdir -p './nginx'
cp conf/koi-win './nginx'
cp conf/koi-utf './nginx'
cp conf/win-utf './nginx'
test -f './nginx/mime.types' \
                || cp conf/mime.types './nginx'
cp conf/mime.types './nginx/mime.types.default'
test -f './nginx/fastcgi_params' \
                || cp conf/fastcgi_params './nginx'
cp conf/fastcgi_params \
                './nginx/fastcgi_params.default'
test -f './nginx/fastcgi.conf' \
                || cp conf/fastcgi.conf './nginx'
cp conf/fastcgi.conf './nginx/fastcgi.conf.default'
test -f './nginx/uwsgi_params' \
                || cp conf/uwsgi_params './nginx'
cp conf/uwsgi_params \
                './nginx/uwsgi_params.default'
test -f './nginx/scgi_params' \
                || cp conf/scgi_params './nginx'
cp conf/scgi_params \
                './nginx/scgi_params.default'
test -f './nginx/nginx.conf' \
                || cp conf/nginx.conf './nginx/nginx.conf'
cp conf/nginx.conf './nginx/nginx.conf.default'
test -d './nginx' \
                || mkdir -p './nginx'
test -d './nginx/logs' \
                || mkdir -p './nginx/logs'
test -d './nginx/html' \
                || cp -R html './nginx'
test -d './nginx/logs' \
                || mkdir -p './nginx/logs'

錯誤或注意事項

  • make 階段缺乏 pcre 錯誤
make[1]: * [/usr/local/Cellar/pcre/8.43/lib//Makefile] Error 127

Nginx 高版本的須要使用 pcre 原文件路徑,經過--with-pcre=PATH指定 pcre 的源路徑便可。ide

  • --prefix指定的是整個編譯後輸出文件的位置的前綴

若是其餘配置項不指定或者其餘配置項是相對路徑,在編譯路徑會加上prefix的配置路徑。網站


Installing NGINX Open Sourceui

Building nginx from Sources

該文首發《虛懷若谷》我的博客,轉載前請務必署名,轉載請標明出處。spa

古之善爲道者,微妙玄通,深不可識。夫惟不可識,故強爲之容:

豫兮若冬涉川,猶兮若畏四鄰,儼兮其若客,渙兮若冰之釋,敦兮其若樸,曠兮其若谷,混兮其若濁。

孰能濁以靜之徐清?孰能安以動之徐生?

保此道不欲盈。夫惟不盈,故能敝而新成。

請關注個人微信公衆號:下雨就像彈鋼琴,Thanks♪(・ω・)ノ
微信二維碼

相關文章
相關標籤/搜索