首頁 > 軟體

nginx平滑升級及nginx組態檔詳解

2022-10-16 14:04:46

nginx平滑升級及nginx組態檔

nginx平滑升級並新增新功能

1.先獲取老版本的編譯資訊

2.獲取新版本安裝包和功能包

3.設定新版本或功能,設定時加上老版本的編譯引數,然後新增新功能模組

4.進行編譯,編譯完不進行安裝操作

5.備份老版本程式,使用複製的方法。在停掉老版本程式的程序,將新版本程式複製到老版本所在位置直接替換掉老版本程式並啟動新版本程式

//檢視老版本編譯資訊
[root@nginx ~]# nginx -V
nginx version: nginx/1.20.2
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC) 
built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module

//準備好新版本安裝包和功能包
[root@nginx ~]# wget http://nginx.org/download/nginx-1.22.0.tar.gz

[root@nginx ~]# yum -y install git
[root@nginx ~]# git clone https://gitee.com/Their-own/nginx_module_echo.git
[root@nginx ~]# ls
anaconda-ks.cfg  nginx-1.20.2  nginx-1.20.2.tar.gz  nginx-1.22.0  nginx-1.22.0.tar.gz  nginx_module_echo

//解壓並編譯
[root@nginx ~]# tar xf nginx-1.22.0.tar.gz 
[root@nginx ~]# cd nginx-1.22.0
[root@nginx nginx-1.22.0]# ./configure 
--prefix=/usr/local/nginx 
--user=nginx 
--group=nginx 
--with-debug 
--with-http_ssl_module 
--with-http_realip_module 
--with-http_image_filter_module 
--with-http_gunzip_module 
--with-http_gzip_static_module 
--with-http_stub_status_module 
--add-module=../nginx_module_echo	//新增新功能使用-add-module=模組目錄位置
[root@nginx nginx-1.22.0]# make
[root@nginx nginx-1.22.0]# ls
CHANGES  CHANGES.ru  LICENSE  Makefile  README  auto  conf  configure  contrib  html  man  objs  src
[root@nginx nginx-1.22.0]# objs/nginx -v
nginx version: nginx/1.22.0
[root@nginx nginx-1.22.0]# nginx -v
nginx version: nginx/1.20.2

//一步到位
[root@nginx nginx-1.22.0]# cp /usr/local/nginx/sbin/nginx{,-bak};pkill nginx;cp ./objs/nginx /usr/local/nginx/sbin/nginx;systemctl start nginx
[root@nginx nginx-1.22.0]# nginx -v
nginx version: nginx/1.22.0
[root@nginx nginx-1.22.0]# ss -anlt
State        Recv-Q        Send-Q               Local Address:Port               Peer Address:Port       Process       
LISTEN       0             128                        0.0.0.0:80                      0.0.0.0:*                        
LISTEN       0             128                        0.0.0.0:22                      0.0.0.0:*                        
LISTEN       0             128                           [::]:22                         [::]:*                        

nginx組態檔

主組態檔:/usr/local/nginx/conf/nginx.conf
預設啟動nginx時,使用的組態檔是:安裝路徑/conf/nginx.conf檔案
可以在啟動nginx時通過-c選項來指定要讀取的組態檔
nginx常見的組態檔及其作用

組態檔作用
nginx.confnginx的基本組態檔
mime.typesMIME型別關聯的擴充套件檔案
fastcgi.conf與fastcgi相關的設定
proxy.conf與proxy相關的設定
sites.conf設定nginx提供的網站,包括虛擬主機

nginx.conf設定詳解

nginx.conf的內容分為以下幾段:

  • main設定段:全域性設定段。其中main設定段中可能包含event設定段
  • event {}:定義event模型工作特性
  • http {}:定義http協定相關的設定
    設定指令:要以分號結尾,語法格式如下:
derective value1 [value2 ...];
支援使用變數:
 
內建變數:模組會提供內建變數定義
自定義變數:set var_name value

用於偵錯、定位問題的設定引數

daemon {on|off};    //是否以守護行程方式執行nginx,偵錯時應設定為off
master_process {on|off};    //是否以master/worker模型來執行nginx,偵錯時可以設定為off
error_log 位置 級別;    //設定錯誤紀錄檔
error_log裡的位置和級別能有以下可選項:
位置級別
file stderr syslog:server=address[,parameter=value] memory:sizedebug:若要使用debug級別,需要在編譯nginx時使用–with-debug選項 info notice warn error crit alert emerg

正常執行必備的設定引數

user USERNAME [GROUPNAME];    //指定執行worker程序的使用者和組
pid /path/to/pid_file;    //指定nginx守護行程的pid檔案
worker_rlimit_nofile number;    //設定所有worker程序最大可以開啟的檔案數,預設為1024
worker_rlimit_core size;    //指明所有worker程序所能夠使用的總體的最大核心檔案大小,保持預設即可

優化效能的設定引數

worker_processes n;    //啟動n個worker程序,這裡的n為了避免上下文切換,通常設定為cpu總核心數-1或等於總核心數
worker_cpu_affinity cpumask ...;    //將程序繫結到某cpu中,避免頻繁重新整理快取
//cpumask:使用8位元二進位制表示cpu核心,如:
    0000 0001   //第一顆cpu核心
    0000 0010   //第二顆cpu核心
    0000 0100   //第三顆cpu核心
    0000 1000   //第四顆cpu核心
    0001 0000   //第五顆cpu核心
    0010 0000   //第六顆cpu核心
    0100 0000   //第七顆cpu核心
    1000 0000   //第八顆cpu核心
timer_resolution interval;    //計時器解析度。降低此值,可減少gettimeofday()系統呼叫的次數
worker_priority number;    //指明worker程序的nice值
6.5 事件相關的設定:event{}段中的設定引數
accept_mutex {off|on};    //master排程使用者請求至各worker程序時使用的負載均衡鎖;on表示能讓多個worker輪流地、序列化地去響應新請求
lock_file file;    //accept_mutex用到的互斥鎖鎖檔案路徑
use [epoll | rtsig | select | poll];    //指明使用的事件模型,建議讓nginx自行選擇
worker_connections #;    //每個程序能夠接受的最大連線數

網路連線相關的設定引數

keepalive_timeout number;    //長連線的超時時長,預設為65s
keepalive_requests number;    //在一個長連線上所能夠允許請求的最大資源數
keepalive_disable [msie6|safari|none];    //為指定型別的UserAgent禁用長連線
tcp_nodelay on|off;    //是否對長連線使用TCP_NODELAY選項,為了提升使用者體驗,通常設為on
client_header_timeout number;    //讀取http請求報文首部的超時時長
client_body_timeout number;    //讀取http請求報文body部分的超時時長
send_timeout number;    //傳送響應報文的超時時長

fastcgi的相關設定引數

LNMP:php要啟用fpm模型
設定範例如下:

location ~ .php$ {
  root html;
  fastcgi_pass 127.0.0.1:9000;      //定義反向代理
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  include fastcgi_params;
}

nginx作為web伺服器時使用的設定:http{}段的設定引數

http{…}:設定http相關,由ngx_http_core_module模組引入。nginx的HTTP設定主要包括四個區塊,結構如下:

http {//協定級別
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
  upstream {//負載均衡設定
    ...
  }
  server {//伺服器級別,每個server類似於httpd中的一個<VirtualHost>
    listen 80;
    server_name localhost;
    location / {//請求級別,類似於httpd中的<Location>,用於定義URL與本地檔案系統的對映關係
      root html;
      index index.html index.htm;
    }
  }
}

http{}段設定指令:

server {}:定義一個虛擬主機,範例如下:
server {
  listen 80;
  server_name www.idfsoft.com;
  root "/vhosts/web";
}
listen:指定監聽的地址和埠
listen address[:port];
listen port;
server_name NAME [...]; 後面可跟多個主機,名稱可使用正規表示式或萬用字元

當有多個server時,匹配順序如下:

  • 先做精確匹配檢查
  • 左側萬用字元匹配檢查,如*.idfsoft.com
  • 右側萬用字元匹配檢查,如mail.*
  • 正規表示式匹配檢查,如~ ^.*.idfsoft.com$
  • default_server
  • root path; 設定資源路徑對映,用於指明請求的URL所對應的資源所在的檔案系統上的起始路徑

  • alias path; 用於location設定段,定義路徑別名

  • index file; 預設主頁面
    index index.php index.html;

  • error_page code […] [=code] URI | @name 根據http響應狀態碼來指明特用的錯誤頁面,例如 error_page 404 /404_customed.html

    [=code]:以指定的響應碼進行響應,而不是預設的原來的響應,預設表示以新資源的響應碼為其響應碼,例如 error_page 404 =200 /404_customed.html

log_format 定義紀錄檔格式
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access.log  main;
 
//注意:格式名main可自己定義,但要一一對應,另外此處可用變數為nginx各模組內建變數
location區段,通過指定模式來與使用者端請求的URI相匹配
//功能:允許根據使用者請求的URI來匹配定義的各location,匹配到時,此請求將被相應的location設定塊中的設定所處理,例如做存取控制等功能
 
//語法:location [ 修飾符 ] pattern {......}
常用修飾符說明:
修飾符功能
=精確匹配
~正規表示式模式匹配,區分大小寫
~*正規表示式模式匹配,不區分大小寫
^~字首匹配,類似於無修飾符的行為,也是以指定模組開始,不同的是,如果模式匹配,那麼就停止搜尋其他模式了,不支援正規表示式
@定義命名location區段,這些區段使用者端不能存取,只可以由內部產生的請求來存取,如try_files或error_page等

查詢順序和優先順序:由高到底依次為

  • 帶有=的精確匹配優先
  • 帶有^~修飾符的,開頭匹配
  • 正規表示式按照他們在組態檔中定義的順序
    帶有或*修飾符的,如果正規表示式與URI匹配
  • 沒有修飾符的精確匹配

優先順序如下:

( location = 路徑 ) --> ( location ^~ 路徑 ) --> ( location ~ 正則 ) --> ( location ~* 正則 ) --> ( location 路徑 )
//如沒新增任何修飾符則按先後順序
[root@localhost conf]# vim nginx.conf
//新增三個存取頁面測試
location / {
            echo 'haha';
        }

        location /xixi {
            echo 'xixi';
        }

        location /hehe {
            echo 'hehe';
        }
[root@localhost conf]# systemctl restart nginx.service 
[root@localhost conf]# curl 192.168.111.141   
haha
[root@localhost conf]# curl 192.168.111.141/xixi  
xixi
[root@localhost conf]# curl 192.168.111.141/hehe
hehe  
// =精確匹配
[root@localhost conf]# vim nginx.conf
location / {
            echo 'haha;
        }

        location /xixi {
            echo 'xixi';
        }

        location = /xixi {   
            echo 'hehe';
        }

[root@localhost conf]# systemctl restart nginx.service 
//可以看到兩個目錄一樣,但是=優先順序大於沒有加=的,所以存取的是hehe
[root@localhost conf]# curl 192.168.111.141/xixi   
hehe
//新增 ~ 為區分大小寫
[root@localhost conf]# vim nginx.conf
location / {
            echo 'haha';
        }

        location /xixi {
            echo 'xixi';
        }

        location ~ /xixi {   
            echo 'hehe';
        }
[root@localhost conf]# systemctl restart nginx.service 
//因為區分大小寫找不到資源所以輸出的是預設haha
[root@localhost conf]# curl 192.168.111.141/XIXI
haha
[root@localhost conf]# curl 192.168.111.141/xixi  
hehe
//  ~* 為不區分大小寫
[root@localhost conf]# vim nginx.conf
location / {
            echo 'haha';
        }

        location /xixi {
            echo 'xixi';
        }

        location ~* /xixi {
            echo 'hehe';
        }
[root@localhost conf]# systemctl restart nginx.service     
//因為不區分大小寫所以XIXI和xixi都能存取到hehe
[root@localhost conf]# curl 192.168.111.141/XIXI
hehe
[root@localhost conf]# curl 192.168.111.141/xixi
hehe
// ^~ 為字首匹配
[root@localhost conf]# vim nginx.conf
location / {
            echo 'haha';
        }

        location ^~/xixi {   
            echo 'xixi';
        }

        location ~ /xixi {
            echo 'hehe';

[root@localhost conf]# systemctl restart nginx.service 
 //字首匹配如果存取到了資源則停止搜尋
[root@localhost conf]# curl 192.168.111.141/xixi   
xixi

到此這篇關於nginx平滑升級及nginx組態檔的文章就介紹到這了,更多相關nginx平滑升級內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com