1. 程式人生 > >nginx入門的基礎知識總結

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   如有疑問  請留言 (歡迎大家    批評指正)