Nginx的配置文件結(jié)構(gòu)和各種配置指令
Nginx(“engine x”)是一款高性能的Web服務(wù)器和反向代理服務(wù)器,它采用事件驅(qū)動的異步結(jié)構(gòu),具有內(nèi)存占用少、穩(wěn)定性高、能夠處理大量的并發(fā)請求,具有高效和低資源消耗等特點。 Nginx常常被用作Web服務(wù)器、負(fù)載均衡器、反向代理和緩存服務(wù)器等。本文將詳細(xì)介紹 Nginx 的配置文件結(jié)構(gòu)和各種配置指令,幫助你理解和正確配置 Nginx 服務(wù)器。
1. Nginx 配置文件的位置和結(jié)構(gòu)
在大多數(shù) Linux 發(fā)行版中,Nginx 的配置文件位于 /etc/nginx 目錄下,主要有以下幾個文件和目錄:
nginx.conf:主配置文件,包含全局的配置指令和引入其他配置文件的指令。
conf.d:配置文件目錄,用于存放分散的配置片段,以 .conf 結(jié)尾。
sites-available:虛擬主機配置文件目錄,用于存放每個虛擬主機的配置文件。
sites-enabled:啟用的虛擬主機配置文件目錄的符號鏈接,通過鏈接到 sites-available 下的配置文件來啟用虛擬主機。
Nginx 的配置文件采用了基于塊的結(jié)構(gòu),使用大括號 {} 來表示塊的開始和結(jié)束。下面是一個簡單的 nginx.conf 示例:
worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; server { listen 80; server_name example.com; root /var/www/html; location / { index index.html; } } }
配置文件的結(jié)構(gòu)分為全局塊、events 塊和 http 塊。全局塊包含了全局的配置指令,events 塊用于配置與連接處理相關(guān)的參數(shù),http 塊則包含了 HTTP 服務(wù)器的配置。
2. 常用的全局配置指令
2.1 worker_processes
worker_processes 指定了 Nginx 啟動的 worker 進(jìn)程數(shù)量,一般設(shè)置為 auto,表示根據(jù) CPU 核心數(shù)量自動分配。
2.2 events
events 塊用于配置與連接處理相關(guān)的參數(shù),常用的配置指令包括:
worker_connections:指定每個 worker 進(jìn)程的最大連接數(shù)。
multi_accept:啟用一次性接受多個連接。
2.3 http
http 塊用于配置 HTTP 服務(wù)器的相關(guān)參數(shù),常用的配置指令包括:
include:引入其他配置文件,可以使用通配符 *。
default_type:設(shè)置默認(rèn)的 MIME 類型。
access_log:指定訪問日志文件的路徑和格式。
error_log:指定錯誤日志文件的路徑和級別。
3. 虛擬主機配置
Nginx 支持虛擬主機,允許在單個服務(wù)器上運行多個網(wǎng)站。每個虛擬主機都有自己的配置文件,存放在 sites-available 目錄下,并通過符號鏈接啟用。
下面是一個虛擬主機配置的示例:
server { listen 80; server_name example.com; root /var/www/example; location / { index index.html; } location /images/ { alias /var/www/images/; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
在虛擬主機配置中,常用的指令包括:
listen:指定監(jiān)聽的端口和 IP 地址。
server_name:指定虛擬主機的域名。
root:指定網(wǎng)站的根目錄。
location:用于匹配 URL,并指定相應(yīng)的處理規(guī)則。
4. URL 匹配和重定向
Nginx 的 URL 匹配功能非常強大,可以根據(jù)不同的 URL 進(jìn)行不同的處理。下面是一些常見的 URL 匹配和重定向配置示例:
location / { index index.html; } location /blog/ { alias /var/www/blog/; } location ~ ^/user/(\d+)/profile$ { rewrite ^/user/(\d+)/profile$ /profile.php?id=$1 last; } location = /about { return 301 /about-us; } location ~* \.(jpg|jpeg|png|gif)$ { expires 1d; }
在上面的示例中,我們使用了不同的 location 指令來匹配不同的 URL,并指定相應(yīng)的處理規(guī)則。其中:
location / 匹配根路徑,指定了默認(rèn)的索引文件為 index.html。
location /blog/ 匹配以 /blog/ 開頭的 URL,使用 alias 指令指定了對應(yīng)的文件目錄。
location ~ ^/user/(\d+)/profile$ 使用正則表達(dá)式匹配類似 /user/123/profile 的 URL,并使用 rewrite 指令將 URL 重定向到 /profile.php?id=$1。
location = /about 匹配完全相等的 URL /about,并使用 return 指令將請求重定向到 /about-us。
location ~* \.(jpg|jpeg|png|gif)$ 使用正則表達(dá)式匹配以 .jpg、.jpeg、.png 或 .gif 結(jié)尾的 URL,并使用 expires 指令設(shè)置緩存過期時間。
5. 反向代理和負(fù)載均衡
Nginx 作為反向代理服務(wù)器,可以將請求轉(zhuǎn)發(fā)給后端服務(wù)器,并支持負(fù)載均衡。下面是一個反向代理和負(fù)載均衡的配置示例:
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; } } }
在上面的示例中,我們使用 upstream 指令定義了后端服務(wù)器的列表。在 server 塊中,使用 proxy_pass 指令將請求轉(zhuǎn)發(fā)給后端服務(wù)器,并使用 proxy_set_header 指令設(shè)置請求頭。
6. HTTPS 配置
Nginx 支持 HTTPS,可以通過配置 SSL 證書來啟用加密連接。下面是一個簡單的 HTTPS 配置示例:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; location / { root /var/www/html; index index.html; } }
在上面的示例中,我們使用 listen 指令指定了監(jiān)聽的端口為 443,并使用 ssl 參數(shù)啟用 SSL。使用 ssl_certificate 和 ssl_certificate_key 指令指定了 SSL 證書和私鑰的路徑。
7. 配置文件的測試和重載
在修改 Nginx 配置文件后,可以使用以下命令進(jìn)行測試和重載配置:
nginx -t:測試配置文件的語法是否正確。
nginx -s reload:重載配置文件,不中斷正在處理的連接。
8. 動態(tài)模塊和靜態(tài)模塊
Nginx 支持動態(tài)模塊和靜態(tài)模塊的加載。靜態(tài)模塊是在編譯時與 Nginx 一起構(gòu)建的,而動態(tài)模塊是在運行時加載的??梢酝ㄟ^以下方式來加載模塊:
靜態(tài)模塊:在編譯 Nginx 時,使用 --with 參數(shù)指定需要包含的模塊。
動態(tài)模塊:在 nginx.conf 中使用 load_module 指令加載模塊。
例如,要加載 ngx_http_geoip_module 模塊,可以在 http 塊中添加以下配置:
load_module modules/ngx_http_geoip_module.so;
9. Gzip 壓縮
Nginx 支持使用 Gzip 壓縮來減小傳輸?shù)臄?shù)據(jù)量,提高性能??梢允褂靡韵屡渲脕韱⒂?Gzip 壓縮:
http { gzip on; gzip_types text/plain text/css application/json; }
在上面的示例中,gzip on; 啟用了 Gzip 壓縮功能,gzip_types 指定了需要進(jìn)行壓縮的 MIME 類型。
10. 緩存
Nginx 可以通過緩存來提高響應(yīng)速度和減輕后端服務(wù)器的負(fù)載??梢允褂靡韵屡渲脕韱⒂镁彺妫?/p>
http { proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m; server { location / { proxy_cache my_cache; proxy_cache_valid 200 304 10m; proxy_cache_valid any 1m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; } } }
在上面的示例中,proxy_cache_path 指定了緩存路徑和容量,proxy_cache 啟用了緩存,proxy_cache_valid 設(shè)置了緩存的有效期,proxy_cache_use_stale 指定了在后端服務(wù)器不可用時使用過期的緩存。
11. 日志記錄
Nginx 提供了靈活的日志記錄功能,可以記錄訪問日志、錯誤日志和其他自定義日志。以下是一些常見的日志記錄配置示例:
http { access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; server { access_log /var/log/nginx/example.access.log; error_log /var/log/nginx/example.error.log; location / { log_format custom_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; access_log /var/log/nginx/example.custom.log custom_format; } } }
在上面的示例中,使用 access_log 和 error_log 指令分別設(shè)置了默認(rèn)的訪問日志和錯誤日志路徑。在特定的 server 塊中,可以使用不同的日志路徑和自定義日志格式。
12. 安全性配置
Nginx 提供了一些安全性配置指令,以增強服務(wù)器的安全性。以下是一些常見的安全性配置示例:
http { server_tokens off; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block"; server { location / { deny 192.168.1.1; allow 192.168.1.0/24; auth_basic "Restricted Content"; auth_basic_user_file /path/to/.htpasswd; } } }
在上面的示例中,server_tokens off; 禁用了服務(wù)器版本號的顯示,add_header 指令添加了一些常見的安全性響應(yīng)頭。在特定的 location 塊中,使用 deny 和 allow指令可以限制訪問的 IP 地址范圍,auth_basic 和 auth_basic_user_file 配置了基本身份驗證。
相關(guān)文章
基于Nginx禁止指定IP、國外IP訪問我的網(wǎng)站
這篇文章主要介紹了用Nginx禁止指定IP、國外IP訪問我的網(wǎng)站,想要實現(xiàn)這個功能方法有很多種,這里基于 Nginx 的 ngx_http_geoip2 模塊來禁止國外 IP 訪問網(wǎng)站,需要的朋友可以參考下2022-05-05Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻
Nginx?Proxy?Manager是一款功能強大的開源軟件,配置Web應(yīng)用防火墻,可以防止常見的web攻擊,本文就來介紹一下Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻,感興趣的可以了解一下2025-02-02nginx 部署 vue 項目找不到j(luò)s css文件的解決方法
這篇文章主要介紹了nginx 部署 vue 項目找不到j(luò)s css文件的解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07通過Nginx實現(xiàn)前端與后端的協(xié)同部署
在現(xiàn)代 web 開發(fā)中,前端與后端的協(xié)同部署是一個關(guān)鍵問題,一個高效的部署策略不僅能提升用戶體驗,還能簡化開發(fā)流程,今天,我們就來探討如何利用 Nginx 實現(xiàn)前端與后端的協(xié)同部署,需要的朋友可以參考下2025-03-03