Nginx快速上手

什么是nginx

Nginx 是一款開源的高性能 HTTP 和反向代理服務器,同時也提供了 IMAP/POP3/SMTP 代理功能。它由俄羅斯程序員 Igor Sysoev 于2004年首次發布,最初設計目的是為了解決 C10k 問題,即如何讓單臺服務器同時處理1萬個并發連接的問題。

功能和作用

Nginx 主要的功能和作用包括但不限于以下幾點:

  1. Web服務器:Nginx 可以作為一個輕量級的 Web 服務器來處理靜態文件、索引文件和自動索引等。
  2. 反向代理服務器:作為反向代理,Nginx 可以接收客戶端請求并將其轉發給后端的一個或多個服務器進行處理,然后將處理結果返回給客戶端。這種架構有助于分擔后端服務器的負載,提高系統的可用性和性能。
  3. 負載均衡器:Nginx 提供了多種負載均衡算法(如輪詢、最少連接、IP哈希等),可以將客戶端請求分配到多個后端服務器上,從而實現高可用性和擴展性。
  4. 緩存服務器:Nginx 可以緩存靜態內容和動態生成的頁面,減少對后端服務器的請求數量,提升網站響應速度。
  5. SSL/TLS 支持:Nginx 支持 SSL/TLS 協議,能夠提供 HTTPS 服務,保障數據傳輸的安全。
  6. 動靜分離:Nginx 可以高效地處理靜態資源,并將動態請求代理到后端應用服務器,以此加快網站解析速度。
  7. 安全防護:Nginx 提供了一定的安全防護功能,比如通過配置訪問控制列表(ACL)限制特定 IP 地址或 IP 段的訪問。
  8. 郵件代理服務器:Nginx 還支持 IMAP、POP3 和 SMTP 協議,可用于代理和負載均衡郵件服務器的請求。

歷史發展

  • Nginx 最初是由 Igor Sysoev 在2002年開始開發,并于2004年發布了第一個公開版本0.1.0。
  • 由于其出色的性能和穩定性,Nginx 很快獲得了廣泛的認可,并在全球范圍內被大量知名網站采用。
  • 2011年,Igor Sysoev 成立了 NGINX Inc. 公司,專注于提供商業支持和服務。
  • 2019年,NGINX 被美國公司 F5 Networks 以6.7億美元的價格收購。
  • 在2022年的俄烏沖突背景下,F5 決定暫停在俄羅斯的所有銷售活動,并移除俄羅斯對 NGINX 開源項目的貢獻權限。

Nginx 的成功在于其采用了事件驅動的異步非阻塞處理模型,這使得它在處理高并發請求時表現出色。此外,Nginx 的模塊化設計允許用戶根據需要靈活擴展其功能。它的配置文件結構清晰,易于理解和修改,支持豐富的配置選項,便于定制化部署。正因為這些特性,Nginx 已經成為構建高性能 Web 應用程序、負載均衡集群和反向代理的理想選擇。

下載nginx?

  1. 訪問官方網站:首先,訪問 Nginx 的官方網站 nginx.org。
  2. 下載 Windows 版本:從官網的下載頁面獲取 Windows 版本的 Nginx。通常,你會找到一個如 nginx-x.x.xx.zip 的鏈接(這里的 x.x.xx 是版本號),點擊下載這個壓縮包。

安裝 Nginx

  1. 解壓文件:將下載的 .zip 文件解壓到你希望安裝 Nginx 的目錄,例如 C:\nginx\

  2. 啟動 Nginx

    • 打開命令提示符(以管理員身份運行),然后導航到 Nginx 的安裝目錄下的 sbin 文件夾。例如,如果你把 Nginx 解壓到了 C:\nginx\,那么你應該執行:

      cd C:\nginx\nginx-1.26.3\  (根據實際解壓后的文件夾名稱調整路徑)
      
    • 然后,輸入以下命令來啟動 Nginx:

      start nginx
      

      或者直接雙擊 nginx.exe 來啟動它。

  3. 驗證安裝

    • 打開瀏覽器,訪問 http://localhost/。如果看到歡迎頁面,說明 Nginx 已經成功安裝并正在運行。

配置環境變量

如果你想在任何地方都能使用 nginx 命令,可以配置環境變量:

  1. 添加到系統環境變量

    • 右鍵點擊“此電腦”或“我的電腦”,選擇“屬性”。
    • 點擊左側的“高級系統設置”。
    • 在彈出的窗口中,點擊“環境變量”按鈕。
    • 在“系統變量”部分,找到并選擇 Path 變量,然后點擊“編輯”。
    • 在編輯窗口中,點擊“新建”,然后輸入 Nginx 的 sbin 目錄路徑,例如 C:\nginx\nginx-1.26.3\(確保指向正確的路徑)。
    • 確認所有對話框都已保存并關閉。
  2. 驗證配置是否成功

    • 打開一個新的命令提示符窗口,輸入 nginx -v 來檢查是否能夠識別 Nginx 命令以及查看其版本信息。

PID?

PID,全稱為Process Identifier(進程標識符),是操作系統為了管理和識別運行中的每個進程而分配的一個唯一數字標識符。在任何給定時間點,操作系統中運行的所有進程都有一個唯一的PID值,這使得操作系統能夠對這些進程進行管理、監控和控制。

PID的作用

  • 進程管理:通過PID,操作系統可以對特定的進程執行各種操作,比如啟動、停止、重啟或調整優先級等。
  • 資源分配:操作系統根據PID來跟蹤和管理進程使用的系統資源,如內存、CPU時間等。
  • 安全性和權限控制:不同的進程可能運行在不同的用戶上下文中,擁有不同的權限級別。通過PID,可以確保只有具有適當權限的用戶才能對進程執行某些操作。
  • 日志記錄與調試:開發人員和系統管理員可以通過PID追蹤某個進程的行為,這對于調試程序和分析性能問題非常有用。

如何查看PID

不同的操作系統提供了不同的工具來查看正在運行的進程及其PID:

  • Linux/macOS: 使用ps命令可以列出所有進程及其PID。例如,要查找Nginx的主進程ID,可以使用以下命令:

    ps aux | grep nginx
    

    或者直接查看Nginx配置文件中指定的PID文件內容(如果有的話):

    cat /var/run/nginx.pid
    
  • Windows: 在任務管理器中可以直接看到每個進程的PID。也可以使用命令行工具tasklist來顯示包括PID在內的進程信息:

    tasklist /FI "imagename eq nginx.exe"
    

發送信號給進程

在Unix/Linux系統中,經常需要向特定進程發送信號以觸發某些行為(如重新加載配置、優雅地關閉服務等)。這通常通過PID來實現。例如,向Nginx發送重新加載配置的信號:

sudo kill -HUP `cat /var/run/nginx.pid`

服務啟停

  • 下面是針對在windows系統中的操作

  • 即使你已經配置了環境變量,當你直接在命令行輸入 nginx 命令而沒有指定工作目錄和配置文件路徑時,Nginx 默認會在其認為的當前工作目錄下尋找這些文件,這可能是導致錯誤的原因

基本操作

啟動 Nginx

  • 打開命令提示符(推薦以管理員身份運行),導航到 Nginx 的安裝目錄下,然后執行:

    start nginx
    

    或者直接雙擊 nginx.exe 文件。

停止 Nginx

  • 要停止 Nginx,可以在命令提示符中輸入:

    nginx -s stop
    

重新加載配置(不停機重載)

  • 當你對配置文件進行了更改并希望應用新設置時,可以使用以下命令:

    nginx -s reload
    

檢查配置文件語法

  • 在重新加載前,確保配置文件正確無誤,可以通過以下命令檢查:

    nginx -t
    

查看Nginx進程

在Windows上,你可以使用以下幾種方法來查看Nginx的進程信息:

  • 任務管理器:

    • 打開任務管理器(Ctrl + Shift + Esc)。
    • 在“進程”標簽頁下查找nginx.exe。這里可以看到Nginx的主進程和工作進程。
  • 命令行工具:

    • 使用tasklist命令結合findstr來過濾Nginx相關的進程:

      tasklist /FI "imagename eq nginx.exe"
      
    • 這個命令會列出所有名為nginx.exe的進程及其PID信息。

獲取Nginx主進程PID

在Windows版本的Nginx中,默認情況下也會將主進程的PID寫入一個文件中。這個文件的位置取決于你的配置文件設置,但通常可以在Nginx安裝目錄下的logs文件夾中的nginx.pid找到。例如,如果Nginx安裝在C:\nginx\目錄下,則可以使用以下命令查看主進程PID:

type C:\nginx\logs\nginx.pid

使用nginx -s發送信號

在Windows上,你可以通過nginx -s命令向Nginx發送信號以執行不同的操作,如重新加載配置或停止服務。這包括:

  • reload: 重新加載配置文件,不中斷服務。

    nginx -s reload
    
  • stop: 快速關閉Nginx。

    nginx -s stop
    
  • quit: 優雅地關閉Nginx,在處理完當前請求后退出。

    nginx -s quit
    

這些命令需要在命令提示符窗口中執行,并且應該從Nginx的安裝目錄運行,或者確保你的系統路徑包含Nginx的可執行文件路徑。在某些情況下,可能需要以管理員身份運行命令提示符來執行這些命令。

注意事項

  • 環境變量:如果已經將 Nginx 的路徑添加到了系統的環境變量中,在任意位置都可以直接使用 nginx 命令。否則,請確保你在 Nginx 的安裝目錄或其 sbin 子目錄下執行命令。
  • 權限問題:在 Linux 和 macOS 系統上執行上述命令時,可能需要管理員權限(使用 sudo)。
  • 工作目錄:確保你的當前工作目錄為 Nginx 的安裝目錄,特別是當未配置環境變量時,這有助于避免路徑相關的問題。

Nginx基礎結構

  1. Master進程
    • 作用:Master進程是Nginx的主進程,負責管理其他進程和配置文件的加載。它不直接處理客戶端請求,而是負責監聽端口、接收新連接,并將連接分配給Worker進程。
    • 特點:Master進程具有特權,通常以root用戶身份運行,以便能夠綁定到特權端口(如80和443)。
  2. Worker進程
    • 作用:Worker進程是實際處理客戶端請求的進程。每個Worker進程都是獨立的,可以處理多個客戶端請求。
    • 特點:Worker進程通常以非特權用戶身份運行,以提高安全性。它們通過事件驅動和異步非阻塞的方式處理請求,能夠高效地處理大量并發連接。
  3. Cache Manager進程(可選)
    • 作用:Cache Manager進程負責管理Nginx的緩存。它定期清理和更新緩存,確保緩存的有效性和空間利用率。
  4. Cache Loader進程(可選)
    • 作用:Cache Loader進程在Nginx啟動時預加載緩存內容。這有助于減少啟動時間,并提高緩存的命中率。
  5. 配置模塊
    • 作用:Nginx的配置文件(如nginx.conf)定義了服務器的行為,包括監聽的端口、虛擬主機、反向代理設置、負載均衡策略等。
    • 特點:Nginx的配置文件非常靈活,支持模塊化擴展,可以根據需要進行定制。
  6. 事件驅動模型
    • 作用:Nginx采用事件驅動模型,通過epoll(在Linux上)或kqueue(在FreeBSD上)等高效的多路復用機制,實現高并發處理。
    • 特點:事件驅動模型使得Nginx能夠以少量的資源處理大量的并發連接,減少上下文切換的開銷,提高性能。

Nginx配置文件

Nginx配置文件是控制Nginx服務器行為的核心。一個典型的Nginx配置文件(通常命名為nginx.conf)由多個部分組成,每個部分都有其特定的功能和用途。

nginx -V

你可以通過上面指令來查看文件路徑,--conf-path=“相對路徑”明確指出了配置文件的所在位置

1. 全局塊(Global Block)

位于配置文件最外層,定義了影響整個Nginx進程的參數。

  • user:指定Nginx Worker進程運行的用戶和用戶組,默認為nobody。
  • worker_processes:指定Nginx啟動的工作進程數,通常設置為CPU核心數。
  • error_log:定義全局錯誤日志的位置和級別。
  • pid:指定存儲Nginx主進程ID的文件路徑。

2. Events 塊

配置與事件驅動模型相關的設置。

  • worker_connections:設定每個Worker進程的最大并發連接數。
  • use:選擇使用的事件驅動模型,如epoll、kqueue等。

3. HTTP 塊

這是Nginx配置中最復雜的部分,包含了處理HTTP請求的所有相關配置。

  • include:引入其他配置文件或目錄下的所有配置文件,便于模塊化管理。
  • default_type:設置默認的MIME類型。
  • log_formataccess_log:定義訪問日志格式及存放位置。
  • sendfile:啟用或禁用高效文件傳輸模式。
  • tcp_nopushtcp_nodelay:優化網絡性能的選項。
  • keepalive_timeout:設置保持連接的超時時間。
  • gzip:啟用或禁用Gzip壓縮以減少傳輸數據量。

4. Server 塊

定義虛擬主機配置,允許你基于不同的域名或IP地址提供不同的服務。

  • listen:指定服務器監聽的端口,默認為80。
  • server_name:指定服務器名稱,可以是域名或IP地址。
  • root:設置請求的根目錄。
  • index:設置默認索引文件名。

5. Location 塊

用于匹配不同的URI請求,并對這些請求執行特定的操作。

  • 可以根據不同的匹配方式(精確匹配=, 正則匹配~, 忽略大小寫的正則匹配~*, 前綴匹配^~等)來處理請求。
  • 常見操作包括靜態文件服務、反向代理等。

6. Upstream 塊(如果需要負載均衡)

用于定義一組后端服務器,實現負載均衡。

  • 可以使用輪詢(round-robin)、最少連接(least_conn)、IP哈希(ip_hash)等方式進行負載均衡。

7. 其他重要指令

  • proxy_pass:配置反向代理,將客戶端請求轉發到后端服務器。
  • try_files:按順序檢查指定的文件和路徑,找到即停止搜索并處理請求。
  • rewrite:根據規則重寫URL,可用于實現URL重定向或優化SEO。
  • return:根據條件返回特定的HTTP狀態碼。

通過合理配置上述各部分,可以根據具體需求定制Nginx的行為,以滿足高性能Web服務的要求。例如,你可以設置靜態資源緩存策略、啟用SSL/TLS安全連接、配置反向代理以支持動態內容處理等。每種配置都需要仔細考慮其對性能、安全性和維護性的影響。

靜態站點的部署

1. 準備靜態資源

首先,你需要確保你的靜態網站已經構建完成,并且所有的資源文件(HTML, CSS, JavaScript, 圖片等)都已準備好。如果你使用的是前端框架或工具(如React, Vue, Hugo等),你可能需要先運行構建命令生成最終的靜態資源文件。

2. 配置Nginx

接下來,你需要配置Nginx以正確地服務這些靜態文件。這通常涉及到編輯Nginx的配置文件(通常是nginx.conf或者位于sites-available目錄下的某個配置文件)。

server {listen 80;server_name example.com;location / {root /path/to/your/static/site; # 設置靜態文件的根目錄index index.html; # 默認首頁try_files $uri $uri/ /index.html; # 對于單頁應用(SPA)特別有用}error_page 404 /404.html;location = /404.html {root /path/to/your/static/site;}
}

在這個配置中,你需要替換example.com為你的域名,并設置正確的root路徑指向你靜態站點所在的目錄。

3. 測試并重新加載Nginx配置

在保存了新的配置后,你應該測試Nginx配置是否有語法錯誤,并重新加載Nginx使更改生效。可以使用以下命令:

sudo nginx -t # 測試配置文件的正確性
sudo nginx -s reload # 重新加載Nginx配置

4. 上傳靜態資源

如果靜態資源不在服務器上,你需要將它們上傳到服務器上的指定目錄(即你在Nginx配置中定義的root路徑)。你可以使用SCP、FTP或其他文件傳輸方式來完成這項工作。

5. 訪問您的網站

一旦完成上述步驟,理論上你應該可以通過瀏覽器訪問你的靜態網站了。只需在地址欄輸入你的域名或服務器IP地址即可。

注意事項

  • HTTPS: 考慮為你的靜態站點啟用HTTPS,這對于保護用戶數據和提高搜索引擎排名都有好處。可以考慮使用Let’s Encrypt免費獲取SSL證書。
  • 緩存策略: 為了提高性能,你可以設置適當的緩存頭來指示瀏覽器如何緩存你的靜態資源。
  • CDN: 使用內容分發網絡(CDN)可以幫助加速全球用戶的訪問速度,同時減少源站的壓力。

配置進程數量

在Nginx中配置工作進程的數量是非常重要的,因為它直接影響到服務器的性能和資源利用效率。工作進程負責處理客戶端請求,因此合理設置worker_processes的數量可以提高服務器響應速度和吞吐量。

配置方法

Nginx的工作進程數量是在主配置文件(通常是nginx.conf)的全局塊中通過worker_processes指令來定義的。以下是幾種常見的配置方式:

  1. 根據CPU核心數自動調整
    這是最常用的方式之一,它允許Nginx根據服務器的CPU核心數自動決定最佳的工作進程數。

    worker_processes auto;
    

    使用auto關鍵字可以讓Nginx自動檢測并設置為最佳值,這通常等于服務器的CPU核心數。

  2. 手動指定具體數值
    如果你對服務器負載情況非常了解,并且想要手動控制工作進程的數量,可以直接指定一個具體的數字。

    worker_processes 4; # 假設你的服務器有4個CPU核心
    
  3. 基于其他因素調整
    在某些情況下,可能需要考慮除了CPU核心數之外的因素,比如I/O等待時間、網絡延遲等。雖然直接與這些因素相關的配置并不多,但你可以通過試驗不同的worker_processes設置找到最適合你應用環境的配置。

相關優化建議

  • 結合worker_connections使用:確定了worker_processes后,還需要注意events塊中的worker_connections指令,它定義了一個工作進程同時處理的最大連接數。最大并發連接數等于worker_processes乘以worker_connections

    events {worker_connections 1024;
    }
    
  • 監控與調優:部署完成后,應該持續監控服務器性能指標(如CPU利用率、內存使用率、請求響應時間等),并根據實際情況進一步微調worker_processes和其他相關參數。

  • 測試配置:每次修改Nginx配置文件后,請記得先進行配置測試,確保沒有語法錯誤:

    sudo nginx -t
    

    然后重新加載Nginx使新的配置生效:

    sudo nginx -s reload
    

反向代理

反向代理是一種常見的網絡服務部署模式,特別是在處理Web請求時非常有用。它允許客戶端發送請求到一個代理服務器,然后由這個代理服務器將請求轉發給后端的實際服務器(可以是一個或多個),并將響應返回給客戶端。

配置反向代理的基本步驟

  1. 安裝Nginx:確保你的系統上已經安裝了Nginx。如果沒有,請根據你的操作系統選擇合適的安裝方法。

  2. 編輯Nginx配置文件:你需要編輯Nginx的主要配置文件(通常是nginx.conf或者位于sites-available目錄下的某個配置文件)以添加反向代理設置。

  3. 配置反向代理:使用location塊結合proxy_pass指令指定后端服務器的地址。

示例

假設你有一個運行在本地8080端口的應用服務器,并希望使用Nginx作為前端反向代理服務器。

server {listen 80; # 監聽HTTP請求的80端口server_name example.com; # 你的域名location / {proxy_pass http://127.0.0.1:8080; # 指定后端服務器的地址和端口proxy_set_header Host $host; # 將原始請求的Host頭部傳遞給后端服務器proxy_set_header X-Real-IP $remote_addr; # 獲得原始請求的真實IP地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 為代理鏈路中的每個代理添加客戶端IP地址proxy_set_header X-Forwarded-Proto $scheme; # 標識客戶端請求使用的協議(http或https)}
}

負載均衡

在Nginx中配置負載均衡可以幫助你將客戶端請求分發到多個后端服務器,從而提高應用的可用性和擴展性。通過負載均衡,不僅可以實現更高的處理能力,還能在后端服務器故障時提供冗余支持,確保服務的連續性。

基本步驟

  1. 定義上游服務器組:首先需要使用upstream指令定義一個包含所有后端服務器的組。
  2. 配置反向代理:然后,在server塊中的適當location里使用proxy_pass指令指向這個上游服務器組。

示例配置

假設你有三臺后端服務器(backend1.example.com, backend2.example.com, backend3.example.com),你可以按照以下方式配置Nginx:

http {upstream backend_servers {# 定義一組后端服務器server backend1.example.com;server backend2.example.com;server backend3.example.com;# 可選: 使用最少連接策略# least_conn;# 可選: 為每個服務器設置權重,數值越高,分配到的概率越大# server backend1.example.com weight=3;# server backend2.example.com weight=2;# server backend3.example.com weight=1;}server {listen 80; # 監聽HTTP請求的80端口server_name example.com; # 你的域名location / {proxy_pass http://backend_servers; # 將請求轉發給上游服務器組# 設置頭部信息以保持會話一致性等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;}}
}

負載均衡策略

Nginx支持多種負載均衡算法,默認是輪詢(Round Robin)。此外,還可以選擇其他幾種策略:

  • Least Connections (最小連接):將請求發送到當前連接數最少的服務器上。適用于請求處理時間差異較大的場景。

    least_conn;
    
  • IP Hash (基于客戶端IP的哈希):根據客戶端IP地址的哈希值來選擇服務器,這樣來自同一IP的請求總是被路由到同一個后端服務器,有助于保持會話一致性。

    ip_hash;
    
  • Weight (權重):允許為每個服務器指定一個權重值,Nginx會根據權重比例分發請求。

    server backend1.example.com weight=3;
    server backend2.example.com weight=2;
    server backend3.example.com weight=1;
    

健康檢查

雖然Nginx本身不直接支持健康檢查,但可以通過第三方模塊或結合其他工具(如Consul、Zookeeper等)實現。Nginx Plus版本提供了內置的健康檢查功能。

配置測試與重新加載

完成配置后,請務必進行配置文件正確性的檢查:

sudo nginx -t

如果一切正常,重新加載Nginx使新的配置生效:

sudo nginx -s reload

配置HTTPS

配置HTTPS對于確保網站的安全性至關重要,它通過SSL/TLS協議加密客戶端和服務器之間的通信,保護數據的隱私和完整性。在Nginx中配置HTTPS主要涉及獲取SSL證書并編輯Nginx配置文件以啟用SSL/TLS。

1. 獲取SSL證書

你可以從可信的證書頒發機構(CA)購買SSL證書,或者使用Let’s Encrypt等提供免費證書的服務。以下是以Let’s Encrypt為例,如何獲取證書:

  • 使用Certbot工具自動獲取并安裝證書。首先需要根據你的操作系統和Web服務器類型選擇合適的Certbot版本。例如,在Ubuntu系統上運行Nginx,可以使用如下命令安裝Certbot:

    sudo apt update
    sudo apt install certbot python3-certbot-nginx
    
  • 然后,運行以下命令來獲取并安裝證書:

    sudo certbot --nginx
    

    按照提示輸入你的郵箱地址、同意服務條款,并輸入你的域名信息。

2. 配置Nginx支持HTTPS

獲取證書后,你需要編輯Nginx的配置文件來啟用HTTPS。通常位于/etc/nginx/nginx.conf/etc/nginx/sites-available/default(具體取決于你的系統和配置)。一個基本的HTTPS配置示例如下:

server {listen 80; # 監聽HTTP請求server_name yourdomain.com www.yourdomain.com;return 301 https://$host$request_uri; # 將所有HTTP請求重定向到HTTPS
}server {listen 443 ssl; # 監聽HTTPS請求server_name yourdomain.com www.yourdomain.com;ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # SSL證書路徑ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 私鑰路徑ssl_protocols TLSv1.2 TLSv1.3; # 只啟用安全的TLS協議版本ssl_prefer_server_ciphers on;ssl_ciphers HIGH:!aNULL:!MD5;location / {# 你的其他配置...}
}

3. 測試并重新加載Nginx配置

完成上述配置后,先測試配置文件是否有語法錯誤:

sudo nginx -t

如果測試成功,重新加載Nginx使新的配置生效:

sudo systemctl reload nginx

4. 自動更新證書(針對Let’s Encrypt)

Let’s Encrypt提供的證書有效期為90天,建議設置定期任務(cron job)自動更新證書。Certbot會自動添加一個定時任務來處理這個問題,但你也可以手動檢查更新:

sudo certbot renew --dry-run

設置虛擬主機

假設你想在同一臺服務器上托管兩個不同的網站site1.example.comsite2.example.com

  1. 基于域名的虛擬主機配置

    打開nginx.conf或創建一個新配置文件(如vhosts.conf)并在其中添加如下內容:

    server {listen       80;server_name  site1.example.com;location / {root   C:/nginx/html/site1; # 注意路徑格式使用正斜杠(/)且盤符后也要有斜杠index  index.html index.htm;}
    }server {listen       80;server_name  site2.example.com;location / {root   C:/nginx/html/site2;index  index.html index.htm;}
    }
    
  2. 確保配置正確:保存對配置文件的修改后,你需要測試配置是否正確。打開命令提示符并輸入以下命令:

    nginx -t
    
  3. 重新加載Nginx:如果配置測試成功,可以通過以下命令重新加載Nginx使新的配置生效:

    nginx -s reload
    

注意事項

  • 路徑格式:在Windows上配置Nginx時,請注意使用正斜杠(/)而不是反斜杠(\)來指定路徑,并且盤符后也需要加上斜杠,例如C:/nginx/html/
  • 防火墻設置:如果你的Windows防火墻啟用,默認情況下可能會阻止外部訪問80端口(HTTP)。你需要手動配置防火墻規則允許流量通過。
  • DNS解析:為了讓你的虛擬主機正常工作,你需要確保你的本地DNS或hosts文件已正確配置。對于開發環境,可以在C:\Windows\System32\drivers\etc\hosts文件中添加相應的域名指向本地IP地址(通常是127.0.0.1)。

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

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

相關文章

【C++】:STL詳解 —— 布隆過濾器

目錄 布隆過濾器的概念 布隆過濾器的優點 布隆過濾器的缺點 布隆過濾器使用場景 布隆過濾器的實現 布隆過濾器的概念 布隆過濾器(Bloom Filter) 是一種空間效率極高的概率型數據結構,用于快速判斷一個元素是否屬于某個集合。其核心特點…

從Instagram到畫廊:社交平臺如何改變藝術家的展示方式

從Instagram到畫廊:社交平臺如何改變藝術家的展示方式 在數字時代,藝術家的展示方式正在經歷一場革命。社交平臺,尤其是Instagram,已經成為藝術家展示作品、與觀眾互動和建立品牌的重要渠道。本文將探討社交平臺如何改變藝術家的…

MySQL(事物上)

目錄 示例: 一 引入事物 1. 概念 2. 事物的4大特性 3. 為什么要有事物? 二 事物操作 1. 查看存儲引擎支持的事物 2. 事物的提交方式 2.1 查看事物的默認提交方式 2.2 設置事物的默認提交方式 2.3 查看事物的全局隔離級別 2.4 驗證事物的回滾…

Spring Boot 實現多數據源配置

一、配置流程 在 Spring Boot 中實現多數據源配置通常用于需要連接多個數據庫的場景。主要有以下幾個步驟: 配置多個數據源的連接信息。定義多個數據源的 Bean。為每個數據源配置MyBatis的SqlSessionFactory和事務管理器。為每個數據源定義Mapper接口和Mapper XML…

p5.js:繪制各種內置的幾何體,能旋轉

向 豆包 提問:請編寫 p5.js 示例, 繪制各種內置的幾何體,能讓這些幾何體緩慢旋轉。 cd p5-demo copy .\node_modules\p5\lib\p5.min.js . 此代碼創建了一個包含多個內置幾何體的 3D 場景,每個幾何體都有不同的顏色和位置。運行代…

結構體定義與應用

引言 到今天為止,c語言的基礎操作和基礎數據類型,就都已經結束了,大家都知道,如果要實現復雜的功能,大家都可以通過函數封裝調用,那么如果要實現基礎數據類型的封裝,該怎么辦呢?答案就是結構體。 在C語言編程中,結構體(struct)是非常重要的一個概念,它為程序員提供…

MindGYM:一個用于增強視覺-語言模型推理能力的合成數據集框架,通過生成自挑戰問題來提升模型的多跳推理能力。

2025-03-13,由中山大學和阿里巴巴集團的研究團隊提出了MindGYM框架,通過合成自挑戰問題來增強視覺-語言模型(VLMs)的推理能力。MindGYM框架通過生成多跳推理問題和結構化課程訓練,顯著提升了模型在推理深度和廣度上的表…

R語言零基礎系列教程-01-R語言初識與學習路線

代碼、講義、軟件回復【R語言01】獲取。 R語言初識 R是一個開放的統計編程環境,是一門用于統計計算和作圖的語言。“一切皆是對象”,數據、函數、運算符、環境等等都是對象。易學,代碼像偽代碼一樣簡潔,可讀性高強大的統計和可視…

PythonWeb開發框架—Flask-APScheduler超詳細使用講解

1.定時任務的兩種實現方式 1.1 用scheduler.task裝飾任務 安裝插件: pip install Flask-APScheduler pip install apscheduler 腳本實現: ###app.py##導入依賴庫 from flask import Flask import datetime import config from flask_apscheduler i…

python_巨潮年報pdf下載

目錄 前置: 步驟: step one: pip安裝必要包,獲取年報url列表 step two: 將查看url列表轉換為pdf url step three: 多進程下載pdf 前置: 1 了解一些股票的基本面需要看歷年年報,在巨潮一個個下載比較費時間&…

從0到1構建AI深度學習視頻分析系統--基于YOLO 目標檢測的動作序列檢查系統:(2)消息隊列與消息中間件

文章大綱 原始視頻隊列Python 內存視頻緩存優化方案(4GB 以內)一、核心參數設計二、內存管理實現三、性能優化策略四、內存占用驗證五、高級優化技巧六、部署建議檢測結果隊列YOLO檢測結果隊列技術方案一、技術選型矩陣二、核心實現代碼三、性能優化策略四、可視化方案對比五…

React Native 如何使用 Expo 快速開發?

React Native是當下熱門的跨平臺移動開發框架,而Expo則是它的重要開發工具之一。Expo提供了一套完整的開發環境,使開發者無需安裝Android Studio或Xcode也能快速運行React Native項目。它包含了眾多內置API,如相機、地理位置、推送通知等&…

中考英語之09從句

1 賓語從句 定義 在主從復合句中充當賓語,位于及物動詞、介詞或復合謂語之后的從句。 引導詞 綜述: that(可省略)、if/whether、連接代詞(what、which、who、whom、whose 等)和連接副詞(when、…

平方矩陣問題

Ⅰ 回字形二維數組 #include <iostream> #include <iomanip> using namespace std; int main(){int n;while(cin>>n,n){for(int i0; i<n;i){for(int j0; j<n; j){int upi, downn-i1, leftj, rightn-j1;cout<<min(min(up,down),min(left,right)…

C++模版(復習)

1.泛型編程&#xff1a;編寫與類型無關的通用代碼&#xff0c;是代碼復用的一種手段。模板是泛型編程的基礎 2.函數模板的格式 template<typename T1,typename T2,…,typename Tn> 返回類型 函數名(參數列表) { ??//函數體 } 3.template<class T1,class T2,…,class…

【sklearn 05】sklearn功能模塊

sklearn功能模塊 分類&#xff1a;識別某個對象屬于那個類別回歸&#xff1a;預測與對象相關聯的連續值屬性聚類&#xff1a;將相似對象自動分組降維&#xff1a;減少要考慮的隨機變量的數量模型選擇&#xff1a;比較、驗證、選擇參數和模型預處理&#xff1a;特征提取和歸一化…

使用Qt創建懸浮窗口

在Qt中創建懸浮窗口&#xff08;如無邊框、可拖動的浮動面板或提示框&#xff09;可以通過以下方法實現。以下是幾種常見場景的解決方案&#xff1a; 方法1&#xff1a;使用無邊框窗口 鼠標事件拖動 適用于自定義浮動工具窗口&#xff08;如Photoshop的工具欄&#xff09;。 …

《P4387 【深基15.習9】驗證棧序列》

題目描述 給出兩個序列 pushed 和 poped 兩個序列&#xff0c;其取值從 1 到 n(n≤100000)。已知入棧序列是 pushed&#xff0c;如果出棧序列有可能是 poped&#xff0c;則輸出 Yes&#xff0c;否則輸出 No。為了防止騙分&#xff0c;每個測試點有多組數據&#xff0c;不超過 …

校園安全用電怎么保障?防觸電裝置來幫您

引言 隨著教育設施的不斷升級和校園用電需求的日益增長&#xff0c;校園電力系統的安全性和可靠性成為了學校管理的重要課題。三相智能安全配電裝置作為一種電力管理設備&#xff0c;其在校園中的應用不僅能夠提高電力系統的安全性&#xff0c;還能有效保障師生的用電安全&am…

【Git】--- 初識Git Git基本操作

Welcome to 9ilks Code World (??? ? ???) 個人主頁: 9ilk (??? ? ???) 文章專欄&#xff1a; Git 本篇我們來初步認識Git企業級應用是什么&#xff0c;有什么用以及Git基本操作。 &#x1f3e0; 初始Git 提出問題 在日常生活中&#xff0c;我們進行…