文章目錄
- nginx.conf 是 Nginx 的主要配置文件,其中可以配置許多模塊來定義服務器行為。以下是一些常見的 Nginx 模塊以及它們的作用:
- 1. **`http` 模塊**:
- 2. **`server` 模塊**:
- 3. **`location` 模塊**:
- 4. **`events` 模塊**:
- 5. **`error_log` 模塊**:
- 6. **`access_log` 模塊**:
- 7. **`index` 模塊**:
- 8. **`proxy` 模塊**:
- 9. **`ssl` 模塊**:
- 10. **`gzip` 模塊**:
nginx.conf 是 Nginx 的主要配置文件,其中可以配置許多模塊來定義服務器行為。以下是一些常見的 Nginx 模塊以及它們的作用:
1. http
模塊:
http {# 全局配置
}
-
作用: 定義 HTTP 服務器的全局配置。
-
詳細解釋: 這個模塊包含了整個 HTTP 服務器的配置,包括全局性質的配置項,如日志、連接池大小等。
-
http 模塊是 Nginx 配置中的頂層模塊,用于配置 HTTP 服務器的全局設置。以下是一些常見的 http 模塊中的配置指令以及它們的作用:
-
include
指令:include /etc/nginx/conf.d/*.conf;
- 作用: 用于包含其他配置文件,使配置文件結構更模塊化和易于管理。
-
server_tokens
指令:server_tokens off;
- 作用: 控制服務器信息的顯示。設置為
off
可以禁用服務器信息的顯示,提高安全性。
- 作用: 控制服務器信息的顯示。設置為
-
sendfile
指令:sendfile on;
- 作用: 決定是否啟用系統調用
sendfile
來發送文件,可以提高文件傳輸效率。
- 作用: 決定是否啟用系統調用
-
tcp_nopush
指令:tcp_nopush on;
- 作用: 啟用或禁用 TCP 的
TCP_NOPUSH
選項。如果啟用,將在頭部發送完畢后立即發送數據,提高響應速度。
- 作用: 啟用或禁用 TCP 的
-
tcp_nodelay
指令:tcp_nodelay on;
- 作用: 啟用或禁用 TCP 的
TCP_NODELAY
選項。如果啟用,禁用 Nagle 算法,減小數據包的傳輸延遲。
- 作用: 啟用或禁用 TCP 的
-
keepalive_timeout
指令:keepalive_timeout 65;
- 作用: 設置客戶端與服務器保持連接的超時時間,單位為秒。超過這個時間,如果沒有新的請求進來,連接將被關閉。
-
client_max_body_size
指令:client_max_body_size 10m;
- 作用: 限制客戶端請求的最大請求體大小。用于防止惡意用戶發送大體積的請求。
-
gzip
指令:gzip on;
- 作用: 啟用或禁用對客戶端響應的內容進行 Gzip 壓縮,以減小傳輸的數據量。
-
gzip_types
指令:gzip_types text/plain application/xml;
- 作用: 指定需要進行 Gzip 壓縮的文件類型,這里是對文本和 XML 文件進行壓縮。
-
default_type
指令:default_type application/octet-stream;
- 作用: 設置默認的 MIME 類型,當無法從文件擴展名或內容中猜測出類型時使用。
這些是使用無序列表排列的 http
模塊中的一些常見配置指令。在實際使用中,根據服務器的需求和安全性要求,可以選擇啟用或禁用這些功能,并根據需要進行定制。
2. server
模塊:
- 作用: 配置虛擬主機,定義服務器的監聽地址和端口,以及服務器名稱等。
- 詳細解釋: 這個模塊用于定義一個虛擬主機,包括監聽的端口和服務器名稱等信息。
server
模塊是 Nginx 配置中的一個重要模塊,用于配置虛擬主機。以下是一些server
模塊中的常見配置指令及其作用,以及一些示例說明:
server {listen 80; # 監聽的端口號server_name example.com; # 服務器的域名或 IP 地址# 根路徑的配置location / {root /var/www/html; # 根目錄index index.html index.htm; # 默認文件索引}# 匹配 /images/ 路徑的配置location /images/ {alias /var/www/images/; # 別名,指定文件夾的實際路徑}# 反向代理配置location /app/ {proxy_pass http://backend_server; # 后端服務器的地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# SSL/TLS 配置listen 443 ssl; # 監聽 443 端口,并啟用 SSLssl_certificate /etc/nginx/ssl/cert.pem; # SSL 證書文件路徑ssl_certificate_key /etc/nginx/ssl/key.pem; # SSL 私鑰文件路徑# 其他 SSL/TLS 配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384';ssl_prefer_server_ciphers off;# 錯誤日志配置error_log /var/log/nginx/error.log error;# 訪問日志配置access_log /var/log/nginx/access.log;# 其他配置client_max_body_size 10m; # 最大請求體大小限制
}
-
listen
指令:- 作用: 配置監聽的端口和 IP 地址。
- 示例:
listen 80;
表示監聽 HTTP 請求的默認端口 80。
-
server_name
指令:- 作用: 配置服務器的域名或 IP 地址。
- 示例:
server_name example.com;
指定服務器響應來自example.com
的請求。
-
root
指令:- 作用: 指定服務器的根目錄,用于定位請求的靜態文件。
- 示例:
root /var/www/html;
設置服務器的根目錄為/var/www/html
。
-
index
指令:- 作用: 配置默認的文件索引順序。
- 示例:
index index.html index.htm;
指定在請求的目錄中查找的默認文件。
-
location
指令:- 作用: 配置不同 URL 路徑的處理規則。
- 示例:
上述示例指定根路徑location / {try_files $uri $uri/ =404; }
/
的處理規則,嘗試查找請求的文件,如果找不到則返回 404 錯誤。
-
error_page
指令:- 作用: 配置處理特定 HTTP 錯誤碼的頁面或重定向。
- 示例:
上述示例配置處理 500、502、503、504 錯誤碼,將請求重定向到error_page 500 502 503 504 /50x.html;
/50x.html
。
-
location = /50x.html
指令:- 作用: 配置精確匹配
/50x.html
路徑的處理規則。 - 示例:
上述示例配置處理請求精確匹配location = /50x.html {root /usr/share/nginx/html; }
/50x.html
路徑的情況,返回位于/usr/share/nginx/html
目錄下的文件。
- 作用: 配置精確匹配
-
access_log
指令:- 作用: 配置訪問日志的路徑。
- 示例:
access_log /var/log/nginx/example.access.log;
指定訪問日志的路徑。
-
error_log
指令:- 作用: 配置錯誤日志的路徑和級別。
- 示例:
error_log /var/log/nginx/example.error.log;
指定錯誤日志的路徑和級別。
3. location
模塊:
server {listen 80;location /images/ {# 前綴匹配,匹配以 /images/ 開頭的 URIalias /var/www/images/;# 示例 URI: /images/photo.jpg}location = /about {# 精確匹配 /aboutroot /var/www/html;index about.html;# 示例 URI: /about}location ~ \.php$ {# 正則表達式匹配,匹配以 .php 結尾的 URIinclude snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;# 示例 URI: /index.php}location ~* \.png$ {# 正則表達式不區分大小寫匹配,匹配以 .png 結尾的 URIroot /var/www/images/;# 示例 URI: /image.png}location ^~ /downloads/ {# 非正則表達式匹配,優先匹配以 /downloads/ 開頭的 URIalias /var/www/downloads/;# 示例 URI: /downloads/file.zip}location /files/ {# 包含特殊字符,匹配以 /files/ 開頭的 URIalias /var/www/files/;# 示例 URI: /files/document.pdf}location /docs {# 包含特殊字符,匹配以 /docs 開頭的 URItry_files $uri $uri/ /docs/index.html;# 示例 URI: /docs/manual/}location ~ ^/user/(?<username>[a-zA-Z0-9_-]+)/profile$ {# 命名捕獲組,匹配類似 /user/johndoe/profile 的 URI,并捕獲用戶名alias /var/www/profiles/$username/;# 示例 URI: /user/johndoe/profile}location / {# 包含 if 條件語句,根據條件匹配執行不同的配置if ($query_string ~ "param=value") {return 403;}# 默認配置,匹配任何 URIroot /var/www/default/;index index.html;# 示例 URI: /home}
}
-
作用: 定義不同 URL 路徑的配置,用于匹配請求的 URI。
-
詳細解釋:
location
模塊根據請求的 URI 進行匹配,并提供不同的配置,允許你對不同的 URL 路徑應用不同的設置。
當使用location
塊時,~
和^
是兩個常見的修飾符,它們用于指定正則表達式匹配的方式。以下是對它們的解釋說明: -
~
符號:location ~ \.php$ {# 正則表達式匹配,匹配以 .php 結尾的 URIinclude snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params; }
- 解釋:
~
用于指定一個區分大小寫的正則表達式匹配。在上面的例子中,該location
配置將匹配以.php
結尾的 URI,例如/index.php
。
- 解釋:
-
^
符號:location ^~ /downloads/ {# 非正則表達式匹配,優先匹配以 /downloads/ 開頭的 URIalias /var/www/downloads/; }
- 解釋:
^
用于指定一個非正則表達式的前綴匹配,該匹配會優先于其他正則表達式匹配。在上面的例子中,該location
配置將優先匹配以/downloads/
開頭的 URI。
使用這些符號時需要注意以下事項:
- 如果使用
~
進行正則表達式匹配,則匹配是區分大小寫的。 - 如果使用
^
進行前綴匹配,該匹配會優先于其他正則表達式匹配,即使其他正則表達式匹配更準確。
這樣的解釋有助于理解
location
塊中這些符號的作用,以及它們在正則表達式匹配中的不同用途。 - 解釋:
4. events
模塊:
events {# 配置與連接處理有關的參數worker_connections 1024; # 每個工作進程的最大連接數# 可選配置項# multi_accept on; # 同時接受多個新連接# use epoll; # 使用 epoll 事件模型# worker_connections 2048; # 可以在這里覆蓋全局的 worker_connections 設置
}
- 作用: 配置與連接處理有關的參數,如連接的超時時間等。
- 詳細解釋:
events
模塊用于配置與連接處理相關的參數,例如允許的最大連接數。
5. error_log
模塊:
http {# ... 其他 http 模塊配置# 配置錯誤日志的位置和級別error_log /var/log/nginx/error.log error;# 可選配置項# error_log /var/log/nginx/debug.log debug; # 同時記錄調試級別的日志# error_log syslog:server=127.0.0.1,facility=local7,tag=nginx,severity=info; # 將錯誤日志發送到 syslogserver {# ... 其他 server 模塊配置# 配置該虛擬主機的錯誤日志error_log /var/log/nginx/example.com_error.log warn;# 可選配置項# error_log /var/log/nginx/example.com_debug.log debug;}
}
- 作用: 配置錯誤日志的位置和級別。
- 詳細解釋:
error_log
模塊用于指定錯誤日志的路徑和級別,以便記錄服務器發生的錯誤。
6. access_log
模塊:
http {# ... 其他 http 模塊配置# 配置訪問日志的位置和格式access_log /var/log/nginx/access.log;# 可選配置項# access_log /var/log/nginx/access_debug.log debug; # 同時記錄調試級別的訪問日志# access_log syslog:server=127.0.0.1,facility=local7,tag=nginx,severity=info; # 將訪問日志發送到 syslogserver {# ... 其他 server 模塊配置# 配置該虛擬主機的訪問日志access_log /var/log/nginx/example.com_access.log;# 可選配置項# access_log /var/log/nginx/example.com_access_debug.log debug;}
}
- 作用: 配置訪問日志的位置和格式。
- 詳細解釋:
access_log
模塊用于指定訪問日志的路徑,記錄客戶端的訪問請求信息。
7. index
模塊:
http {# ... 其他 http 模塊配置# 指定默認的文件索引順序index index.html index.htm;# 可選配置項# index index.php; # 添加 index.php 到默認索引列表# index index.html index.htm default.html; # 自定義索引文件列表# index; # 禁用默認索引,不自動尋找索引文件
}
- 作用: 指定默認的文件索引順序。
- 詳細解釋:
index
模塊用于指定當客戶端請求一個目錄時,服務器應該尋找哪些文件作為默認索引文件。
8. proxy
模塊:
http {# ... 其他 http 模塊配置server {# ... 其他 server 模塊配置location / {# 反向代理配置proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# 可選配置項# location /app/ {# proxy_pass http://backend_server;# 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
模塊用于配置反向代理,將請求轉發給后端服務器,并將響應返回給客戶端。
9. ssl
模塊:
server {listen 443 ssl; # 監聽 443 端口,并啟用 SSL# SSL 證書和私鑰的配置ssl_certificate /etc/nginx/ssl/cert.pem; # SSL 證書文件路徑ssl_certificate_key /etc/nginx/ssl/key.pem; # SSL 私鑰文件路徑# 可選配置項# ssl_protocols TLSv1.2 TLSv1.3; # 指定支持的 SSL/TLS 協議版本# ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384'; # 指定加密算法# ssl_prefer_server_ciphers off; # 在客戶端和服務器之間選擇密碼套件時,使用服務器的順序server_name example.com; # 服務器的域名或 IP 地址# ... 其他 server 配置
}
- 作用: 配置 SSL/TLS 相關設置。
- 詳細解釋:
ssl
模塊用于配置支持 SSL/TLS 協議的服務器,包括證書和私鑰的指定等。
10. gzip
模塊:
http {# ... 其他 http 模塊配置server {# ... 其他 server 模塊配置# 啟用 Gzip 壓縮gzip on;# 可選配置項# gzip_types text/plain application/xml; # 指定需要進行 Gzip 壓縮的文件類型# gzip_min_length 1000; # 設置最小壓縮文件大小# gzip_proxied any; # 允許通過代理服務器進行壓縮# gzip_disable "MSIE [1-6]\."; # 禁用對特定 User-Agent 的壓縮location / {# ... 其他 location 配置# 關閉對特定 User-Agent 的壓縮gzip_disable "MSIE [1-6]\.";}}}
- 作用: 配置 Gzip 壓縮。
- 詳細解釋:
gzip
模塊用于啟用或禁用對客戶端響應的內容進行 Gzip 壓縮,以減小傳輸的數據量。