使用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 和新增特性的最新分支。正則表達式
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.bz2 tar zxf pcre-8.43.tar.bz2
wget http://zlib.net/zlib-1.2.11.tar.gz tar zxf zlib-1.2.11.tar.gz
wget http://www.openssl.org/source/openssl-1.1.1c.tar.gz tar zxf openssl-1.1.1c.tar.gz
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 配置文件中更改該名稱。 默認狀況下,組名稱設置爲非特權用戶的名稱。--without-select_module - 啓用或禁用構建容許 Nginx 使用
select()方法工做的模塊。若是平臺可能不支持更合適的方法(例如
kqueue,
epoll或
/dev/poll`),則會自動構建此模塊。服務器
--with-poll_module --without-poll_module
- 啓用或禁用構建容許 Nginx 使用該poll()
方法工做的模塊。若是平臺彷佛不支持更合適的方法(例如kqueue
,epoll
或/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[1]: * [/usr/local/Cellar/pcre/8.43/lib//Makefile] Error 127
Nginx 高版本的須要使用 pcre 原文件路徑,經過--with-pcre=PATH
指定 pcre 的源路徑便可。ide
--prefix
指定的是整個編譯後輸出文件的位置的前綴若是其餘配置項不指定或者其餘配置項是相對路徑,在編譯路徑會加上prefix
的配置路徑。網站
Installing NGINX Open Sourceui
該文首發《虛懷若谷》我的博客,轉載前請務必署名,轉載請標明出處。spa
古之善爲道者,微妙玄通,深不可識。夫惟不可識,故強爲之容:豫兮若冬涉川,猶兮若畏四鄰,儼兮其若客,渙兮若冰之釋,敦兮其若樸,曠兮其若谷,混兮其若濁。
孰能濁以靜之徐清?孰能安以動之徐生?
保此道不欲盈。夫惟不盈,故能敝而新成。
請關注個人微信公衆號:下雨就像彈鋼琴,Thanks♪(・ω・)ノ