Nginx是一個高性能的HTTP和反向代理服務器,也可以用作郵件代理服務器,其以占有內存少、并發能力強、穩定性高、豐富的功能集、低系統資源消耗而聞名。以下是對Nginx的詳細教程:
一、Nginx簡介
Nginx由俄羅斯人開發,第一個公開版本0.1.0發布于2004年10月4日。其源代碼以類BSD許可證的形式發布,特點是占有內存少、并發能力強,官方的并發量最高可達5w/s,在整個web應用程序的生產環境使用率中名列前茅。
二、Nginx的功能
- 負載均衡:Nginx支持多種負載均衡算法,如輪詢、最少連接、IP哈希等,可以靈活地分配流量至多個后端服務器,提高網站訪問速度和穩定性。
- 反向代理:Nginx中的反向代理是一個非常常見的功能,它可以作為客戶端和后端服務器之間的中介,將客戶端請求轉發到一個或多個后端服務器上,隱藏后端服務器的真實IP,提高網站安全性。
- Web服務器:Nginx可以高效處理靜態資源,如HTML、CSS、JS、圖片等,適合作為Web服務器。
- 動靜分離:動靜分離的基本思想是將靜態資源請求(如圖片、CSS、JS等)直接由Nginx處理,而將動態請求(如API調用、表單提交等)轉發給后端服務器處理。通過Nginx的動靜分離,可以減輕后端服務器的壓力,并更好地利用緩存,提高靜態資源的加載效率。
三、Nginx的安裝與配置
使用YUM包管理器安裝Nginx:
yum install -y nginx
使用APT包管理器安裝Nginx:
apt install -y nginx
源碼編譯安裝Nginx:
- 安裝編譯工具及庫文件
- 安裝GCC編譯器:GCC是一個開源的編譯器集合,用于處理各種各樣的語言,其中就包含了C語言。使用命令
yum install -y gcc
來安裝,安裝成功后,可以通過gcc --version
來查看是否安裝成功。 - 安裝PCRE庫:PCRE(Perl Compatible Regular Expression)兼容正則表達式庫,Nginx的Rewrite模塊和http核心模塊都會使用到PCRE正則表達式語法。使用命令
yum install -y pcre pcre-devel
來進行安裝,安裝成功后,可以通過rpm -qa pcre pcre-devel
來查看是否安裝成功。 - 安裝zlib庫:zlib庫提供了開發人員的壓縮算法,Nginx的各個模塊中需要使用gzip壓縮,所以也需要提前安裝zlib庫及源代碼zlib和zlib-devel。使用命令
yum install -y zlib zlib-devel
來進行安裝,安裝成功后,可以通過rpm -qa zlib zlib-devel
來查看是否安裝成功。 - 安裝OpenSSL庫:OpenSSL是一個開放源代碼的軟件庫包,應用程序可以使用這個包進行安全通信,并且避免被竊聽。在Nginx中,如果服務器需要提供安全網頁時就需要用到OpenSSL庫。使用命令
yum install -y openssl openssl-devel
來進行安裝,安裝成功后,可以通過rpm -qa openssl openssl-devel
來查看是否安裝成功。
- 安裝GCC編譯器:GCC是一個開源的編譯器集合,用于處理各種各樣的語言,其中就包含了C語言。使用命令
- Nginx的源碼安裝
- 進入Nginx官網查找需要下載版本的鏈接地址,然后使用wget命令進行下載。
- 解壓縮下載的安裝包。
- 進入安裝包目錄,執行
./configure
命令進行配置,指定Nginx的安裝路徑、模塊等。 - 執行
make
命令進行編譯。 - 執行
make install
命令進行安裝。 - 運行Nginx,可以通過命令
./nginx
啟動Nginx服務。
- Nginx的配置文件
- Nginx的配置文件通常位于
/etc/nginx/nginx.conf
,也可以通過Nginx安裝時的--conf-path
參數指定。 - 配置文件由多層塊組成,包括主配置塊、HTTP塊、Server塊和Location塊。
- 在配置文件中,可以設置Nginx的全局參數、HTTP相關的參數、虛擬主機的參數以及URL路徑的具體行為等。
- Nginx的配置文件通常位于
- Nginx的啟動、停止、重啟和狀態查看
- 啟動Nginx:使用命令
systemctl start nginx
或./nginx
(在Nginx的安裝目錄下)。 - 停止Nginx:使用命令
systemctl stop nginx
或./nginx -s quit
(在Nginx的安裝目錄下)。 - 重啟Nginx:使用命令
systemctl restart nginx
或./nginx -s reload
(在Nginx的安裝目錄下,實現平滑重啟)。 - 查看Nginx狀態:使用命令
systemctl status nginx
。
- 啟動Nginx:使用命令
更詳細源碼編譯教程可以參考linux—Nginx源碼安裝
四、Nginx的應用場景
- 靜態資源服務器:Nginx可以作為靜態資源服務器,用于加速圖片、CSS、JS等文件的上傳和下載。
- 負載均衡:Nginx可實現負載均衡,將請求分發到多臺后端服務器,提高網站訪問速度和穩定性。
- 反向代理:Nginx可作為反向代理服務器,隱藏后端服務器的真實IP地址,提高網站的安全性。
- 緩存加速:Nginx可通過緩存靜態資源,減少后端服務器的壓力,提高網站訪問速度。
五、Nginx的優缺點
- 優點
- 輕量級,相對Apache占用更少的資源。
- 因為Nginx是非阻塞異步網絡IO模型(epoll),高并發下能保持低資源低消耗,因此更適合做高并發(Apache采用的是select模型/線型輪詢)。
- 處理靜態網頁上表現的更好(簡單、占資源少)。
- 反向代理、負載均衡性能更強。
- 可對后端服務器進行健康狀態檢查。
- 支持網站緩存(加速網頁訪問)。
- 缺點
- 在處理動態請求時,性能可能不如Apache(動態請求會用到偽靜態,而Apache對rewrite支持的更好)。
- rewrite模塊沒有Apache完善。
六、搭配網站
1.在/etc/nginx/conf.d目錄下創建配置文件
vim /etc/nginx/conf.d/nginx.conf
2.添加下面代碼(根據自己需求修改)
# 定義一個server塊,用于配置一個虛擬主機(HTTP)
server {# 監聽80端口,這是HTTP協議的默認端口listen 80;# 設置虛擬主機的域名,這里是xxxx.comserver_name xxxx.com;# 重定向所有HTTP請求到HTTPSreturn 301 https://$host$request_uri;
}# 定義一個server塊,用于配置一個虛擬主機(HTTPS)
server {# 監聽443端口,這是HTTPS協議的默認端口listen 443 ssl;# 設置虛擬主機的域名,與HTTP部分相同server_name xxxx.com;# 指定SSL證書和私鑰文件的路徑ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;# 可選的:指定SSL證書鏈(如果您的證書由中間CA簽發)# ssl_trusted_certificate /path/to/your/chain.crt;# SSL會話參數配置ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;ssl_session_tickets off; # 對于舊版Nginx,可能需要設置為on以支持會話票據# 現代加密套件和協議配置ssl_protocols TLSv1.2 TLSv1.3; # 僅啟用TLS 1.2和1.3ssl_ciphers HIGH:!aNULL:!MD5; # 使用高強度的加密算法ssl_prefer_server_ciphers on; # 優先使用服務器端的加密算法配置# HSTS(HTTP Strict Transport Security)配置,強制瀏覽器使用HTTPSadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";# 指定靜態文件的根目錄root /home/www/dist;# 配置請求的路由處理location / {index index.html;try_files $uri $uri/ /index.html;}# 配置訪問日志access_log /var/log/nginx/xiao.com_access.log main;# 配置錯誤日志error_log /var/log/nginx/xiao.com_error.log error;# 配置錯誤頁面的處理error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}
}
3.檢查
nginx -t
4.重啟服務
systemctl reload nginx.service