從Nginx配置看關鍵技術

2021-06-09 14:49:46 字數 4704 閱讀 6999

1.虛擬主機

1)基於ip位址

在講解基於ip的虛擬主機之前,先介紹一下ip別名。

ip別名背後的概念很簡單:可以在一塊物理網絡卡上繫結多個ip位址.這樣就能夠在使用單一網絡卡的同一伺服器上執行多個基於ip的虛擬主機.

如果要在eth0網絡卡裝置上新增兩個ip別名192.168.8.43和192.168.8.44可以通過以下ifconfig 和route命令來進行:

/sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up

/sbin/route add -host 192.168.8.43 dev eth0:1

/sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up

/sbin/route add -host 192.168.8.44 dev eth0:2

配置後如果能從另外一台伺服器ping 192.168.8.43和192.168.8.44 ,如果能ping通,則證明配置無誤.

但是通過ifconfig 和route配置的ip別名在伺服器重啟後會消失.不過可以將這兩條命令新增到/etc/rc.local檔案中,讓系統開機時自動執行,

vi /etc/rc.local在檔案末尾增加以下內容,然後儲存即可.

/sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up

/sbin/route add -host 192.168.8.43 dev eth0:1

/sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up

/sbin/route add -host 192.168.8.44 dev eth0:2

分別對192.168.8.43,192.168.8.44,192.168.8.45三個ip配置三個純靜態html支援的虛擬主機

} #第二個虛擬主機

server

} #第三個虛擬主機

server }}

2)基於網域名稱

基於網域名稱的虛擬主機是最常見的虛擬主機,只需配置dns伺服器,將每個主機名對映到正確的ip位址,然後配置nginx伺服器,

令其識別不同的主機名即可.這種技術可以使很多虛擬主機共享同乙個ip位址.

nginx中配置基於網域名稱的虛擬主機.主機1對aaa.domain.com的訪問都由它來處理,主機2對bbb.otherdomain.com的訪問都由

它來處理,主機3對網域名稱www.domain.com,domain.com及aaa.domain.com之外的所有*.domain.com二級網域名稱的訪問都由它來處理

.每個虛擬主機的網頁檔案分別存放在了不同的目錄中,每個虛擬主機使用了不同的日誌檔案來記錄訪問日誌.配置情況如下:

} #第二個虛擬主機

server

} #第三個虛擬主機

server }}

3)基於埠號

基於埠號的虛擬主機是通過給每個server配置乙個不同的監聽埠實現的

2.日誌格設定格式為:

log_format name format [format ...]

name 表示定義的格式名稱 , format 表示定義的格式樣式. log_format有乙個預設的,無須設定的combined日誌格式設定.也可以自定義乙份日誌記錄格式,不過需要意,log_format指令設定的name名稱在nginx配置檔案中是不能重複的.

具體引數如下:

注意:如果nginx作為web伺服器,位於負載均衡裝置,squid,nginx反向**之後,就沒法獲得客戶端的真實ip位址了.即$reomte_addr變數拿到得不是客戶端的ip位址,而是反向**伺服器的ip位址.但是反向**伺服器在**請求的http頭資訊中,可以增加x-forwarded-for資訊,用來記錄原有的客戶端ip位址和原來客戶端請求的伺服器位址.這個時候可以自定義日誌格式.如下.

在日誌格式中,變數

$remote_addr 和$http_x_forwarded_for用於記錄ip位址

$remote_user 用來記錄遠端客戶端使用者名稱;

$time_local用於記錄訪問時間與時區;

$request用於記錄請求url與http協議;

$status用於記錄請求狀態,例如成功時狀態為200,頁面找不到時狀態為404;

$body_bytes_sent用於記錄傳送給客戶端的檔案主體內容大小

$http_referer用於記錄是從哪個頁面鏈結訪問過來的;

$http_user_agent用於記錄客戶端瀏覽器的相關資訊

日誌資訊如下:

分別對應以上的變數式自定義

3.其它

1)設定日誌記憶體緩衝區,緩衝日誌

2)設定日誌檔案描述符緩衝區,用於緩衝經常需要開啟的日誌,避免日誌的反覆開啟、關閉操作

例如:open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m ;

max:設定快取中的最大檔案描述符數量

inactive: 設定乙個時間,如果在設定的時間內沒有使用此檔案描述符,則自動刪除此描述符,預設是10秒

min_uses:在引數inactive指定的時間範圍內,如果日誌檔案超過被使用的次數,則將該日誌檔案的描述符記入快取,預設次數為1.

valid:設定檢查時間,看變數指定的日誌檔案路徑與檔名是否仍然存在,預設時間為60秒.

3)日誌檔案的切割

切割命令如下:

mv /data1/logs/access.log /data1/logs/20090318.log

kill -usr1 nginx主程序號

或者(如果在配置檔案中使用了 pid /usr/local/webserver/nginx/nginx.pid指令)

mv /data1/logs/access.log /data1/logs/20090318.log

kill -usr1 'cat /usr/local/webserver/nginx/nginx.pid' 這樣的話就不用ps查詢nginx主程序號了.

如果要讓它每天定時切割日誌,可以編寫shell指令碼.並且利用crontab來每天定時執行.

shell 指令碼**:

#!/bin/bash

#定義nginx日誌檔案的存放路徑

logs_path = "/data1/logs/"

mkdir -p $$(date -d "yesterday" + "%y")/$(date -d "yesterday" +"%m")/

mv $access.log $$(date -d "yesterday" +"%y")/$(date -d "yesterday"+"%m")/

access_$(date -d "yesterday" + "%y%m%d").log

kill -usr1 'cat /usr/local/webserver/nginx/nginx.pid'

再配置crontab,輸入crontab -e

輸入:00 00 * * * /bin/bash /usr/loca/webserver/nginx/sbin/cut_nginx_log.sh

shell指令碼和crontab配置主要實現的功能是:假設今天的日期為2023年5月19日,nginx當前的日誌檔案為/data1/logs/access.log,2023年5月20日00:00會執行cut_nginx_log.sh指令碼,cut_nginx_log.sh指令碼首先建立乙個目錄/data1/logs/2009/05/,然後將/data1/logs/access.log檔案移動並重命名為/data1/logs/2009/05/access_20090519.log,再傳送kill -usr1訊號給nginx主程序,告訴nginx重新生成乙個/data1/logs/access.log檔案,2023年5月20日的日誌記錄在這個新生成的日誌檔案中。而/data1/logs/2009/05/access_20090519.log檔案,就是2023年5月19日的日誌檔案

4)壓縮傳輸

經過gzip壓縮後頁面大小可以變為原來的30%甚至更小,這樣使用者瀏覽頁面的時候速度會快很多.伺服器壓縮,瀏覽器解壓

協議關鍵技術 從國內外案例看未來工具機的關鍵技術

外部的經濟風險,讓人們意識到去工業化的弊端。重返製造業 是許多發達國家的發展戰略。製造業不僅要振興,還要高質量發展。我們今天講得,其產業鏈涵蓋智慧型裝備 3d列印等等環節。智慧型裝備中又包括機械人 數控工具機 以及其他自動化裝備,而工具機是現代製造業的 工作母機 是衡量乙個國家和地區工業水平高低的尺...

cookie關鍵技術

一 cookie是在服務端建立。二 cookie是儲存在瀏覽器端,存放路徑如下截圖。三 cookie的生命週期可以設定,如果不設定生命週期,當瀏覽器關閉時,cookie就消亡。四 cookie可以被同一臺機器的多個瀏覽器共享。五 可以把cookie看成一張表,表字段由 名字,值 組成。六 如果伺服器...

RTOS關鍵技術指標

評價乙個實時作業系統的優劣可以用一下幾個技術指標來衡量。1 任務排程演算法 乙個實時作業系統的任務排程演算法,在很大程度上決定了其系統實時性和其多任務排程能力。常用的任務排程演算法有優先順序排程策略和時間片輪轉排程策略 排程的方式可分為搶占式 不可搶占式和選擇可搶占式等 常用的排程演算法有rate ...