nginx進階-3(33-34天)學習筆記
知識回顧
1. nginx部署單機網站
2.nginx部署多個網站
3.nginx訪問方式
4.nginx 安全
5.nginx加密訪問
實戰
00---nginx企業實戰
1.nginx搭建一個檔案共享供使用者下載的伺服器
#步驟
1.配置nginx檔案
cd /usr/local/nginx/conf/vhost
vi bbs.conf #這裡你設定的是那個網站,你就開啟那個網站的配置目錄
1.1開啟站點索引功能+註釋index.html索引檔案
server {
listen 80;
server_name www.it.com;
location / {
root /html/www;
autoindex on; #開啟nginx站點目錄索引功能
#index index.html index.htm;
}
}
1.2 檢查並重啟nginx
nginx -t
nginx -s reload
1.3刪除你原先網站下的index.html檔案(不刪掉會影響頁面展示,否則還是會開啟它的index.html網頁)
cd /html/bbs
rm -rf index.html
2.上傳檔案到釋出目錄下
cd /html/www
rz(上傳或者其他工具上傳)
tips:上傳你需要上傳的檔案就可以了,這裡需要把你網站的index.html給刪掉,注意你設定是那個網站,就刪哪個網站的index.html網頁檔案就可以了
3.測試
10.0.1.106
效果圖
2.nginx出現中文亂碼如何解決
#步驟
1.配置nginx檔案
cd /usr/local/nginx/vhost
vi www.conf
server {
listen 80;
server_name www.it.com;
location / {
root /html/www;
autoindex on; #開啟nginx站點目錄索引功能
charset utf-8; #設定字符集為utf-8編碼
#index index.html index.htm;
}
}
tips:
charset utf-8
由於我們這裡設定的是網頁上傳和下載的網頁,加上現在網站普遍採用的都是utf-8編碼,且都適配utf-8編碼,所以為了不讓網頁出現亂碼,加上這個就可以了
nginx -t
nginx -s reload
3.網站頁面別名功能
#步驟
別名==子域名
1.#第一步域名解析
tips:由於我們是模擬環境,所以再Windows下去做一下域名解析
C:\Windows\System32\drivers\etc
開啟hosts檔案
新增一下域名
10.0.1.104 www.it.com bbs.it.com blog.it.com it.com
2.#第二步 nginx配置
cd /usr/local/nginx/conf/vhost
#tips:進入到你需要更改的域名配置目錄,新增一下子域名就可以了
vi www.conf
server {
listen 80;
server_name www.it.com it.com;
location / {
root /html/www;
index index.html index.htm;
}
}
3.#測試
nginx -t
nginx -s reload
#tips:輸入你自己的域名就可以了,再看一下你自己設定的別名可不可以訪問
www.it.com 主域名
it.com 別名=子域名
4.網站監控狀態頁面
#步驟
#方式
01---第一種方式 新增模組
02---第二種方式 新建域名配置監控檔案(此操作是把監控模組與主域名分開關閉,主域名就是主域名 ,監控模組設定其他域名,但都是一個釋出目錄)
1.#安裝模組
tips:yum安裝是有預設模組的,可以用nginx -V看一下自己的模組依賴
如果你是編譯安裝。應該是沒有這個模組的,所以這裡安裝一下
with-http_stub_status_module -----(模組名)
cd /usr/local/src
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
make
make install
#tips2:此過程就是重新編譯安裝,注意這裡是進入到你的nginx安裝包路徑,不是配置路徑也不是釋出路徑
2.#配置nginx.conf檔案
cd /usr/local/nginx/vhost
vi www.conf
tips:新增一下內容
server {
listen 80;
server_name www.it.com it.com;
location / {
root /html/www;
index index.html index.htm;
}
location =/status;{ #這個位置就是定義一個監控status模組 模組名你可以隨便取 ,後面監控是域名+你定義的監控模組名就可以了
stub_status;
}
}
3.#重啟nginx
nginx -t
nginx -s reload
nginx -s stop
nginx
#tips:擴充套件模組 一般都需要關閉nginx在啟動,模組才可生效
4.#測試
www.it.com/status
#tips:模組註解
location =/status;{ #這個位置就是定義一個監控status模組 模組名你可以隨便取 ,後面監控是域名+你定義的監控模組名就可以了
stub_status;
}
02---第二種方式 新建域名配置監控檔案(此操作是把監控模組與主域名分開關閉,主域名就是主域名 ,監控模組設定其他域名,但都是一個釋出目錄)
1.#新建配置檔案
#tips:進入釋出目錄
cd /usr/local/nginx/conf/vhost
cp www.conf www1.conf
vi www1.conf
新增以下內容
server {
listen 80;
server_name s.it.com;
stub_status;
}
2.#重啟nginx
nginx -t
nginx -s relaod
nginx -s stop
nginx
3.#測試
s.it.com
結果如下
Active connections: 2 :使用者連線數
server
accepts:11 接受連線數
handled:11 處理連線數
requests:107 請求連線數
Reading: 0 請求報文 沒人點餐
Writing: 1 響應報文
Waiting: 1 佇列
5.錯誤日誌講解
#開啟nginx日誌目錄(分析)
1.#進入日誌目錄
cd /usr/local/nginx/logs 日誌目錄
#錯誤日誌:
error.log
#配置如下:
worker_processes 2;
events {
worker_connections 2024;
}
error_log /usr/local/nginx/logs/nginx-error.log warn; #這個warn就是一個錯誤級別,當然你也可以定義其他級別,但是不影響nginx執行
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /usr/local/nginx/conf/vhost/*.conf;
}
#tips:
worker_processes 2;
events {
worker_connections 2024;
}
error_log /usr/local/nginx/logs/nginx-error.log warn; #這個warn就是一個錯誤級別,當然你也可以定義其他級別,但是不影響nginx執行
#錯誤級別講解:
warn:警告級別 錯誤日誌 但是不影響執行
error: 錯誤級別 我們伺服器出現錯誤 需要糾正 推薦用這個
debug:除錯級別 錯誤資訊詳細展示
info:資訊級別 顯示重要的資訊
notice:
6.(自定義配置日誌(多個網站))
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 定義日誌內容格式
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#需求:
www.it.com 日誌 www.log
bbs.it.com 日誌 bbs.log
blog.it.com 日誌 blog.log
#目的實現:
每個網站都要有對應自己的日誌檔案,便於管理
#步驟
#1.配置nginx配置目錄 (nginx目錄)
tips:配置目錄 配置目錄 配置目錄 不是日誌目錄
cd /usr/local/nginx/conf/
vi nginx.conf
新增如下內容
worker_processes 2;
events {
worker_connections 2024;
}
error_log /usr/local/nginx/logs/nginx-error.log warn;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include /usr/local/nginx/conf/vhost/*.conf;
}
#2.配置nginx網站目錄(網站目錄配置檔案)
cd /usr/local/nginx/conf/vhost/
vi www.conf
#tips:新增是這行內容access_log /data/logs/www.log main;
如果沒有/data/logs 這個日誌存放目錄 可以建立一下
mkdir -p /data/logs
server {
listen 80;
server_name www.it.com it.com localhost;
access_log /data/logs/www.log main;
location / {
root /html/www;
index index.html index.htm;
}
location =/status;{
stub_status;
}
}
#2.2配置bbs網站目錄
cd /usr/local/nginx/conf/vhost/
vi bbs.conf
#tips:同樣新增日誌檔案目錄到bbs網站的配置檔案裡
access_log /data/logs/www.log main;
server {
listen 80;
server_name bbs.it.com;
access_log /data/logs/www.log main; #也是新增這個位置內容
location / {
root /html/www;
index index.html index.htm;
}
location =/status;{
stub_status;
}
}
#3.檢查-重啟nginx
nginx -t
nginx -s reload
nginx -s stop
nginx
#4.測試
cd /data/logs
ls
tips :開啟你的網站,不斷重新整理,檢視/data/logs下是否有日誌日誌
用tail 來檢視,tail可以事實檢視檔案狀態
重點了解
#5新增的配置日誌檔案註釋
$remote_addr:客戶端ip
$remote_user:顯示使用者的資訊
[$time_local]:顯示訪問網站時間
$request:請求報文方式
$status:狀態碼
$body_bytes_sent:響應資料資訊
"$http_referer":記錄呼叫網站地址資訊
$http_user_agent":客戶端用什麼瀏覽器訪問
"$http_x_forwarded_for"' 客戶端真實ip
#總結:為什麼要做網站日誌配置?
因為在生產環境中,如果你的nginx伺服器上不止一個網站的話,恰好此時領導需要其中一個的日誌檔案,如果你沒有配置,那麼幾個網站的日誌檔案肯定會在同一個日誌檔案裡,不便於你做切分 ,所以此時我們就需要給每個網站所生成的配置檔案做個單獨的日誌檔案,方便後期維護和管理。
7.location匹配講解(細細掌握)
location詳細配置:
1. location = # 精準匹配 01 1
2. location ^~ # 帶參字首匹配 2
3. location ~ # 正則匹配(區分大小寫) 3
4. location ~* # 正則匹配(不區分大小寫) 4
5. location /a # 普通字首匹配,優先順序低於帶引數字首匹配。 5
6. location / # 任何沒有匹配成功的,都會匹配這裡處理 6
tips:知道匹配規則,知道怎麼用
server {
listen 80;
server_name www.it.com
location =/ { 優先順序01
return 404;
}
location / { 最後匹配
return 403;
}
location =/abc { 優先03
return 501;
}
location ^~ /pig { 優先順序02
return 502;
}
location ~* \.(gif|jpg|jpeg)$ { 優先順序03
return 500;
}
}
8.nginx rewrite 實現URL跳轉講解---重定向(nginx重定向)
^ 指定匹配字串開始
$ 指定匹配字串結束
. 任意非空字元
+ 量詞,匹配1次或多次
* 匹配0次或多次
[] 匹配括號中的任意一項
? 量詞,匹配0次或1次
() 作為一個整體匹配
需求1 開啟網站跳轉到百度
server {
listen 80;
server_name www.it.com it.com localhost ;
access_log /data/logs/www.log main;
rewrite ^/(.*) https://www.baidu.com/$1 permanent;
需求2 開啟網站跳轉到https協議
http: 80
https:443
#步驟
#tips:需瞭解字元
^ 指定匹配字串開始
$ 指定匹配字串結束
. 任意非空字元
+ 量詞,匹配1次或多次
* 匹配0次或多次
[] 匹配括號中的任意一項
? 量詞,匹配0次或1次
() 作為一個整體匹配
#需求1 開啟網站跳轉到百度
1.#配置nginx網站配置目錄
cd /usr/local/nginx/conf/vhost
vi www.conf
server {
listen 80;
server_name www.it.com it.com localhost ;
access_log /data/logs/www.log main;
rewrite ^/(.*) https://www.baidu.com/$1 permanent; #主要新增的就是這一行
2.#檢查-重啟
nginx -t
nginx -s reload
nginx -s stop
nginx
tips:開啟網站看跳不跳轉百度頁面
www.it.com
#tips:重定向指令碼註解
這段配置指令來自於 Nginx 伺服器的重寫模組(rewrite module),它的作用是將接收到的請求地址進行重定向。具體來說:
nginx
rewrite ^/(.*) https://www.baidu.com/$1 permanent;
- rewrite:指令關鍵字,用於在Nginx內部執行URL的重寫操作。
- ^/(.*):正規表示式匹配部分,這裡的 ^ 表示匹配URL的開始,(.*) 是一個捕獲組,它會匹配任何非空字元序列(除了換行符),也就是說,它會匹配從URL開始到結束的所有路徑部分。
- https://www.baidu.com/$1:重寫的目標地址,其中 $1 是對前面正規表示式中第一個捕獲組內容的引用,這意味著原URL中的任何路徑都將被複制並貼上到目標地址的對應位置。
- permanent:重寫型別,表示此次重寫應以301 Moved Permanently(永久重定向)HTTP狀態碼的形式告知客戶端瀏覽器,搜尋引擎和其他服務這次重定向是永久性的,以便它們可以更新索引和快取。
因此,這條規則的工作原理是,當Nginx接收到任何以伺服器域名開頭的請求時,它都會將請求的完整路徑(包括查詢字串)重定向到 https://www.baidu.com/ 加上字首的相同路徑。
#需求2 開啟網站跳轉到https協議
需求解釋:就是原先的http80埠不安全,需要把http80埠跳轉到安全的https協議443埠,所以
http: 80
https:443
(需要ssl的證書)
1.#配置nginx網站配置目錄
cd /usr/local/nginx/conf/vhost
vi www.conf
server {
listen 80;
server_name www.it.com it.com localhost ;
access_log /data/logs/www.log main;
rewrite ^/(.*) https://www.baidu.com/$1 permanent; #主要新增的就是這一行
2.#檢查-重啟
nginx -t
nginx -s reload
nginx -s stop
nginx
#tips:一般掌握重定向就可以了,https這個都是在生產環境中成型的,不太需要配置,除非新上線的網站,域名需要配置https
#總結:為什麼需要重定向?什麼場合?
1.網站遷移或改版: 當網站的域名發生變化、或者網站結構調整(例如從HTTP遷移到HTTPS,或者目錄結構變動),可以透過重定向將舊網址引導到新網址,保持使用者訪問的連貫性,同時也利於搜尋引擎更新索引,減少因網址變更帶來的流量損失。
2.URL規範化: 為了統一網站的訪問入口,可以設定重定向規則,例如去除URL末尾的斜槓“/”、轉換大小寫字母、去掉多餘的引數等,以提升SEO效果及使用者體驗。
3.維護公告或臨時關閉: 當網站進行臨時維護時,可以將所有訪問重定向到一個公告頁面,通知使用者網站目前不可用,並給出預計恢復時間。
4.移動端適配: 對於響應式設計之外的網站,可以針對不同裝置或解析度進行重定向,例如將手機和平板使用者的訪問重定向到專門最佳化過的移動版網站。
5.清除會話或登入狀態: 當使用者登出賬戶後,可以透過重定向將其導航到首頁或者其他預設頁面,確保使用者在登出後不會停留在含有敏感資訊的頁面。