學習燕十八的 Nginx 視訊教程所做的一些筆記。比較簡單雜亂,自己能看懂?
-
conf 配置檔案
-
html 網頁檔案
-
logs 日誌檔案
- sbin 主要二進位制程式
訊號量
- kill 訊號量 程式號
訊號量 | 作用 |
---|---|
TERM,INT | 立刻停止 |
QUIT | 優雅停止 |
HUP | 改變配置檔案,平滑的載入配置檔案 |
USR1 | 重讀日誌檔案,在日誌按月/日分割時有用 |
USR2 | 平滑升級 |
WINCH | 優雅關閉舊的程式(配合 USR2 來進行升級) |
如何獲得程式號:
-
通過 ps aux|grep nginx
- 通過 nginx 配置檔案檢視 pid 寫在哪個檔案 (如
kill -HUP `cat logs/nginx.pid`
)
控制命令
-
-s s 代表 signal(訊號量)
-
nginx -s stop 立刻停止(INT)
-
nginx -s quit 優雅停止(QUIT)
-
nginx -s reload 平滑的載入配置檔案(HUP)
-
nginx -s reopen 重讀日誌檔案(USR1)
- nginx -t 測試配置檔案是否出錯
配置檔案
worker-process 1;//指有一個工作的子程式,可以自行修改,一般設定為 CPU 數*核數
Event{
//一般配置 nginx 連線特性
worker------connections 1024; //指一個子程式最大允許 1024 個連線
}
http{
//配置 http 伺服器的主要段
server{
//虛擬主機段
listen 80;//監聽埠
server_name xxx.com;//監聽的域名或者ip
location / {
root 檔案路徑,相對於 nginx 根路徑
}
access_log logs/host.access.log main;//該 server,訪問的日誌檔案是 logs/host.access.log,格式是 main 格式,可以自定義其他格式
}
}
Location 段
location = patt{} 精準匹配
location patt{} 一般匹配
location ~ patt{} 正則匹配
首先看看有沒有精準匹配,如果有停止匹配過程
Rewrite 語法
if 空格 (條件){
重寫模式
}
條件的寫法:
-
'='來判斷是否相等,用於字串比較
-
'~'用來判斷正則匹配(區分大小寫),'~*'不區分大小寫
- -f -d -e 來判斷是否為檔案,為目錄,是否存在
例子:
if ($request_mothed=POST){
return 403;
}
//判斷瀏覽器是否是 IE
if ($http_user_agent ~* msie){
rewrite ^.*$ ie.html;
break;//防止迴圈重定向
}
//如果訪問不存在的路徑
if (!-e $document_root$fastcgi_script_name){
rewrite ^.*$ 404.html;
break;//仍然要加 break
//或者 rewrite ^.*$ 404.html break;
}
ps:伺服器內部的 rewrite 和 302 跳轉不一樣,內部的 rewrite 上下文沒變。
set 是設定變數用的,可以用來達到多條件判斷時作標誌用。達到 apache 下的 rewrite_condition 的效果
if ($http_user_agent ~* msie){
set $isie 1;/
}
if ($fastcgi_scrip_name = ie.html){
set $isie 0;
}
if ($isie = 1){
rewrite ^.*$ ie.html;//如果是ie瀏覽器且訪問的不是 ie.html 則重定向,作用同上面的 break
}
//url 重寫
location /ecshop{
rewrite "goods-(\d{1,7})\.html" /ecshop/goods.php?id=$1;
}
ps:正則裡如果有{},正則要用""包括
整合 PHP
Apache 一般是把 PHP 當作自己的模組來啟動。
而 Nginx 則是把 HTTP 請求變數(如 get,user_agent 等)轉發給 php 程式,與 Nginx 進行通訊,稱為 fastcgi 執行方式
編譯後的php以 fpm(fastcgi)方式執行
把請求的資訊轉發給 9000 埠的 PHP 程式,讓 PHP 處理,指定目錄下的 PHP 檔案
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
-
碰到 php 檔案
-
把根目錄定位到 html
-
把請求上下文轉交給 php 程式
- 並告訴 php 程式,當前的指令碼是 $document_root$fastcgi_script_name,php 就會去找這個指令碼並處理
gzip 壓縮
常用引數
gzip on|off; #是否開啟gzip
gzip_buffers 32 4K| 16 8K #緩衝(壓縮在記憶體中緩衝幾塊? 每塊多大?)
gzip_comp_level [1-9] #推薦6 壓縮級別(級別越高,壓的越小,越浪費CPU計算資源)
gzip_disable #正則匹配UA 什麼樣的Uri不進行gzip
gzip_min_length 4000 # 開始壓縮的最小長度(再小就不要壓縮了,意義不在)
gzip_http_version 1.0|1.1 # 開始壓縮的http協議版本(可以不設定,目前幾乎全是1.1協議)
gzip_proxied # 設定請求者代理伺服器,該如何快取內容
gzip_types text/plain application/xml # 對哪些型別的檔案用壓縮 如txt,xml,html ,css
gzip_vary on|off # 是否傳輸gzip壓縮標誌
可以寫在 http,server,location 裡
ps:圖片,MP3 這樣的二進位制檔案不必壓縮,因為壓縮比比價小