Nginx配置文件全解:從入門到設計

Nginx配置文件全解:從入門到架構設計

1. Nginx配置文件基礎

Nginx的主配置文件通常位于/etc/nginx/nginx.conf?。配置文件使用簡單的文本格式,由指令和指令塊組成。

1.1 基本語法規則

  • 每個指令以分號(;)結束
  • 指令塊用大括號({})包圍
  • 配置文件支持使用#添加注釋

1.2 基本結構

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/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;keepalive_timeout 65;include /etc/nginx/conf.d/*.conf;
}

2. 主要配置塊

2.1 全局塊

位于配置文件最頂層的指令,影響Nginx的全局行為。

主要指令:

  • ?user?: 指定Nginx worker進程的用戶
  • ?worker_processes?: 指定Nginx worker進程的數量
  • ?error_log?: 指定錯誤日志的位置和級別
  • ?pid?: 指定存儲主進程ID的文件位置

2.2 events塊

配置影響Nginx處理連接的指令。

主要指令:

  • ?worker_connections?: 指定每個worker進程的最大連接數
  • ?use?: 指定使用的事件模型(如epoll, kqueue等)

2.3 http塊

包含HTTP服務器相關的配置。

主要指令:

  • ?include?: 引入其他配置文件
  • ?default_type?: 指定默認MIME類型
  • ?log_format?: 定義日志格式
  • ?access_log?: 指定訪問日志的位置和格式

3. HTTP服務器配置

在http塊內,可以定義一個或多個server塊,每個代表一個虛擬主機。

http {server {listen 80;server_name example.com;root /var/www/example.com;index index.html;location / {try_files $uri $uri/ =404;}}
}

主要指令:

  • ?listen?: 指定服務器監聽的IP地址和端口
  • ?server_name?: 指定服務器名稱(域名)
  • ?root?: 指定網站根目錄
  • ?index?: 指定默認索引文件

4. Location塊詳解

Location塊用于匹配特定的URI請求。

location / {try_files $uri $uri/ /index.php?$query_string;
}location ~* \.(jpg|jpeg|png|gif)$ {expires 30d;
}

匹配規則:

  • ?=?: 精確匹配
  • ?^~?: 優先級最高的前綴匹配
  • ?~?: 區分大小寫的正則匹配
  • ?~*?: 不區分大小寫的正則匹配
  • ?/?: 通用前綴匹配

主要指令:

  • ?try_files?: 按順序檢查文件是否存在
  • ?rewrite?: 重寫URL
  • ?return?: 返回特定的HTTP狀態碼

5. 反向代理和負載均衡

Nginx可以作為反向代理服務器和負載均衡器。

5.1 反向代理配置

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;}
}

5.2 負載均衡配置

upstream backend {server backend1.example.com weight=3;server backend2.example.com;server backend3.example.com;
}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}
}

負載均衡算法:

  • 輪詢(默認)
  • 權重
  • ip_hash
  • least_conn

6. HTTPS和SSL/TLS配置

配置HTTPS需要SSL/TLS證書。以下是一個基本的HTTPS服務器配置:

server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/certificate.crt;ssl_certificate_key /path/to/certificate.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;# ... 其他配置 ...
}

主要指令:

  • ?ssl_certificate?: 指定SSL證書文件路徑
  • ?ssl_certificate_key?: 指定SSL證書私鑰文件路徑
  • ?ssl_protocols?: 指定支持的SSL/TLS協議版本
  • ?ssl_ciphers?: 指定支持的加密算法

7. 性能優化配置

7.1 啟用Gzip壓縮

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

7.2 配置緩存

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, no-transform";
}

7.3 啟用FastCGI緩存

fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {# ...location ~ \.php$ {fastcgi_cache my_cache;fastcgi_cache_valid 200 60m;# ... 其他FastCGI配置 ...}
}

8. 安全性配置

8.1 隱藏Nginx版本信息

server_tokens off;

8.2 配置X-Frame-Options防止點擊劫持

add_header X-Frame-Options "SAMEORIGIN";

8.3 配置內容安全策略(CSP)

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";

9. 高級功能和模塊

9.1 HTTP/2支持

server {listen 443 ssl http2;# ... 其他配置 ...
}

9.2 WebSocket支持

location /wsapp/ {proxy_pass http://wsbackend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}

9.3 動態模塊

Nginx支持動態加載模塊,可以在運行時啟用或禁用某些功能。

load_module modules/ngx_http_image_filter_module.so;

10. 最佳實踐和架構設計

10.1 模塊化配置

將配置文件分割成多個小文件,便于管理和維護。

http {include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

10.2 使用環境變量

使用環境變量可以使配置更加靈活,適應不同的部署環境。

server {server_name ${NGINX_SERVER_NAME};root ${NGINX_DOC_ROOT};# ... 其他配置 ...
}

10.3 多階段架構設計

對于大型項目,可以采用多階段的Nginx架構:

  1. 前端負載均衡層
  2. 應用層
  3. 靜態資源層
  4. 后端服務層
客戶端
前端負載均衡Nginx
應用Nginx 1
應用Nginx 2
靜態資源Nginx
后端服務1
后端服務2

這種架構可以提供更好的擴展性和性能。

10.4 監控和日志

配置適當的監控和日志對于維護高可用性系統至關重要。

log_format detailed_log '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''$request_time $upstream_response_time $pipe';access_log /var/log/nginx/detailed_access.log detailed_log;

結合工具如ELK棧(Elasticsearch, Logstash, Kibana)可以更好地分析和可視化日志數據。

結語

Nginx的配置文件是一個強大而靈活的工具,掌握它可以讓你構建高性能、安全和可擴展的Web應用架構。本指南涵蓋了從基礎到高級的多個方面,但Nginx的功能遠不止于此。持續學習和實踐是成為Nginx配置專家的關鍵。

希望這個全面的指南能幫助你更好地理解和使用Nginx配置文件。如果你有任何問題或需要進一步的說明,請隨時詢問!

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

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

相關文章

多方SQL計算場景下,如何達成雙方共識,確認多方計算作業的安全性

安全多方計算在SQL場景下的限制 隨著MPC、隱私計算等概念的流行, 諸多政府機構、金融企業開始考慮參與到多方計算的場景中, 擴展數據的應用價值。 以下面這個場景為例, 銀行可能希望獲取水電局和稅務局的數據,來綜合計算得到各…

DolphinScheduler-3.1.9 資源中心實踐

前言 目前DolphinScheduler最新的穩定版本是 3.1.9 ,基于此做些探索,逐漸深化學習路徑,以便于加深理解。 3.2.1 是最新的版本。目前的穩定版本是 3.1.9 基礎環境:Hadoop3.3, Java 8, Python3, MacOS14.2.1 一、本地偽分布式安裝…

學習筆記——動態路由——IS-IS中間系統到中間系統(開銷)

四、IS-IS開銷 1、IS-IS 開銷簡介 在IS-IS協議剛面世時,互聯網網絡結構還非常簡單,因此IS-IS早期的版本中只使用了6bit來描述鏈路開銷,鏈路開銷的取值范圍是1-63。一條路由的開銷范圍只有10bit,取值范圍是0-1023。 隨著計…

前端實現無縫自動滾動動畫

1. 前言: 前端使用HTMLCSS實現一個無縫滾動的列表效果 示例圖: 2. 源碼 html部分源碼: <!--* Author: wangZhiyu <w3209605851163.com>* Date: 2024-07-05 23:33:20* LastEditTime: 2024-07-05 23:49:09* LastEditors: wangZhiyu <w3209605851163.com>* File…

【ubuntu】安裝(升級)顯卡驅動,黑屏|雙屏無法使用問題解決方法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 ubuntu 安裝(升級)顯卡驅動&#xff0c;黑屏|雙屏無法使用問題解決方法 由于項目需要&#xff0c;對顯卡驅動進行升級。升級完就黑屏。。。。&#xff0…

Fast R-CNN(論文閱讀)

論文名&#xff1a;Fast R-CNN 論文作者&#xff1a;Ross Girshick 期刊/會議名&#xff1a;ICCV 2015 發表時間&#xff1a;2015-9 ?論文地址&#xff1a;https://arxiv.org/pdf/1504.08083 源碼&#xff1a;https://github.com/rbgirshick/fast-rcnn 摘要 這篇論文提出了一…

WordPress禁止用戶注冊某些用戶名

不管在任何網站&#xff0c;用戶注冊時都有一個屏蔽非法關鍵詞&#xff0c;就是禁止注冊某些用戶名&#xff0c;原因是因為防止用戶使用一些特定的用戶名&#xff0c;例如管理員、官方等用戶名&#xff0c;還有就是那些攻擊性的詞語了。 加網站添加了屏蔽非法關鍵詞&#xff0…

BAT-致敬精簡

什么是bat bat是windows的批處理程序&#xff0c;可以批量完成一些操作&#xff0c;方便快速。 往往我們可以出通過 winR鍵來打開指令窗口&#xff0c;這里輸入的就是bat指令 這里就是bat界面 節約時間就是珍愛生命--你能想象以下2分鐘的操作&#xff0c;bat只需要1秒鐘 我…

考慮數據庫粒度的設計-提升效率

目錄 概要 場景 設計思路 小結 概要 公開的資料顯示&#xff0c;數據庫粒度是&#xff1a;“在數據庫領域&#xff0c;特別是數據倉庫的設計中&#xff0c;粒度是一個核心概念&#xff0c;它直接影響到數據分析的準確性和存儲效率。粒度的設定涉及到數據的詳細程度和精度&…

【JVM基礎篇】Java的四種垃圾回收算法介紹

文章目錄 垃圾回收算法垃圾回收算法的歷史和分類垃圾回收算法的評價標準標記清除算法優缺點 復制算法優缺點 標記整理算法&#xff08;標記壓縮算法&#xff09;優缺點 分代垃圾回收算法&#xff08;常用&#xff09;JVM參數設置使用Arthas查看內存分區垃圾回收執行流程分代GC算…

【SpringBoot】IDEA查看spring bean的依賴關系

前因&#xff1a;在研究springcloud config組件時&#xff0c;我發現config-server包下的EnvironmentController可以響應客戶端的請求&#xff0c;但EnvironmentController并不在啟動類所在的包路徑下&#xff0c;所以我推測它是作為某個Bean方法在生效&#xff0c;尋找bean的依…

vue-router 源碼分析——9.別名

這是對vue-router 3 版本的源碼分析。 本次分析會按以下方法進行&#xff1a; 按官網的使用文檔順序&#xff0c;圍繞著某一功能點進行分析。這樣不僅能學習優秀的項目源碼&#xff0c;更能加深對項目的某個功能是如何實現的理解。這個對自己的技能提升&#xff0c;甚至面試時…

DAY1: 實習前期準備

文章目錄 VS Code安裝的插件C/CCMakeGitHub CopilotRemote-SSH收獲 VS Code 下載鏈接&#xff1a;https://code.visualstudio.com 安裝的插件 C/C 是什么&#xff1a;C/C IntelliSense, debugging, and code browsing. 為什么&#xff1a;初步了解如何在VS Code里使用C輸出…

https創建證書

需要下載httpd模塊&#xff1a;yum install httpd -y 前提需要先搭建一個虛擬主機來測試證書創建的效果&#xff0c;以下面www.hehe.com為例&#xff0c;可以參考創建&#xff1a; [rootlocalhost conf.d]# vim vhost.conf <directory /www> allowoverride none requi…

關于小愛同學自定義指令執行

1.前言 之前買了小愛同學音響&#xff0c;一直想讓其讓我的生活變得更智能&#xff0c;編寫一些程序來完成一些自動化任務&#xff0c;但是經過搜索發現&#xff0c;官方開發者平臺不能用了&#xff0c;尋找api階段浪費了我很長時間。最后在github 開源項目發現了倆個比較關鍵…

13.SQL注入-寬字節

SQL注入-寬字節 含義&#xff1a; MySQL是用的PHP語言&#xff0c;然后PHP有addslashes()等函數&#xff0c;這類函數會自動過濾 ’ ‘’ null 等這些敏感字符&#xff0c;將它們轉義成’ ‘’ \null&#xff1b;然后寬字節字符集比如GBK它會自動把兩個字節的字符識別為一個漢…

內容營銷專家劉鑫煒:網站排名需考慮哪些SEO優化技巧?

網站排名的SEO優化技巧包括&#xff1a; 1. 關鍵詞研究&#xff1a;了解目標受眾的搜索關鍵詞&#xff0c;將這些關鍵詞合理地應用在網站的標題、描述、正文和標簽中&#xff0c;有助于提高網站排名。 2. 內容優化&#xff1a;創建高質量、有價值的內容&#xff0c;可以吸引搜…

Qt源碼解析之QObject

省去大部分virtual和public方法后&#xff0c;Qobject主要剩下以下成員&#xff1a; //qobject.h class Q_CORE_EXPORT Qobject{Q_OBJECTQ_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged)Q_DECLARE_PRIVATE(QObject) public:Q_I…

STM32-OC輸出比較和PWM

本內容基于江協科技STM32視頻內容&#xff0c;整理而得。 文章目錄 1. OC輸出比較和PWM1.1 OC輸出比較1.2 PWM&#xff08;脈沖寬度調制&#xff09;1.3 輸出比較通道&#xff08;高級&#xff09;1.4 輸出比較通道&#xff08;通用&#xff09;1.5 輸出比較模式1.6 PWM基本結…

MATLAB常用語句總結7

MATLAB總結7&#xff1a;常見錯誤歸納 本篇專門用于記錄一些應試技巧 文章目錄 MATLAB總結7&#xff1a;常見錯誤歸納前言一、一些小定義和小技巧二、蒙塔卡羅求解方法1.函數的定義2.函數引用3.代碼量較少的蒙塔卡羅 三、函數引用與多變量四、矩陣引用五、非線性函數&#xff…