文章目錄
- 前言
- 1、Web 概念
- 1.1 Web 的特點
- 1.2 B/S 架構模型
- 1.3 Web 請求與響應過程
- 1.4 靜態資源與動態資源
- 1.5 Web 的發展階段
- 1.6 小結
- 2、HTTP 與 HTTPS 協議
- 2.1 http與https區別
- 2.2 HTTPS 握手流程
- 2.3 HTTP狀態碼
- 2.3.1 HTTP 狀態碼概覽
- 2.3.2 常用狀態碼詳解
- 3、Nginx 概念
- 3.1 Nginx 介紹
- 3.2 簡述Nginx和Apache的差異
- 3.3 Nginx 進程結構
- 4、Nginx安裝
- 4.1 Nginx 編譯安裝步驟
- 4.1.1 環境準備
- 4.1.2 安裝依賴包
- 4.1.3 創建運行用戶和組
- 4.1.4 解壓并編譯安裝
- 4.1.5 創建軟鏈接以便系統識別命令
- 4.2 企業級編譯選項示例
- 4.3 服務管理命令
- 4.3.1 檢查配置
- 4.3.2 啟動/停止/重載
- 4.4 平滑升級步驟
- 4.5 添加系統服務(Systemd 方式)
- 4.6 信號說明
- 5、Nginx 配置
- 5.1 全局配置
- 5.2 I/O 事件配置
- 5.3 HTTP 配置
- 5.3 Web 服務的監聽配置
- 5.4 其他配置(擴展)
- 6、nginx 虛擬主機
- 6.1 訪問狀態統計配置
- 6.1.1 查看已安裝的所有模塊
- 6.1.2 修改 nginx.conf 配置文件
- 6.1.3 重啟服務,訪問測試
- 6.2 基于授權的訪問控制
- 6.2.1 生成用戶密碼認證文件
- 6.2.2 修改主配置文件相對應目錄,添加認證配置項
- 6.2.3 重啟服務,訪問測試
- 6.3 基于客戶端的訪問控制
- 6.4 基于域名的 Nginx 虛擬主機
- 6.4.1 為虛擬主機提供域名解析
- 6.4.2 為虛擬主機準備網頁文檔
- 6.4.3 修改nginx配置文件
- 6.5 基于IP 的 Nginx 虛擬主機
- 6.5.1 配置server1
- 6.5.2 配置server 2
- 6.6 基于端口的 Nginx 虛擬主機
- 6.6.1 基于端口1
- 6.6.2 基于端口2
- 6.6.3 重啟服務,測試訪問
- 6.6.2 基于端口2
- 6.6.3 重啟服務,測試訪問
- 總結
前言
隨著互聯網技術的飛速發展,Web 服務已成為信息傳遞與交互的核心載體。無論是靜態頁面的展示,還是動態內容的處理,都離不開高效、穩定的 Web 服務器支持。Nginx 作為一款高性能的 HTTP 和反向代理服務器,憑借其出色的并發處理能力、靈活的配置方式和豐富的功能模塊,在全球范圍內得到了廣泛應用。
本章將從 Web 的基本概念入手,逐步介紹 HTTP/HTTPS 協議、Web 請求響應流程、靜態與動態資源的區別,并重點講解 Nginx 的安裝、配置與虛擬主機搭建。通過理論與實踐相結合的方式,幫助讀者建立起對 Web 服務與 Nginx 服務器的系統認識,為后續深入學習與應用打下堅實基礎。
1、Web 概念
Web(World Wide Web,萬維網)是運行在互聯網之上的一個 超文本信息系統,它依賴于 HTTP/HTTPS 協議 實現瀏覽器與服務器之間的交互。
1.1 Web 的特點
- 分布式:資源分布在世界各地的服務器上。
- 跨平臺:只要有瀏覽器,就能訪問資源。
- 無狀態:每次 HTTP 請求都是獨立的,服務器不會記住客戶端狀態(除非使用 Cookie/Session)。
1.2 B/S 架構模型
Web 采用 B/S 架構(Browser/Server):
- Browser(瀏覽器):用戶的入口,發送請求、渲染頁面。
- Server(服務器):接收請求,返回所需資源或動態內容。
用戶瀏覽器 ──> Web服務器(Nginx/Apache)│└─> 應用服務器(PHP/Python/Java)│└─> 數據庫(MySQL/Redis)
1.3 Web 請求與響應過程
一次完整的 Web 訪問過程包括以下步驟:
- 輸入 URL:用戶在瀏覽器輸入
http://www.example.com
。 - DNS 解析:瀏覽器將域名解析為 IP 地址。
- 建立連接:瀏覽器與 Web 服務器建立 TCP 連接(3 次握手)。
- 發送請求:瀏覽器發起 HTTP 請求(GET/POST)。
- 服務器處理:
- Web 服務器處理靜態資源請求
- 動態請求轉發到應用服務器(如 Tomcat、Django)
- 應用服務器可能再查詢數據庫
- 返回響應:Web 服務器將結果打包成 HTTP 響應報文返回瀏覽器。
- 渲染頁面:瀏覽器解析 HTML、加載 CSS/JS、渲染最終頁面。
瀏覽器 ----> Web服務器 ----> 應用服務器 ----> 數據庫<---- <---- <----
1.4 靜態資源與動態資源
-
靜態資源:不需要服務器額外處理,直接返回即可。
- HTML、CSS、圖片、視頻、JS 文件
- 優點:速度快,壓力小
-
動態資源:需要服務器端代碼計算生成,再返回客戶端。
- PHP 腳本、Python Flask/Django、Java Servlet、Ruby
- 優點:個性化內容,支持交互
- PHP 腳本、Python Flask/Django、Java Servlet、Ruby
圖 1-3 靜態與動態資源對比圖
靜態資源:用戶請求 → Web服務器直接返回
動態資源:用戶請求 → Web服務器 → 應用服務器運行代碼 → 返回結果
1.5 Web 的發展階段
- Web 1.0(只讀):靜態頁面為主,用戶只能瀏覽。
- Web 2.0(交互式):用戶可生成內容,AJAX(前端) 技術普及。
- Web 3.0(智能化):語義網、區塊鏈、去中心化概念興起。
1.6 小結
- Web 是基于 B/S 架構 的信息交互方式。
- 核心是 請求-響應模型,通過 HTTP/HTTPS 協議傳輸數據。
- Web 可提供 靜態資源 和 動態資源。
2、HTTP 與 HTTPS 協議
2.1 http與https區別
- HTTP:明文傳輸,不安全。
- HTTPS:在 HTTP 上加入 SSL/TLS 加密,防止中間人攻擊。
2.2 HTTPS 握手流程
TLS 握手過程:客戶端發起請求 → 服務端返回證書 → 雙方協商加密算法 → 建立安全通道。
客戶端 Hello → 服務端 Hello + 證書 → 客戶端驗證 → 加密通信
TLS 握手過程(建立安全通道)
流程:
- 客戶端 Hello
- 瀏覽器發起請求,告訴服務器自己支持哪些加密算法。
-
服務端 Hello + 證書
- 網站返回 SSL 證書(證明身份),選擇一種加密算法。
-
客戶端驗證證書
- 瀏覽器檢查證書是否可信(CA 頒發、沒過期、域名匹配)。
-
協商密鑰
- 雙方生成一個臨時密鑰,用于對稱加密后續通信。
-
加密通信開始
- 后續 HTTP 數據都通過加密通道傳輸。
2.3 HTTP狀態碼
2.3.1 HTTP 狀態碼概覽
HTTP 狀態碼都是 三位數字,按首位分為五類:
類型 | 范圍 | 含義 | 大白話理解 |
---|---|---|---|
1xx | 100–199 | 信息性狀態碼 | “我收到了請求,還在處理中” |
2xx | 200–299 | 成功 | “請求成功,服務器給你東西了” |
3xx | 300–399 | 重定向 | “你要的東西搬家了,去新地址找” |
4xx | 400–499 | 客戶端錯誤 | “你請求有問題(URL錯、權限不夠)” |
5xx | 500–599 | 服務器錯誤 | “服務器出問題,暫時拿不到東西” |
2.3.2 常用狀態碼詳解
- 2xx 成功
狀態碼 | 含義 | 類比 |
---|---|---|
200 OK | 請求成功 | “東西拿到了” |
201 Created | 創建成功 | “你提交的表單/資源已創建” |
204 No Content | 成功,但沒有內容 | “操作成功,但沒有額外東西返回” |
- 3xx 重定向
狀態碼 | 含義 | 類比 |
---|---|---|
301 Moved Permanently | 永久搬家 | “這個頁面永久換地址了” |
302 Found | 臨時搬家 | “暫時換地址,下一次還用舊地址” |
304 Not Modified | 內容未改 | “東西沒變,你可以用緩存” |
- 4xx 客戶端錯誤
狀態碼 | 含義 | 類比 |
---|---|---|
400 Bad Request | 請求格式錯 | “你寫的請求我看不懂” |
401 Unauthorized | 未認證 | “先登錄,再訪問” |
403 Forbidden | 禁止訪問 | “你沒權限” |
404 Not Found | 找不到頁面 | “東西搬走或根本沒這東西” |
- 5xx 服務器錯誤
狀態碼 | 含義 | 類比 |
---|---|---|
500 Internal Server Error | 服務器內部出錯 | “服務器崩了” |
502 Bad Gateway | 網關錯誤 | “我去找別的服務器,結果那邊掛了” |
503 Service Unavailable | 服務不可用 | “服務器忙不過來了,稍后再試” |
504 Gateway Timeout | 網關超時 | “找別的服務器太慢,超時了” |
- 生活中的 HTTP 狀態碼類比
場景 | 狀態碼 | 對應情況 |
---|---|---|
打開網頁正常 | 200 | 成功拿到網頁 |
點鏈接頁面搬家 | 301/302 | 瀏覽器自動跳到新地址 |
輸入錯網址 | 404 | “沒找到這個頁面” |
登錄需要權限 | 401 | “先登錄才能看” |
網站掛了 | 500 | “服務器出問題了” |
HTTP 狀態碼就是服務器對你請求的“回話信息”,告訴你請求成功沒、東西搬沒搬、你有沒有權限、或者服務器出問題了。
3、Nginx 概念
3.1 Nginx 介紹
? Nginx (“engine x”) 是一個高性能的 HTTP 和反向代理服務器。Nginx 是由 Igor Sysoev 為俄
羅斯訪問點開量第二的 Rambler.ru 站發的,第一個公開版本 0.1.0 發布于 2004 年 10 月 4 日。其將源代碼以類 BSD 許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞
名。2011 年 6 月 1 日,Nginx 1.0.4 發布。
? Nginx 是一款輕量級的 Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,
單臺物理服務器可支持30 000~50 000個并發請求。并在一個 BSD-like 協議下發行。由俄羅斯的程序設計師 Igor Sysoev 所開發,供俄國大型的入口網站及搜索引擎 Rambler(俄文:Рамблер)使用。其特點是占有內存少,并發能力強,事實上 Nginx 的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用 Nginx 網站用戶有:百度 BWS、新浪、網易、騰訊、等
Nginx 是一個 高性能 Web 服務器,它可以做很多事情:
- 靜態資源服務:可以直接把網頁、圖片、視頻這些文件發給用戶。
- 反向代理:用戶訪問你的服務器,Nginx 可以幫你把請求轉發到后端真正處理請求的服務器。
- 負載均衡:當有很多后端服務器時,Nginx 可以智能分配流量,讓每臺服務器都不忙不過來。
- 高并發處理:用事件驅動的方式處理請求,能同時處理成千上萬的用戶請求,而不會占用太多資源。
優勢:
-
輕量級,占用內存小
-
支持百萬級并發訪問
-
穩定可靠,開源且社區活躍
-
nginx 官網
RamBler:http://www.rambler.ru/
nginx: http://nginx.org/Mainline version 主線版本
Stable version穩定版本
Legacy versions 老版本,遺產版本
舊版本下載:http://mirrors.sohu.com/nginx/
Nginx 中文參考地址: http://www.nginx.cn/doc/
3.2 簡述Nginx和Apache的差異
- Nginx是一個甚于事件的Web服務器,Apache是一個基于流程的服務器;
- Nginx避免子進程的概念,Apache是基于子進程的;
- Nginx在內存消耗和連接方面更好,Apache在內存消耗和連接方面一般;
- Nginx的性能和可伸縮性不依賴于硬件,Apache依賴于CPU和內存等硬件;
- Nginx支持熱部署,Apache不支持熱部署;
- Nginx對于靜態文件處理具有更高效率,Apache相對一般;
- Nginx在反向代理場景具有明顯優勢,Apache相對一般。
3.3 Nginx 進程結構
web請求處理機制
-
多進程方式:服務器每接收到一個客戶端請求就有服務器的主進程生成一個子進程響應客戶端,直到用戶關閉連接,這樣的優勢是處理速度快,子進程之間相互獨立,但是如果訪問過大會導致服務器資源耗盡而無法提供請求。
-
多線程方式:與多進程方式類似,但是每收到一個客戶端請求會有服務進程派生出一個線程來個客戶方進行交互,一個線程的開銷遠遠小于一個進程,因此多線程方式在很大程度減輕了web服務器對系統資源的要求,但是多線程也有自己的缺點,即當多個線程位于同一個進程內工作的時候,可以相互訪問同樣的內存地址空間,所以他們相互影響,一旦主進程掛掉則所有子線程都不能工作了,IIS服務器使用了多線程的方式,需要間隔一段時間就重啟一次才能穩定。
工作進程(worker process)的功能:
所有 Worker 進程都是平等的
實際處理:網絡請求,由 Worker 進程處理
Worker進程數量:一般設置為核心數,充分利用CPU資源,同時避免進程數量過多,導致進程競爭CPU資源,
增加上下文切換的損耗
接受處理客戶的請求
將請求依次送入各個功能模塊進行處理
I/O調用,獲取響應數據
與后端服務器通信,接收后端服務器的處理結果
緩存數據,訪問緩存索引,查詢和調用緩存數據
發送請求結果,響應客戶的請求
接收主程序指令,比如重啟、升級和退出等
4、Nginx安裝
4.1 Nginx 編譯安裝步驟
官方下載 https://nginx.org/download/nginx-1.20.2.tar.gz
4.1.1 環境準備
systemctl stop firewalld #關閉防火墻
systemctl disable firewalld #禁用防火墻開機自啟
setenforce 0 #臨時關閉SELinux
4.1.2 安裝依賴包
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
4.1.3 創建運行用戶和組
useradd -M -s /sbin/nologin nginx
4.1.4 解壓并編譯安裝
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd nginx-1.20.2/./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_modulemake && make install
4.1.5 創建軟鏈接以便系統識別命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
4.2 企業級編譯選項示例
./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_ssl_module \--with-http_v2_module \--with-http_gzip_static_module \--with-http_stub_status_module \--with-pcre \--with-stream \--with-stream_ssl_module \--http-log-path=/var/log/nginx/access.log \--error-log-path=/var/log/nginx/error.log \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock
4.3 服務管理命令
4.3.1 檢查配置
nginx -t
4.3.2 啟動/停止/重載
nginx # 啟動
kill -QUIT <PID> # 停止
kill -HUP <PID> # 重載配置
kill -USR1 <PID> # 重新打開日志文件
4.4 平滑升級步驟
tar -zxvf nginx-新版本.tar.gz
cd nginx-新版本
./configure ...(與原配置相同)
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade # 或手動重啟
4.5 添加系統服務(Systemd 方式)
創建文件:/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
設置權限并啟用:
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx
systemctl enable nginx
4.6 信號說明
信號編號 | 信號名 | 含義 |
---|---|---|
0 | EXIT | 程序退出時收到該信息。 |
1 | HUP | 掛掉電話線或終端連接的掛起信號,這個信號也會造成某些進程在沒有終止的情況下重新初始化。 |
2 | INT | 表示結束進程,但并不是強制性的,常用的 “Ctrl+C” 組合鍵發出就是一個 kill -2 的信號。 |
3 | QUIT | 退出。 |
9 | KILL | 殺死進程,即強制結束進程。 |
11 | SEGV | 段錯誤。 |
15 | TERM | 正常結束進程,是 kill 命令的默認信號 |
5、Nginx 配置
認識Nginx服務的主配置文件 nginx.conf
vim /usr/local/nginx/conf/nginx.conf 進行
5.1 全局配置
#user nobody; #運行用戶,若編譯時未指定則默認為 nobody
worker_processes 4; #工作進程數量,可配置成服務器內核數 * 2,如果網站訪問量不大,一般設為1就夠用了
#error_log logs/error.log; #錯誤日志文件的位置
#pid logs/nginx.pid; #PID 文件的位置
5.2 I/O 事件配置
events {use epoll; #使用 epoll 模型,2.6及以上版本的系統內核,建議使用epoll模型以提高性能worker_connections 4096; #每個進程處理 4096 個連接
}
#如提高每個進程的連接數還需執行“ulimit -n 65535”命令臨時修改本地每個進程可以同時打開的最大文件數。
#在Linux平臺上,在進行高并發TCP連接處理時,最高的并發數量都要受到系統對用戶單一進程同時可打開文件數量的限制(這是因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)。#可使用ulimit -a命令查看系統允許當前用戶進程打開的文件數限制。
/etc/security/limits.conf#epoll是Linux內核為處理大批句柄而作改進的poll,是Linux下多路復用IO接口select/poll的增強版本,它能顯著的減少程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。
若工作進程數為 8,每個進程處理 4 096 個連接,則允許 Nginx 正常提供服務的連接數
已超過 3 萬個(4 096×8=32 768),當然具體還要看服務器硬件、網絡帶寬等物理條件的性
能表現。
5.3 HTTP 配置
? 使用“http { }”界定標記,包括訪問日志、HTTP 端口、網頁目錄、默認字符集、連接保
持,以及后面要講到的虛擬 Web 主機、PHP 解析等一系列設置,其中大部分配置語句都包
含在子界定標記“server { }”內
http {##文件擴展名與文件類型映射表include 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 logs/access.log main;##支持文件發送(下載)sendfile on;##此選項允許或禁止使用socket的TCP_CORK的選項(發送數據包前先緩存數據),此選項僅在使用sendfile的時候使用#tcp_nopush on;##連接保持超時時間,單位是秒#keepalive_timeout 0;keepalive_timeout 65;##gzip模塊設置,設置是否開啟gzip壓縮輸出#gzip on;
5.3 Web 服務的監聽配置
##Web 服務的監聽配置
server {##監聽地址及端口listen 80; ##站點域名,可以有多個,用空格隔開server_name www.kgc.com;##網頁的默認字符集charset utf-8;##根目錄配置location / {##網站根目錄的位置/usr/local/nginx/htmlroot html;##默認首頁文件名index index.html index.php;}##內部錯誤的反饋頁面error_page 500 502 503 504 /50x.html;##錯誤頁面配置location = /50x.html {root html;}
}
}
5.4 其他配置(擴展)
日志格式設定
$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;
$remote_user:用來記錄客戶端用戶名稱;
$time_local: 用來記錄訪問時間與時區;
$request: 用來記錄請求的url與http協議;
$status: 用來記錄請求狀態;成功是200,
$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
$http_referer:用來記錄從哪個頁面鏈接訪問過來的;
$http_user_agent:記錄客戶瀏覽器的相關信息;
通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
====================================================================================
location常見配置指令,root、alias、proxy_pass
root(根路徑配置):root /var/www/html
請求www.benet.com/test/1.html,會返回文件/var/www/html/test/1.htmlalias(別名配置):alias /var/www/html
請求www.benet.com/test/1.html,會返回文件/var/www/html/1.htmlproxy_pass(反向代理配置)
6、nginx 虛擬主機
6.1 訪問狀態統計配置
6.1.1 查看已安裝的所有模塊
? 先使用命令/usr/local/nginx/sbin/nginx -V 查看已安裝的 Nginx 是否包含 HTTP_STUB_STATUS 模塊
cat /opt/nginx-1.20.2/auto/options | grep YES #可查看 nginx 已安裝的所有模塊
6.1.2 修改 nginx.conf 配置文件
修改 nginx.conf 配置文件,指定訪問位置并添加 stub_status 配置
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 80;server_name www.benet.com;charset utf-8;location / {root html;index index.html index.php;}##添加 stub_status 配置##location /status { #訪問位置為/statusstub_status on; #打開狀態統計功能access_log off; #關閉此位置的日志記錄}}
}
6.1.3 重啟服務,訪問測試
systemctl restart nginx瀏覽器訪問 http://192.168.10.21/status
Active connections :表示當前的活動連接數;
server accepts handled requests :表示已經處理的連接信息,三個數字依次表示已處理的連接數、成功的TCP握手次數、 已處理的請求數。可 curl -s http://192.168.10.21/status 結合 awk與if 語句進行性能監控。
6.2 基于授權的訪問控制
6.2.1 生成用戶密碼認證文件
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db
6.2.2 修改主配置文件相對應目錄,添加認證配置項
vim /usr/local/nginx/conf/nginx.conf
......server {location / {......##添加認證配置##auth_basic "secret"; #設置密碼提示框文字信息auth_basic_user_file /usr/local/nginx/passwd.db;}}
6.2.3 重啟服務,訪問測試
nginx -t
systemctl restart nginx瀏覽器訪問 http://192.168.10.21
6.3 基于客戶端的訪問控制
訪問控制規則如下:
deny IP/IP 段:拒絕某個 IP 或 IP 段的客戶端訪問。
allow IP/IP 段:允許某個 IP 或 IP 段的客戶端訪問。
規則從上往下執行,如匹配則停止,不再往下匹配。vim /usr/local/nginx/conf/nginx.conf
......server {location / {......##添加控制規則##allow 192.168.10.20; #允許訪問的客戶端 IPdeny all; #拒絕其它IP客戶端訪問}}systemctl restart nginx
6.4 基于域名的 Nginx 虛擬主機
6.4.1 為虛擬主機提供域名解析
echo "192.168.10.21 www.yjs.com www.benet.com" >> /etc/hosts
6.4.2 為虛擬主機準備網頁文檔
mkdir -p /var/www/html/benet
mkdir -p /var/www/html/yjs
echo "<h1>www.yjs.com</h1>" > /var/www/html/yjs/index.html
echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
6.4.3 修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 80;server_name www.yjs.com; #設置域名www.yjs.comcharset utf-8;access_log logs/www.yjs.access.log; #設置日志名location / {root /var/www/html/yjs; #設置www.yjs.com 的工作目錄index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen 80;server_name www.benet.com; #設置域名www.benet.comcharset utf-8;access_log logs/www.benet.access.log; location / {root /var/www/html/benet;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}
}
4.重啟服務,訪問測試
systemctl restart nginx瀏覽器訪問
http://www.yjs.com
http://www.benet.com
6.5 基于IP 的 Nginx 虛擬主機
6.5.1 配置server1
ifconfig ens33:0 192.168.10.40 netmask 255.255.255.0 vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 192.168.10.21:80; #設置監聽地址192.168.10.21server_name www.YJS.com;charset utf-8;access_log logs/www.YJS.access.log; location / {root /var/www/html/kgc;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}1}
6.5.2 配置server 2
server {listen 192.168.10.40:80; #設置監聽地址192.168.10.40server_name www.benet.com;charset utf-8;access_log logs/www.benet.access.log; location / {root /var/www/html/benet;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}
}
}
systemctl restart nginx瀏覽器訪問
http://192.168.10.21
http://192.168.10.40
6.6 基于端口的 Nginx 虛擬主機
6.6.1 基于端口1
vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 192.168.10.21:8080; #設置監聽 8080 端口server_name www.yjs.com;charset utf-8;access_log logs/www.yjs.access.log; location / {root /var/www/html/yjs;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}
6.6.2 基于端口2
server {listen 192.168.10.21:8888; #設置監聽 8888 端口server_name www.benet.com;charset utf-8;access_log logs/www.benet.access.log; location / {root /var/www/html/benet;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}
}
}
6.6.3 重啟服務,測試訪問
systemctl restart nginx瀏覽器訪問
http://192.168.10.21:8080
http://192.168.10.21:8888
ame www.yjs.com;charset utf-8;access_log logs/www.yjs.access.log; location / {root /var/www/html/yjs;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}
6.6.2 基于端口2
server {listen 192.168.10.21:8888; #設置監聽 8888 端口server_name www.benet.com;charset utf-8;access_log logs/www.benet.access.log; location / {root /var/www/html/benet;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}
}
}
6.6.3 重啟服務,測試訪問
systemctl restart nginx瀏覽器訪問
http://192.168.10.21:8080
http://192.168.10.21:8888
總結
本文系統介紹了 Web 服務的基本概念、HTTP/HTTPS 協議的工作機制,以及 Nginx 服務器的核心功能與配置方法。通過學習,我們了解到:
-
Web 服務基于 B/S 架構,通過 HTTP/HTTPS 協議實現瀏覽器與服務器之間的通信;
-
靜態資源與動態資源在處理方式上有本質區別,Nginx 能高效處理兩者;
-
Nginx 不僅可作為靜態資源服務器,還支持反向代理、負載均衡、高并發處理等高級功能;
-
通過配置虛擬主機,可以實現基于域名、IP 和端口的多種網站托管方式;
-
Nginx 的模塊化設計和靈活的配置語法,使其成為構建現代 Web 架構的重要工具。
掌握這些內容,不僅有助于理解 Web 服務的工作原理,也能為后續搭建、優化和維護 Web 服務器提供堅實的理論與實踐基礎。