學習 Nginx 的一些筆記,命令配置等

Cellophane發表於2019-03-17

學習燕十八的 Nginx 視訊教程所做的一些筆記。比較簡單雜亂,自己能看懂?

  • conf 配置檔案

  • html 網頁檔案

  • logs 日誌檔案

  • sbin 主要二進位制程式

訊號量

  • kill 訊號量 程式號
訊號量 作用
TERM,INT 立刻停止
QUIT 優雅停止
HUP 改變配置檔案,平滑的載入配置檔案
USR1 重讀日誌檔案,在日誌按月/日分割時有用
USR2 平滑升級
WINCH 優雅關閉舊的程式(配合 USR2 來進行升級)

如何獲得程式號:

  1. 通過 ps aux|grep nginx

  2. 通過 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;

}
  1. 碰到 php 檔案

  2. 把根目錄定位到 html

  3. 把請求上下文轉交給 php 程式

  4. 並告訴 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 這樣的二進位制檔案不必壓縮,因為壓縮比比價小

相關文章