Nginx(發音為"engine-x")是一個開源的高效能 HTTP和反向代理伺服器。它具有以下功能:
1.靜態檔案服務:Nginx 可以快速、可靠地提供靜態檔案,如 HTML、CSS、JavaScript、影象和視訊檔等。
2.反向代理:Nginx 可以作為反向代理伺服器,將使用者端請求轉發給後端的多個伺服器。它能夠優化請求處理和負載均衡,提高整體效能和可靠性。
3.負載均衡:Nginx 可以平衡多個後端伺服器的負載,確保請求在這些伺服器之間均衡分佈,提高系統的可靠性和效能。
4.動態內容快取:Nginx 可以快取動態內容,以減少對後端伺服器的請求,提高響應速度和吞吐量。
5.SSL/TLS支援:Nginx 可以處理安全連線,支援 SSL/TLS 協定,提供加密通訊和證書管理功能。
6.URL 重寫:Nginx 具有強大的 URL 重寫功能,可以修改請求 URL 的結構,實現 URL 的美化和重定向。
7.紀錄檔記錄和監控:Nginx 可以記錄存取紀錄檔,方便後續分析和監控伺服器效能。
基礎特性
模組化設計,較好的擴充套件性
高可靠性
支援熱部署:不停機更新組態檔,升級版本,更換紀錄檔檔案
低記憶體消耗:10000個keep-alive連線模式下的非活動連線,僅需2.5M記憶體
event-driven,aio, (mmap,sendfile)
Apache是以程序為基礎的結構,程序要比執行緒消耗更多的系統開支,不太適用於多處理器環境,因此,在一個apache Web站點擴容時,通常是增加伺服器或擴充群集節點而不是增加處理器。
Nginx | Apache |
---|---|
nginx是一個基於事件的web伺服器 | apache是一個基於流程的伺服器 |
所有請求都由一個執行緒處理 | 單個執行緒處理單個請求 |
nginx避免子程序的概念 | apache是基於子程序的 |
nginx類似於速度 | apache類似於功率 |
nginx在記憶體消耗和連線方面比較好 | apache在記憶體消耗和連線上沒有提高 |
nginx在負載均衡方面表現較好 | 當流量到達程序極限時,apache將拒絕新的連線。 |
nginx不支援IBMI和openvms一樣的os | apache支援更多的os |
nginx只具有核心功能 | apache提供了比nginx更多的功能 |
nginx的效能和可伸縮性不依賴於硬體 | apache依賴於cpu和記憶體等硬體元件 |
Nginx支援熱部署 | Nginx支援熱部署 |
Apache: 建立多個程序或執行緒,而每個程序或執行緒都會為其分配cpu和記憶體(執行緒要比程序小的多,所以worker支援比perfork高的並行),並行過大會榨乾伺服器資源。
Nginx: 採用單執行緒來非同步非阻塞處理請求(管理員可以設定Nginx主程序的工作程序的數量),不會為每個請求分配cpu和記憶體資源,節省了大量資源,同時也減少了大量的CPU的上下文切換。所以才使得Nginx 支援更高的並行。
1編譯安裝nginx
https://nginx.org/en/download.html
#官網
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
#安裝依賴包
useradd -M -s /sbin/nologin nginx
#新建nginx使用者便於管理
cd /opt/ 將下載的包放在/opt下
wget http://nginx.org/download/nginx-1.18.0.tar.gz
#官網下載安裝包
#解壓軟體包
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
mkdir /apps/nginx -p 建立將 Nginx 安裝到特定的目錄。
./configure --help
#檢視幫助模組
檢測編譯環境,並將軟體安裝到指定目錄,並新增模組
./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make -j2 使用兩核編譯
make install 安裝程式
chown -R nginx.nginx /apps/nginx
#修改許可權
ll /apps/nginx/
total 0
drwxr-xr-x 2 root root 333 Sep 22 12:49 conf
drwxr-xr-x 2 root root 40 Sep 22 12:49 html
drwxr-xr-x 2 root root 6 Sep 22 12:49 logs
drwxr-xr-x 2 root root 19 Sep 22 12:49 sbin
######安裝好後生成四個檔案功能如下
conf:儲存nginx所有的組態檔,其中nginx.conf是nginx伺服器的最核心最主要的組態檔,其他的.conf則是用來設定nginx相關的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params兩個檔案,組態檔一般都有個樣板組態檔,是檔名.default結尾,使用的使用將其複製為並將default去掉即可。
html目錄中儲存了nginx伺服器的web檔案,但是可以更改為其他目錄儲存web檔案,另外還有一個50x的web檔案是預設的錯誤頁面提示頁面。
logs:用來儲存nginx伺服器的存取紀錄檔錯誤紀錄檔等紀錄檔,logs目錄可以放在其他路徑,比如/var/logs/nginx裡面。
sbin:儲存nginx二進位制啟動指令碼,可以接受不同的引數以實現不同的功能。
##########啟動##############
/apps/nginx/sbin/nginx
#絕對路徑啟動
ln -s /apps/nginx/sbin/nginx /usr/sbin/
#建立軟連線後直接 nginx啟動
##########停止###############
killall nginx
#複製同一版本的nginx的yum安裝生成的service檔案
vim /usr/lib/systemd/system/nginx.service
#建立檔案
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
#注意檔案位置,如果不對 啟動不了
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
#注意啟動檔案位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
#重新載入設定
systemctl enable --now nginx
#開機自啟並立即啟動 如果卡主是應為logs下有 nginx.pid 檔案 刪除即可
###如果需要修改pid檔案可以執行以下操作#################
mkdir /apps/nginx/run/
#建立目錄
vim /apps/nginx/conf/nginx.conf
#修改組態檔
pid /apps/nginx/run/nginx.pid;
#找到 pid的位置修改