在Linux系統上使用Nginx的詳解指南

目錄

  1. 簡介

  2. 準備工作

  3. 安裝Nginx

    • 通過包管理器安裝

    • 源碼編譯安裝

  4. Nginx基礎配置

    • 主配置文件nginx.conf詳解

    • 基本服務器塊配置

  5. SSL/TLS配置

  6. 動靜分離

  7. 反向代理配置

  8. 負載均衡配置

  9. 常見問題及解決方法

  10. 結論

1. 簡介

Nginx是一款高性能HTTP和反向代理服務器,由Igor Sysoev編寫, 2004年首次公開發布。目前Nginx已發展為一個包含多項功能的高性能網絡服務器,得益于其事件驅動架構,使其在高并發下仍能保持低內存占用和高吞吐量的特點。

Nginx的優點

  • 高性能和高并發:采用異步非阻塞IO,可以處理大量并發連接。

  • 穩定性:在長期運行下也能保證穩定性和較低的內存消耗。

  • 簡單配置:模塊化的配置文件使得Nginx相對Apache更易于配置和管理。

  • 靈活性:支持HTTP、HTTPS、郵件代理等多種協議,同時擁有豐富的第三方模塊。

2. 準備工作

在安裝和配置Nginx之前,我們需要保證我們的Linux操作系統準備就緒:

  • 更新系統:確保你的系統中所有包都是最新版本。

  • 擁有root權限:安裝軟件和修改配置文件需要root權限。

假設我們在使用的是Ubuntu 20.04 LTS,首先更新系統包:


sudo apt update && sudo apt upgrade -y

切換到root用戶(如果需要):


sudo su

3. 安裝Nginx

通過包管理器安裝

對于大多數Linux發行版,Nginx都在官方的包管理器中提供。這種方式簡單快捷,也是推薦的安裝方法。

在Debian/Ubuntu上安裝

sudo apt install nginx -y
在CentOS/RedHat上安裝

首先啟用EPEL倉庫:


sudo yum install epel-release -y

然后安裝Nginx:


sudo yum install nginx -y

源碼編譯安裝

有時候,我們需要從源碼編譯Nginx,以便定制或優化某些特性。以下是源碼編譯的步驟:

  1. 安裝依賴工具

sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y
  1. 下載Nginx源碼包

wget http://nginx.org/download/nginx-1.21.4.tar.gztar -zxvf nginx-1.21.4.tar.gzcd nginx-1.21.4
  1. 配置編譯選項,編譯并安裝

./configure --prefix=/usr/local/nginx --with-http_ssl_modulemakesudo make install
  1. 啟動Nginx

sudo /usr/local/nginx/sbin/nginx

4. Nginx基礎配置

Nginx的配置文件通常位于/etc/nginx目錄下。在這個目錄中,主配置文件是nginx.conf

主配置文件nginx.conf詳解

下面是nginx.conf的基礎結構和解讀:


user www-data;worker_processes auto;pid /run/nginx.pid;events {worker_connections 1024;}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;}
  • user: 定義Nginx服務以什么用戶身份運行。

  • worker_processes: 定義工作進程的數量,通常設為自動。

  • events: 配置事件驅動模型,如最大連接數。

  • http: HTTP服務器配置,包括日志格式、文件類型、連接參數等。

基本服務器塊配置

服務器塊(Server Block)是Nginx配置文件中的一個重要組成部分,定義了一個虛擬主機的相關配置。一個簡單的服務器塊示例:


server {listen 80;server_name example.com;location / {root /var/www/html;index index.html index.htm;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
  • listen: 定義監聽端口。

  • server_name: 定義虛擬主機名。

  • location: 定義URL路徑匹配規則。

  • root: 設置根目錄。

  • index: 定義默認首頁文件名。

5. SSL/TLS配置

為網站啟用SSL/TLS可以提高網站的安全性。以下是配置SSL/TLS的方法:

1. 獲取SSL證書

可以通過Let’s Encrypt免費獲取SSL證書。首先,安裝Certbot:


sudo apt install certbot python3-certbot-nginx -y

2. 獲取證書并自動配置Nginx:


sudo certbot --nginx -d example.com -d www.example.com

按照提示完成驗證和證書安裝。

3. 手動配置SSL:

如果你已經有了證書,則可以手動配置:


server {listen 443 ssl;server_name example.com;ssl_certificate /etc/ssl/certs/cert.pem;ssl_certificate_key /etc/ssl/private/key.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {root /var/www/html;index index.html index.htm;}}

6. 動靜分離

動靜分離是提升服務器性能的重要手段之一。Nginx可以直接處理靜態資源請求,減輕后端服務器的負擔,只將動態請求交給后端處理。以下是配置示例:


server {listen 80;server_name example.com;root /var/www/html;index index.php index.html index.htm;location / {try_files $uri $uri/ =404;}location ~ \.php$ {fastcgi_pass unix:/run/php/php7.4-fpm.sock;include snippets/fastcgi-php.conf;}location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 7d;}}
  • try_files: 嘗試訪問文件或目錄,如果不存在則返回404。

  • fastcgi_pass: 將PHP請求交由PHP-FPM處理。

  • location ~*: 用正則表達式匹配靜態文件,并設置緩存時間。

7. 反向代理配置

反向代理是Nginx的核心功能之一,常用于負載均衡、應用加速等場景。


server {listen 80;server_name example.com;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
  • proxy_pass: 定義后端服務器地址。

  • proxy_set_header: 設置額外的HTTP頭,用于傳遞客戶端請求信息。

8. 負載均衡配置

Nginx可以通過輪詢、最少連接、IP哈希等多種方式進行負載均衡:


http {upstream backend {server backend1.example.com;server backend2.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}}
  • upstream: 定義后端服務器組。

  • server: 在HTTP上下文中定義,引用后端服務器組。

9. 常見問題及解決方法

即使配置正確,有時仍會遇到一些問題,以下是一些常見問題及解決方法:

1. Nginx服務啟動失敗

檢查配置文件是否有語法錯誤:


sudo nginx -t

檢查日志文件獲取錯誤信息:


sudo tail -f /var/log/nginx/error.log

2. 403 Forbidden錯誤

確保目錄和文件的權限正確:


sudo chown -R www-data:www-data /var/www/htmlsudo chmod -R 755 /var/www/html

3. 502 Bad Gateway錯誤

確保后端服務器正常運行,并且Nginx到后端服務器的連接配置正確。

4. SSL證書問題

如果證書配置錯誤或過期,會導致SSL握手失敗,可以通過以下命令檢查SSL配置:


sudo openssl s_client -connect example.com:443

10. 結論

Nginx作為一款高效的HTTP和反向代理服務器,其廣泛的應用和強大的性能使其在現代網絡架構中占有一席之地。通過本文的介紹,相信你已經對Nginx的安裝、基礎配置、SSL/TLS、動靜分離、反向代理及負載均衡有了比較全面的了解。希望這些內容能幫助你更好地管理和優化你的網站。

如果你有更多的需求,Nginx還提供了豐富的模塊和高級配置,鼓勵你深入探索其更多功能和應用場景。Happy Learning!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17449.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上位機圖像處理和嵌入式模塊部署(f103 mcu唯一的id)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】 對于stm32f103系列mcu來說,一般每一顆原廠的mcu,都會對應一個唯一的id。那這個id可以用來做什么用呢?個人認為,可以用來做激活使用。舉個例子,第一次mcu模塊使用的時候,一般可…

Java 零基礎入門學習(小白也能看懂!)

📚博客主頁:愛敲代碼的小楊. ?專欄:《Java SE語法》 | 《數據結構與算法》 | 《C生萬物》 |《MySQL探索之旅》 |《Web世界探險家》 ??感謝大家點贊👍🏻收藏?評論?🏻,您的三連就是我持續更…

第16篇:JTAG UART IP應用<三>

Q:如何通過HAL API函數庫訪問JTAG UART? A:Quartus硬件工程以及Platform Designer系統也和第一個Nios II工程--Hello_World的Quartus硬件工程一樣。 Nios II軟件工程對應的C程序調用HAL API函數,如open用于打開和創建文件&#…

前端最新面試題(ES6模塊篇)

目錄 1 ES5、ES6和ES2015有什么區別? 2 babel是什么,有什么作用? 3 let有什么用,有了var為什么還要用let? 4 舉一些ES6對String字符串類型做的常用升級優化? 5 舉一些ES6對Array數組類型做的常用升級優化 6 舉一些ES6對Number數字類型做的常用升級優化 7 舉一些ES…

前端基礎入門三大核心之JS篇:JavaScript,不只是咖啡因那么簡單!—— 進階案例集錦篇

前端基礎入門三大核心之JS篇:解鎖JavaScript的魔法密鑰—— 進階案例集錦 🧙 基礎概念與作用:JS,不僅僅是“腳本”📚 變量聲明的進化史 🔍 多維度功能使用:函數、數組與對象🤖 函數&…

前后端聯調小細節

前端向后端發數據,有時候前端和后端的字段是一樣的,字段沒有問題,前端發過來的載荷也沒有問題,但后端接收到的字段是null的,這時候可以排查前端發過來的數據是不是多嵌套了一層,比如發過來的是。 實例如下…

使用YOLOv9訓練和測試自己的數據集

任務:檢測舌頭上的裂紋和齒痕 已經有了labelme標注的數據集,并且轉為了coco格式 參考: 詳細!正確!COCO數據集(.json)訓練格式轉換成YOLO格式(.txt)_coco數據集的train…

服務器數據恢復—服務器raid常見故障表現原因解決方案

RAID(磁盤陣列)是一種將多塊物理硬盤整合成一個虛擬存儲的技術,raid模塊相當于一個存儲管理的中間層,上層接收并執行操作系統及文件系統的數據讀寫指令,下層管理數據在各個物理硬盤上的存儲及讀寫。相對于單獨的物理硬…

2023年全國青少年人工智能創新挑戰賽真題

為了大家備考2024年第七屆全國青少年人工智能創新挑戰賽,今天分享2023年第6屆全國青少年人工智能創新挑戰賽C信息學專項真題,圖形化編程及Python編程基本大同小異,參考6547網的Python及圖形化編程題庫。 一、單項選擇題(共 15 題,每題 2 分,共…

jpom linux發布前端 ruoyi

前置條件 輔助安裝 一鍵安裝maven curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一鍵安裝node curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 服務下載啟動 下載安裝 安裝服務 安裝服…

vscode中使用conda虛擬環境

每一次配置環境,真的巨煩,網上的資料一堆還得一個個嘗試,遂進行整理 1.準備安裝好Anaconda 附帶一篇測試教程,安裝anaconda 2.準備安裝vscode 安裝地址:Visual Studio Code 3.創建Conda環境 搜索框搜索Anaconda…

位運算符——原碼-反碼-補碼(重點 難點)【二進制在運算中的說明】

如果連二進制的知識還沒搞懂, 那么計算機最基礎的你都還沒明白, 所以2進制對我們程序員來說, 是必會, 必學的知識 二進制在運算中的說明: 一. 二進制是逢2進位的進位制, 0,1是基本算符 二. 現代的電子計算機技術全部采用的是二進制, 因為它只使用0, 1兩個數字符號,非常簡單…

Nginx添加訪問密碼

安裝密碼生成工具 yum -y install httpd-tools生成用戶和密碼文件 [rootlocalhost nginx]# htpasswd -c /usr/local/nginx/password web01 New password: 這里輸入密碼 Re-type new password: 再次輸入密碼 Adding password for user web01參數說明: web01 是自定…

文章解讀與仿真程序復現思路——電力自動化設備EI\CSCD\北大核心《計及液態空氣儲能與綜合需求響應的綜合能源系統低碳經濟調度》

本專欄欄目提供文章與程序復現思路,具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

HTML靜態網頁成品作業(HTML+CSS)——游戲陰陽師介紹網頁(4個頁面)

🎉不定期分享源碼,關注不丟失哦 文章目錄 一、作品介紹二、作品演示三、代碼目錄四、網站代碼HTML部分代碼 五、源碼獲取 一、作品介紹 🏷?本套采用HTMLCSS,未使用Javacsript代碼,共有4個頁面。 二、作品演示 三、代…

Android ANR簡介

ANR(App not respond)是Android定義的一種穩定性問題類型;系統發出關鍵消息,同時發出此消息的超時消息。處理邏輯有兩種情況: 關鍵消息被執行,超時消息被清除;ANR不會發生超時消息被執行&#x…

JAVASE2

封裝的步驟: 1、所有屬性私有化,使用private關鍵字進行修飾,private表示私有的,修飾的所有數據只能在本類中訪問 2、對外提供簡單入口:比如說被private修飾的成員變量,在其他類中只能通過getXxx/setXxx方法…

網絡風暴:揭秘DDoS攻擊的幕后黑手

在數字化時代的浪潮中,網絡攻擊已成為一種新型的戰爭手段。其中,分布式拒絕服務攻擊(DDoS)以其強大的破壞力和隱蔽性,成為網絡安全領域的一大挑戰。DDoS攻擊通過發動海量的惡意流量,如同狂風暴雨般席卷目標…

如何設置遠程桌面連接?

遠程桌面連接是一種方便快捷的遠程訪問工具,可以幫助用戶在不同地區間快速組建局域網,解決復雜網絡環境下的遠程連接問題。本文將針對使用遠程桌面連接的操作步驟進行詳細介紹,以幫助大家快速上手。 步驟一:下載并安裝遠程桌面連接…

芯片絲印反查

芯片絲印反查網 - IC芯片絲印,IC芯片代碼,IC芯片印字,IC芯片頂標,SMD code,marking code,top mark芯查查-電子信息產業數據引擎 ic/芯片絲印反查網-芯查查