NGINX (發音 “引擎x”)是一個開源的Web服務器軟件,設計時考慮到高並發性,可以用作 HTTP / HTTPS服務器, 反向代理服務器, 郵件代理服務器, 軟件負載均衡器, TLS終結者, 緩存服務器...
它是一個極其模塊化的軟件。 甚至一些看似“內置”的軟件(例如GZIP或SSL)實際上也構建為可在構建期間啟用和禁用的模塊。
它有 核心 (母語) 模塊 及 第三方(外部)模塊 由社區創建。 現在,我們可以使用超過一百個第三方模塊。
寫入 C 語言,它是非常快速和輕量級的軟件。
從源代碼安裝NGINX相對“簡單” - 下載最新版本的NGINX源代碼,配置,構建和安裝它。
您需要選擇是否下載 主線 or 穩定 版本,但建立它們是完全一樣的。
在本教程中,我們將使用開源版NGINX中的所有可用模塊構建NGINX,我們將使用 主線 版本是在 1.15.0 在撰寫本文時。 更新版本可用時更新版本號。
穩定與主線版本
NGINX開源有兩個版本:
- 主線 - 包括最新功能和錯誤修復,並始終是最新的。 它是可靠的,但它可能包括一些實驗模塊,它也可能有一些新的bug。
- 穩定 - 不包括所有最新功能,但有重要的錯誤修復,始終向後移植到主線版本。
核心模塊與第三方模塊
NGINX有兩種類型的模塊可供您使用: 核心模塊 及 第三方模塊.
核心模塊由核心NGINX開發人員構建,他們是軟件本身的一部分。
第三方模塊由社區構建,您可以使用它們來擴展NGINX功能。 有很多有用的第三方模塊,其中最著名的是:PageSpeed,ModSecurity,RTMP,Lua等......
靜態模塊與動態模塊
從第一個版本開始,NGINX中就存在靜態模塊。 2月1.9.11中使用NGINX 2016 +引入了動態模塊。
對於靜態模塊,構成NGINX二進製文件的模塊集在編譯時由 ./configure
腳本。 靜態模塊使用 --with-foo_bar_module
or --add-module=PATH
句法。
要將核心(標準)模塊編譯為動態我們添加 =dynamic
,例如 --with-http_image_filter_module=dynamic
.
要將第三方模塊編譯為動態我們使用 --add-dynamic-module=/path/to/module
語法然後我們通過使用加載它們 load_module
在全球範圍內的指令 nginx.conf
文件。
從源代碼構建NGINX的要求
與其他一些UNIX / Linux軟件相比,NGINX非常輕量級,並且沒有很多庫依賴項。 默認構建配置僅依賴於要安裝的3庫: OpenSSL的/LibreSSL/BoringSSL, 的Zlib 及 PCRE.
- 強制性要求:
- 可選要求:
注意:NGINX也可以編譯 LibreSSL 及 BoringSSL 加密庫而不是 OpenSSL的.
要求
- 運行Ubuntu 18.04 LTS的服務器。
- 具有sudo權限的非root用戶。
初步步驟
檢查Ubuntu版本:
lsb_release -ds
#Ubuntu 18.04 LTS
設置時區:
timedatectl list-timezone
sudo timedatectl set-timezone'地區/城市'
更新操作系統的軟件包:
sudo apt更新&& sudo apt升級-y
從源代碼構建NGINX
NGINX是一個用來編寫的程序 C,所以你首先需要安裝一個編譯工具。 安裝 build-essential
, git
及 tree
包:
sudo apt install -y build-essential git tree
下載最新的主流版NGINX源代碼並解壓縮。 NGINX源代碼作為壓縮存檔(gzipped tarball)分發,與大多數Unix和Linux軟件一樣:
wget https://nginx.org/download/nginx-1.15.0.tar.gz && tar zxvf nginx-1.15.0.tar.gz
下載強制性NGINX依賴項的源代碼並提取它們:
#PCRE版本8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz && tar xzvf pcre-8.42.tar.gz
#zlib版本1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz
#OpenSSL版本1.1.0h
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz && tar xzvf openssl-1.1.0h.tar.gz
安裝可選的NGINX依賴項:
sudo add-apt-repository -y ppa:maxmind / ppa
sudo apt更新&& sudo apt升級-y
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
清理所有 .tar.gz
文件。 我們不再需要它們了:
rm -rf * .tar.gz
輸入NGINX源目錄:
cd~ / nginx-1.15.0
對於良好的度量列表目錄和組成NGINX源代碼的文件 tree
效用:
tree -L 2。
將NGINX手冊頁複製到 /usr/share/man/man8/
目錄:
sudo cp~ / nginx-1.15.0 / man / nginx.8 / usr / share / man / man8
sudo gzip /usr/share/man/man8/nginx.8
ls / usr / share / man / man8 / | grep nginx.8.gz
#檢查NGINX的Man頁面是否正常工作:
男人nginx
如需幫助,您可以通過運行以下命令查看最新的NGINX編譯時選項的完整列表:
./configure -help
#要查看是否可以將核心模塊構建為動態運行:
./configure -help | grep -F =動態
配置,編譯和安裝NGINX:
./configure -prefix = / etc / nginx
-sbin路徑= / usr / sbin目錄/ nginx的
- 模塊路徑= / usr / lib中/ nginx的/模塊
-conf路徑= /等/ nginx的/ nginx.conf
-error日誌路徑= /無功/日誌/ nginx的/ error.log中
-pid路徑= /變種/運行/ nginx.pid
-lock路徑= /變種/運行/ nginx.lock
-user = nginx的
-group = nginx的
-build = Ubuntu的
-builddir = nginx的-1.15.0
-with-select_module
-with-poll_module
-with線程
-with文件-AIO
-with-http_ssl_module
-with-http_v2_module
-with-http_realip_module
-with-http_addition_module
-with-http_xslt_module =動態
-with-http_image_filter_module =動態
-with-http_geoip_module =動態
-with-http_sub_module
-with-http_dav_module
-with-http_flv_module
-with-http_mp4_module
-with-http_gunzip_module
-with-http_gzip_static_module
-with-http_auth_request_module
-with-http_random_index_module
-with-http_secure_link_module
-with-http_degradation_module
-with-http_slice_module
-with-http_stub_status_module
-with-http_perl_module =動態
-with-perl_modules_path =的/ usr /共享/的Perl / 5.26.1
-with-perl的=在/ usr /斌/ perl的
-http日誌路徑= /無功/日誌/ nginx的/ access.log的
-http客戶端體-TEMP-路徑= /變種/高速緩存/ nginx的/ client_temp
-http代理-TEMP-路徑= /變種/高速緩存/ nginx的/ proxy_temp那
-http-的fastcgi-TEMP-路徑= /變種/高速緩存/ nginx的/ fastcgi_temp
-http-uwsgi-TEMP-路徑= /變種/高速緩存/ nginx的/ uwsgi_temp
-http-SCGI-TEMP-路徑= /變種/高速緩存/ nginx的/ scgi_temp
-with郵件=動態
-with-mail_ssl_module
-with流=動態
-with-stream_ssl_module
-with-stream_realip_module
-with-stream_geoip_module =動態
-with-stream_ssl_preread_module
-with-COMPAT
-with-PCRE = .. / PCRE-8.42
-with-PCRE-JIT
-with-ZLIB = .. / ZLIB-1.2.11
-with-的OpenSSL = .. / OpenSSL的-1.1.0h
-with-的OpenSSL選擇=無nextprotoneg
-with調試
使
sudo make install
建立NGINX後,導航到家(~
) 目錄:
CD〜
符號鏈接 /usr/lib/nginx/modules
至 /etc/nginx/modules
目錄。 etc/nginx/modules
是NGINX模塊的標準位置:
sudo ln -s / usr / lib / nginx / modules / etc / nginx / modules
打印NGINX版本,編譯器版本並配置腳本參數:
sudo nginx -V
#nginx版本:nginx / 1.15.0(Ubuntu)
#由gcc 7.3.0構建(Ubuntu 7.3.0-16ubuntu3)
#使用OpenSSL 1.1.0h 27 Mar 2018構建
#TLS SNI支持已啟用
#configure arguments:-prefix = / etc / nginx -sbin-path = / usr / sbin / nginx -modules-path = / usr / lib / nginx / modules
#。 。 。
#。 。 。
創建NGINX系統組和用戶:
sudo adduser -system -home / nonexistent -shell / bin / false -no-create-home -disabled-login -disabled-password -gecos“nginx user”-group nginx
檢查NGINX語法和潛在錯誤:
sudo nginx -t
#將引發此錯誤-> nginx:[emerg] mkdir()“ / var / cache / nginx / client_temp”失敗(2:沒有此類文件或目錄)
#創建NGINX緩存目錄並設置適當的權限
sudo mkdir -p / var / cache / nginx / client_temp / var / cache / nginx / fastcgi_temp / var / cache / nginx / proxy_temp / var / cache / nginx / scgi_temp / var / cache / nginx / uwsgi_temp
sudo chmod 700 / var / cache / nginx / *
sudo chown nginx:root / var / cache / nginx / *
#重新檢查語法和潛在錯誤。
sudo nginx -t
創建NGINX systemd單元文件:
sudo vim /etc/systemd/system/nginx.service
將以下內容複製/粘貼到 /etc/systemd/system/nginx.service
文件:
[單位]描述= nginx - 高性能網絡服務器文檔= https://nginx.org/en/docs/之後= network-online.target remote-fs.target nss-lookup.target Wants = network-online.target [服務] Type = forking PIDFile = / var / run / nginx.pid ExecStartPre = / usr / sbin / nginx -t -c /etc/nginx/nginx.conf ExecStart = / usr / sbin / nginx -c / etc / nginx / nginx.conf ExecReload = / bin / kill -s HUP $ MAINPID ExecStop = / bin / kill -s TERM $ MAINPID [Install] WantedBy = multi-user.target
啟用NGINX以啟動並立即啟動NGINX:
sudo systemctl啟用nginx.service
sudo systemctl啟動nginx.service
檢查NGINX是否會在重啟後自動啟動:
sudo systemctl已啟用nginx.service
#enabled
通過運行以下命令之一檢查NGINX是否正在運行:
sudo systemctl status nginx.service
# 要么
ps aux | grep nginx
# 要么
curl -I 127.0.0.1
您也可以打開瀏覽器並導航到您的域/ IP地址以查看默認的NGINX頁面。 這是NGINX啟動並運行的指標。
創建簡單的防火牆(UFW)NGINX應用簡介:
sudo vim /etc/ufw/applications.d/nginx
將以下內容複製/粘貼到 /etc/ufw/applications.d/nginx
文件:
[Nginx HTTP] title = Web服務器(Nginx,HTTP)描述=小但非常強大和高效的Web服務器端口= 80 / tcp [Nginx HTTPS] title = Web服務器(Nginx,HTTPS)description =小,但功能非常強大高效的Web服務器端口= 443 / tcp [Nginx Full] title = Web服務器(Nginx,HTTP + HTTPS)description =小而強大且高效的Web服務器端口= 80,443 / tcp
驗證是否已創建和識別UFW應用程序配置文件:
sudo ufw應用程序列表
#可用應用程序:
#Nginx Full
#Nginx HTTP
#Nginx HTTPS
#OpenSSH
NGINX默認情況下會生成備份 .default
在文件 /etc/nginx
。 去掉 .default
從文件 /etc/nginx
目錄:
sudo rm /etc/nginx/*.default
將Vim編輯器的NGINX配置的語法高亮顯示放入 ~/.vim
:
#對於普通的非root用戶mkdir~ / .vim / cp -r~ / nginx-1.15.0 / contrib / vim / *〜/ .vim /#對於root用戶sudo mkdir /root/.vim/ sudo cp -r~ / nginx-1.15.0 / contrib / vim / * /root/.vim/
注意:通過執行上述步驟,在Vim編輯器中編輯NGINX配置文件時,您將獲得一個很好的語法高亮顯示。
創建 conf.d
, snippets
, sites-available
及 sites-enabled
目錄 /etc/nginx
目錄:
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
更改NGINX日誌文件的權限和組所有權:
sudo chmod 640 / var / log / nginx / *
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
為NGINX創建logrotation配置。
sudo vim /etc/logrotate.d/nginx
使用以下文本填充文件,然後保存並退出:
/var/log/nginx/*.log {每日missok旋轉52壓縮延遲壓縮notifempty創建640 nginx adm sharedscripts postrotate if [-f /var/run/nginx.pid]; 然後殺死-USR1`cat / var / run / nginx.pid` fi endscript}
從主目錄中刪除所有下載的文件:
CD〜
rm -rf nginx-1.15.0 / openssl-1.1.0h / pcre-8.42 / zlib-1.2.11 /
而已。 現在,您通過從源代碼構建NGINX來安裝最新版本的NGINX。 它是針對一些重要的庫(如OpenSSL)進行靜態編譯的。 通常,系統提供的OpenSSL版本已過時。 通過使用這種使用較新版本的OpenSSL進行安裝的方法,您可以利用新的密碼 CHACHA20_POLY1305
和協議 TLS 1.3的 這將在OpenSSL中提供 1.1.1.
此外,通過編譯自己的二進製文件,您可以定制NGINX將提供的功能,這比安裝預先構建的二進製文件更靈活。