nginx基礎配置html
1、nginx經常使用命令nginx
nginx -s reload:在nginx已經啓動的狀況下從新加載配置文件(平滑重啓)web
nginx -s reopen:從新打開日誌文件正則表達式
nginx -c /特定目錄/nginx.conf:以特定目錄下的配置文件啓動nginx後端
nginx -t:檢測當前配置文件是否正確緩存
nginx -t -c /特定目錄/nginx.conf:檢測特定目錄下的nginx配置文件是否正確服務器
nginx -v:顯示版本信息cookie
nginx -V:顯示版本信息和編譯選項網絡
2、nginx文件結構session
... #main塊
events { #events塊
...
}
http #http塊
{
server #server塊
{
location [PATTERN] #location塊
{
...
}
}
}
main塊:配置影響nginx全局的指令。通常有運行nginx服務器的用戶組,nginx進程pid存放路徑,日誌存放路徑,配置文件引入,容許生成worker process數等。
events塊:配置影響nginx服務器或與用戶的網絡鏈接。有每一個進程的最大鏈接數,選取哪一種事件驅動模型處理鏈接請求,是否容許同時接受多個網路鏈接,開啓多個網絡鏈接序列化等。
http塊:能夠嵌套多個server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日誌自定義,是否使用sendfile傳輸文件,鏈接超時時間,單鏈接請求數等。
server塊:配置虛擬主機的相關參數,一個http中能夠有多個server。
location塊:配置請求的路由,以及各類頁面的處理狀況。
3、經常使用配置指令
1.默認配置指令
worker_processes:配置nginx的工做進程數,通常設爲CPU總核數或者總核數的兩倍
worker_connections:配置nginx容許單個進程併發鏈接的最大請求數
include:用於引入配置文件
default_type:設置默認文件類型
sendfile:默認值爲on,表示開啓高效文件傳輸模式
keepalive_timeout:設置長鏈接超時時間,單位:秒
listen:監聽端口,默認監聽80端口
server_name:設置主機域名
root:設置主機站點根目錄地址
index:指定默認索引文件
error_page:自定義錯誤頁面
2.location的前綴配置
=:根據其後的指定模式進行精準匹配
~:使用正則表達式完成location的匹配,區分大小寫
~*:使用正則表達式完成location的匹配,不區分大小寫
^~:不使用正則表達式,完成以指定模式開頭的location匹配
@:用於定義一個location塊,且該塊不能被外部客戶端所訪問,只能被nginx內部配置指令所訪問
3.nginx內置變量
$args 請求中的參數;
$binary_remote_addr 遠程地址的二進制表示
$body_bytes_sent 已發送的消息體字節數
$content_length HTTP請求信息裏的"Content-Length"
$content_type 請求信息裏的"Content-Type"
$document_root 針對當前請求的根路徑設置值
$document_uri 與$uri相同
$host 請求信息中的"Host",若是請求中沒有Host行,則等於設置的服務器名;
$http_cookie cookie 信息
$http_referer 來源地址
$http_user_agent 客戶端代理信息
$http_via 最後一個訪問服務器的Ip地址
$http_x_forwarded_for 至關於網絡訪問路徑。
$limit_rate 對鏈接速率的限制
$remote_addr 客戶端地址
$remote_port 客戶端端口號
$remote_user 客戶端用戶名,認證用
$request 用戶請求信息
$request_body 用戶請求主體
$request_body_file 發日後端的本地文件名稱
$request_filename 當前請求的文件路徑名
$request_method 請求的方法,好比"GET"、"POST"等
$request_uri 請求的URI,帶參數
$server_addr 服務器地址,若是沒有用listen指明服務器地址,使用這個變量將發起一次系統調用以取得地址(形成資源浪費)
$server_name 請求到達的服務器名
$server_port 請求到達的服務器端口號
$server_protocol 請求的協議版本,"HTTP/1.0"或"HTTP/1.1"
$uri 請求的URI,可能和最初的值有不一樣,好比通過重定向之類的
4、權限控制指令
nginx中提供了兩個用於配置訪問權限控制的指令allow和deny。allow用於設置容許訪問的權限;deny用於設置禁止訪問的權限。在使用時,權限指令後只需跟上容許或禁止的IP、IP段或者all便可,其中all表示全部。
須要注意一下幾點:
1.單個IP指定做用範圍最小,all指定做用範圍最大。
2.同一塊下,若同時存在多個權限指令,則先出現的訪問權限設置生效,而且會對後出現的設置進行覆蓋,未覆蓋的範圍依然生效,不然以先出現的設置爲準。
3.當多個塊中都出現了權限設置指令,則內層塊中的權限級別要比外層塊中的設置的權限級別高。
5、nginx反向代理
反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器;並將從服務器上獲得的結果返回給Internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。
在nginx服務器中,反向代理的配置很是簡單,最主要的指令是proxy_pass,用於設置後端服務器的地址。該地址中包括傳輸數據使用的協議、服務器主機名以及可選的URI資源等。
在nginx配置文件中,proxy_pass指令一般在location塊中進行設置。
1.經常使用反向代理指令
proxy_set_header:在將客戶端請求發送給後端服務器以前,更改來自客戶端的請求頭信息
proxy_connect_timeout:配置nginx與後端代理服務器嘗試創建鏈接的超時時間
proxy_read_timeout:配置nginx向後端服務器組發出read請求後,等待響應的超時時間
proxy_send_timeout:配置nginx向後端服務器組發出write請求後,等待響應的超時時間
proxy_redirect:用於修改後端服務器返回的響應頭中的location和Refresh
6、nginx負載均衡
負載均衡就是將負載分攤到多個操做單元上執行,從而提升服務的可用性和響應速度,帶給用戶更好的體驗。
1.nginx負載均衡配置方式
輪詢方式:負載均衡默認設置方式,每一個請求按照時間順序逐一分配到不一樣的後端服務器進行處理,若是有服務器宕機,會自動剔除
權重方式:利用weight指定輪詢的權重比例,與訪問率成正比,用於後端服務器性能不均的狀況
ip_hash方式:每一個請求按訪問IP的hash結果分配,這樣就可使每一個訪客固定訪問一個後端服務器,能夠解決session共享的問題
第三方模塊:第三方模塊採用fair時,按照天天服務器的響應時間來分配請求,響應時間短的優先分配;若第三方模塊採用url_hash時,按照訪問url的hash值來分配請求
2.經常使用狀態參數
max_fails:容許請求失敗的次數,默認爲1。當超過最大次數時,返回proxy_next_upstream指令定義的錯誤
fail_timeout:在經歷了max_fails次失敗後,暫停服務的時間。且在實際應用中max-fails通常與fail_timeout一塊兒使用
backup:預留的備份機器
down:表示當前的server暫時不參與負載均衡
注意:在使用ip_hash方式處理負載均衡時,web服務器在負載均衡列表中的狀態不能使用weight和backup設置
7、nginx緩存配置
1.http級別的緩存配置
##cache##
#跟後端服務器鏈接的超時時間_發起握手等候響應超時時間
proxy_connect_timeout 500;
#鏈接成功後_等候後端服務器響應的時間_其實已經進入後端的排隊之中等候處理
proxy_read_timeout 600;
#後端服務器數據回傳時間_就是在規定時間內後端服務器必須傳完全部數據
proxy_send_timeout 500;
#代理請求緩存區_這個緩存區間會保存用戶的頭信息以供Nginx進行規則處理_通常只要能保存下頭信息便可
proxy_buffer_size 128k;
#同上 告訴Nginx保存單個用的幾個Buffer最大用多大空間
proxy_buffers 4 128k;
#若是系統很忙的時候能夠申請更大的proxy_buffers 官方推薦*2
proxy_busy_buffers_size 256k;
#proxy緩存臨時文件的大小
proxy_temp_file_write_size 128k;
#用於指定本地目錄來緩衝較大的代理請求
proxy_temp_path /usr/local/nginx/temp;
#設置web緩存區名爲cache_one,內存緩存空間大小爲12000M,自動清除超過15天沒有被訪問過的緩存數據,硬盤緩存空間大小200g;levels=1:2表明緩存的目錄結構爲2級目錄
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
2.在訪問靜態文件的location上添加緩存
#靜態數據保存時效
location ~ \.html$ {
proxy_pass http://source.qingk.cn;
proxy_redirect off;
proxy_cache cache_one;
#此處的cache_one必須於上一步配置的緩存區域名稱相同
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1d;
proxy_cache_valid any 1m;
#不一樣的請求設置不一樣的緩存時效
proxy_cache_key $uri$is_args$args;
#生產緩存文件的key,經過4個string變量結合生成
expires 30d;
#其他類型的緩存時效爲30天
proxy_set_header X-Forwarded-Proto $scheme;
}
3.清除緩存
該功能能夠採用第三方模塊ngx_cache_purge實現,須要安裝該模塊緩存文件是根據proxy_cache_key這個指令生成的,因此找到對應的緩存文件,刪除便可location ~ /purge(/.*) { #刪除指定緩存區域cache_one的特定緩存文件$1$is_args$args proxy_cache_purge cache_one $1$is_args$args; #運行本機和10.0.0.1網段的機器訪問,拒絕其它全部 allow 127.0.0.1; allow 10.0.0.1/24; deny all;}