nginx入門的基礎知識總結
大概兩週的時間完成:
知識點:1.簡單介紹
2.安裝與啟動
3.全域性端配置資訊
4.server段配置虛擬主機
5.日誌管理
6.pathinfo配置
7. try_files介紹
8. 反向代理
9.叢集與負載均衡
1.nginx介紹
是一款輕量級web伺服器/反向代理伺服器及電子郵件代理伺服器
最牛逼的組合:lnmp(linux nginx mysql php)
2.安裝與啟動
1》安裝
1)獲取網址:http://nginx.org/download/
2) 安裝依賴庫:pcre 命令:yum install pcre pcre-devel
3)cd /usr/local/src(放置nginx包目錄) wget nginx下載地址
4)tar xzvf nginx壓縮包 cd nginx解壓包 ./configure --prefix=/usr/local/nginx make && make install
5) yum 安裝參考連結:https://blog.csdn.net/zph1234/article/details/51250523
2》 啟動
原始碼安裝命令
啟動:nginx 測試 nginx -t 載入最新配置 nginx -s reload
立即停止:nginx -s stop
優雅停止:nginx -s quit(此停止所謂的優雅 指正在進行的nginx程序不受影響,會執行完成後再斷開)
重新開啟日誌: nginx -s reopen (在日誌需要備份時 在不斷開伺服器的情況下切換日誌檔案)
最好參考yum安裝nginx
命令: 啟動:systemctl start nginx 停止:systemctl stop nginx 重啟:systemctl restart nginx
遇到的問題
預設埠號:80 如果啟動失敗 一般為埠被佔用,用命令 netstat -anp | grep 80 停止佔用的埠 或者修改nginx的埠,再次啟動
3. 全域性段配置資訊
// 全域性區
// 有1個工作的子程序,可以自行修改,但太大無益,因為要爭奪CPU,
// 一般設定為 CPU數*核數
worker_processes 1; // 正常就是(cpu個數)*(核數)
Events {
// 一般是配置nginx連線的特性
// 如1個worker能同時允許多少連線
worker_connections 1024; // 這是指 一個子程序最大允許連1024個連線
}
http { //這是配置http伺服器的主要段
Server1 { // 這是虛擬主機段
Location { //定位,把特殊的路徑或檔案再次定位 ,如image目錄單獨處理
} /// 如.php單獨處理
}
Server2 {
}
}
4. 基於域名的虛擬主機
server {
listen 80; #監聽埠
server_name a.com; #監聽域名,如有多個,空格隔開
location / {
root /var/www/a.com; #根目錄定位
index index.html; #預設索引頁
}
}
例子2: 基於埠的虛擬主機配置
server {
listen 8080;
server_name a.com;
location / {
root /var/www/html8080;
index index.html;
}
}
5. 日誌管理:
我們觀察nginx的server段,可以看到如下類似資訊
access_log logs/access.log main;
這說明 該server, 它的訪問日誌的檔案是 logs/host.access.log ,
日誌格式”main”格式.
main格式是什麼?
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
除了main格式,你可以自定義其他格式.
log_format mylog '$remote_addr [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
server {
listen 80;
#下面宣告a.com使用mylog格式日誌,並儲存在logs/a.com.log檔案中
access_log logs/a.com.log mylog;
server_name a.com www.a.com;
....
}
main格式是我們定義好一種日誌的格式,並起個名字,便於引用.
以上面的例子, main型別的日誌,記錄的 remote_addr.... http_x_forwarded_for等選項.
日誌格式 是指記錄哪些選項
預設的日誌格式: main
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
如預設的main日誌格式,記錄這麼幾項
遠端IP- 遠端使用者/使用者時間 請求方法(如GET/POST) 請求體body長度 referer來源資訊
http-user-agent使用者代理/蜘蛛 ,被轉發的請求的原始IP
http_x_forwarded_for:在經過代理時,代理把你的本來IP加在此頭資訊中,傳輸你的原始IP
實際應用: shell+定時任務+nginx訊號管理,完成日誌按日期儲存
分析思路:
凌晨00:00:01,把昨天的日誌重新命名,放在相應的目錄下
再USR1資訊號控制nginx重新生成新的日誌檔案
具體指令碼:
#!/bin/bash
base_path='/usr/local/nginx/logs'
log_path=$(date -d yesterday +"%Y%m")
day=$(date -d yesterday +"%d")
mkdir -p $base_path/$log_path
mv $base_path/access.log $base_path/$log_path/access_$day.log
#echo $base_path/$log_path/access_$day.log
/usr/local/nginx/sbin/nginx -s reopen
定時任務
Crontab 編輯定時任務
01 00 * * * /xxx/path/b.sh
每天0時1分(建議在02-04點之間,系統負載小)
多行註釋和取消註釋
註釋: :n1,n2s/^/#/g 取消註釋: :n1,n1s/^#//g
6.pathinfo設定
nginx本身是不支援pathinfo 所以需要我們設定
1)如:url http://www.shen.com/index.php/home/index/index 如果我們沒有開啟pathinfo 則會報招不到 404 Not Found
解決:
修改這兩處 則支援pathinfo ok
2)去掉index.php 讓連結也可以用 這時需要用到nginx重寫功能
在對應的地方新增對應的這幾行程式碼 輕鬆搞定
7. try_files介紹
強大的try_files 直接替換掉第6部裡的(1)(2)功能
完美解決 就是這麼簡單
8. 反向代理
反向代理 主要一個命令是proxy_pass 原理簡單點說就是:配合location模組的正則匹配 匹配到相關模組 或 一類檔案 然後用proxy_pass代理到對應的伺服器上找到對應的檔案或者目錄
實現方式:
這個是實現了匹配到 baidu 會自動代理到百度頁 (我們可以自己嘗試著做下匹配圖片格式 把圖片放到另外一個伺服器 然後代理到對應伺服器上就ok 注意一點: 要加上http://)
9.叢集與負載均衡
叢集:就是多臺伺服器提供服務為叢集
負載均衡:是多臺伺服器的壓力要均衡(搭配負載均衡策略)
1)越是高大上的東西 越簡單 (這是很多人的共識哦 這話不是我說的 不要打我)
2) 實現原理:nginx有個upstream模組,在這裡我們要定義下自己的伺服器 在location裡用proxy_pass代理過來就ok
3) upstream daili {
server 192.168.1.108;
server 192.168.1.107;
}
在伺服器後可以跟 weight=5(權重) fail_timeout=5s(超時失敗時間) max_fails=3(失敗重試詞數) 。。。
location / {
root html;
index index.html index.htm;
proxy_pass http://daili;
}
4) 負載均衡策略:
1. 輪詢(預設)
2. ip_hash
3. hash(根據url 引數 hash)
4.fail (第三方 根據伺服器響應時間分配)
ok 如有疑問 請留言 (歡迎大家 批評指正)