日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NGINX 安装、启停、平滑升级、配置文件详解

發布時間:2024/3/24 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NGINX 安装、启停、平滑升级、配置文件详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NGINX安裝、啟停、平滑升級

  • 一、NGINX 安裝
    • 1、下載nginx
    • 2、nginx解壓安裝
    • 3、預先安裝
    • 4、nginx編譯
    • 5、安裝nginx
    • 6、查看安裝路徑
    • 7、啟動nginx
  • 二、NGINX 命令
    • 1、nginx啟動
    • 2、nginx啟動
    • 3、nginx停止
    • 4、 重新打開日志
    • 5、nginx檢查配置文件
  • 三、NGINX 的信號控制
    • 1、nginx停止
      • 第1種從容"優雅"停止
      • 第2種快速停止
      • 第3種強制停止
    • 2、重啟nginx
  • 四、NGINX 平滑升級
    • 1、平滑升級
      • 下載高版本nginx
      • 執行信號平滑升級
      • 從容關閉舊進程
      • 優雅關閉
    • 2、中途停止升級,回滾到舊的nginx
      • 給舊的主進程號發送HUP命令
      • 優雅的關閉新的主進程
  • 五、nginx 配置文件
    • 5-1 配置連接數
    • 5-2 虛擬主機
    • 5-3 nginx日志及切割
      • 5-3-1 日志文件格式配置
      • 5-3-2 access_log指令
      • 5-3-3 日志文件切割
    • 5-4 location配置
      • 5-4-1 語法
      • 5-4-2 location區分普通匹配和正則匹配
      • 5-4-3 匹配原則
    • 5-5 負載均衡
      • 5-5-1 負載均衡方案

一、NGINX 安裝

1、下載nginx

$ /opt/software $ wget http://nginx.org/download/nginx-1.13.0.tar.gz

2、nginx解壓安裝

$ tar -zxvf nginx-1.13.0.tar.gz -C ./

3、預先安裝

$ yum -y install gcc gcc-c++ ncurses-devel perl pcre pcre-devel zlib gzip zlib-devel

4、nginx編譯

$ cd nginx-1.13.0 $ ./configure --prefix=/usr/local/nginx

5、安裝nginx

$ make & make install

6、查看安裝路徑

$ cd /usr/local/nginx $ ll # conf 存放配置文件 # html 網頁文件 # logs 存放日志 # sbin shell啟動、停止等腳本

7、啟動nginx

$ cd sbin $ ./nginx

二、NGINX 命令

1、nginx啟動

# 指令:nginx程序 -C nginx配置文件 $ /usr/local/nginx/sbin/nginx -C /usr/local/nginx/conf/nginx.conf

2、nginx啟動

# 進入nginx可執行程序的目錄 $ cd /usr/local/nginx/sbin $ ./nginx -s reload # 重啟是建立在nginx服務需要啟動

3、nginx停止

# stop 是快速關閉,不管有沒有正在處理的請求。 $ ./nginx -s stop # quit 是一個優雅的關閉方式,nginx在退出前完成已經接受的連接請求 $ ./nginx -s quit

4、 重新打開日志

$ ./nginx -s reopen

5、nginx檢查配置文件

第一種

# 進入nginx可執行程序的目錄 $ cd /usr/local/nginx/sbin $ ./nginx -t

第二種

$ /usr/local/nginx/sbin/nginx -t -c /usr/local/nginxconf/nginx.conf

三、NGINX 的信號控制

nginx支持2種進程模型single和master-worker
single是單進程,一般不適用
master-worker是主進程和工作進程模型運行,主進程對工作進程管理。
nginx允許我們通過信號來控制主進程,用信號的方式可以達到不影響現有的連接的目的,

信號類型
INT. TERM 快速關閉信號
QUIT 從容關閉信號
HUP 從容重啟信號,一般用于修改配置文件后,重啟
USR1 重讀日志,一般用于日志的切割
USR2 平滑升級信號
WINCH 從容關閉舊進程

具體語法:
kill -信號選項 nginx的主進程
例:
$ kill -INT 26661
$ kill -HUP 4873

1、nginx停止

#獲取進程號 $ ps -ef | grep nginx

第1種從容"優雅"停止

$ kill -QUIT master進程號 # nginx服務可以正常地處理完當前所有請求再停止服務 # 步驟:首先會關閉監聽端口,停止接受新的連接,然后把當前正在處理的連接全部處理完,最后再退出進程。

第2種快速停止

$ kill -TERM master進程號 $ kill -INT master進程號 # 快速停止服務時,worker進程與master進程再收到信號后會立刻跳出循環,退出進程。

第3種強制停止

$ pkill -9 nginx #系統強殺nginx進程

2、重啟nginx

$ kill -HUP master進程號

四、NGINX 平滑升級

1、平滑升級

# 進入nginx可執行程序的目錄 $ cd /usr/local/nginx/sbin/ # 查看nginxd的版本 $ ./nginx -V

下載高版本nginx

# 下載高版本nginx $ wget http://nginx.org/download/nginx-1.13.1.tar.gz # $ ./configure # 不能執行make install $ make #此目錄下有高版本的nginx $ cd objs # 備份低版本的nginx $ cp -rfp objs/nginx /usr/local/nginx/sbin# 測試一下新復制過來的文件生效情況 $ /usr/local/nginx/sbin/nginx -t $ ps -ef | grep nginx

執行信號平滑升級

$ kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` 更新配置文件 # 給nginx發送USR2信號后,nginx會將logs/nginx.pid文件重命名為nginx.pid.oldbin,然后用新的可執行文件啟動一個新的nginx主進程和對應的工作進程,并新建一個新的ngxin.pid保存新的主進程號$ ps -ef | grep nginx $ ll logs/

從容關閉舊進程

# 舊的主進程號收到WINCH信號后,將舊進程號管理的舊的工作進程優雅的關閉。即一段時間后舊的工作進程全部關閉,只有新的工作進程在處理請求連接。這時,依然可以恢復到舊的進程服務,因為舊的進程的監聽socket還未停止。處理完成后,工作進程會自動關閉。 $ kill -WINCH 舊的主進程號

優雅關閉

#給舊的主進程發送QUIT信號后,舊的主進程退出,并一處logs/nginx.pid.oldbin文件,nginx的升級完成。 $ kill -QUIT 'cat /usr/local/nginx/logs/nginx.pid.oldbin'

2、中途停止升級,回滾到舊的nginx

在1中的步驟3時,如果想回到舊的nginx不再升級

給舊的主進程號發送HUP命令

此時nginx不重復讀取配置文件的情況下重新啟動舊的主進程的工作進程。

$ kill -HUP 9944 --舊主進程號 # 重啟工作進程

優雅的關閉新的主進程

$ kill -QUIT 100012 --新主進程號

五、nginx 配置文件

以下是nginx.conf的詳解:

# 基于什么用戶運行,用戶會有權限區分 #user nobody; # worker的進程數,一般設置為cpu數 * 核數 # 方式一 worker_processes 4; work_cpu_affinity 0001 0010 0100 1000; #表示開啟四個進程,第一個進程對應著第一個CPU內核,第二個進程對應著第二個內核,一次類推。這種設置方法更高效,因將每個cpu核提供給固定的worker進程服務,減少cpu上下問切換帶來的資源浪費 #方式二 #worker_processes auto; #表示設置服務器cpu核數匹配開啟nginx開啟的worker進程數,查看cpu核數: cat /proc/cpuinfo# 錯誤日志輸出位置,日志輸出級別 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;# 工作進程的PID記錄文件位置 #pid logs/nginx.pid;# 工作模式及連接數上限 events {#網絡模型高效(相當于建立索引查找結果),nginx配置應該啟動該參數#但是僅用于linux2.6以上內核,可以大大提高nginx的性能use epoll;#該參數表示設置一個woker進程最多開啟多少線程數#優化設置應該等同于woker_rlimit_nofile設置值,表明一個線程處理一個http請求,同時可以處理一個文件數,各個模塊之間協調合作不等待。worker_connections 1024; }# 這個參數表示worker進程最多能打開的文件句柄數,基于liunx系統ulimit設置 # 查看系統文件句柄數最大值: ulimit -n # Linux一切皆文件,所有請求過來最終目的訪問文件,所以該參數值設置等同于linux系統ulimit設置為優 worker_rlimit_nofile 65535http {# 設定mime類型,類型有mime.type文件定義# MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開include mime.types;default_type application/octet-stream;# 全局日志定義的輸出格式#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;# 開啟高效文件傳輸模式,sendfile指定指定nginx是否調用sendfile函數來輸出文件,對于普通應用設為on,弱國用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改為off。sendfile on;# 防止網絡阻塞#tcp_nopush on;# 防止網絡阻塞#tcp_nodelay on;# 長連接的超時時間,單位為秒#keepalive_timeout 0;keepalive_timeout 65;# 開啟gzip壓縮#gzip on;# IE6及一下禁止壓縮#gzip_disable "MSIE [1-6]\.";# 最下壓縮文件大小#gzip_min_length 1K;# 壓縮緩沖區#gzip_buffers 4 16K;#壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)#gzip_http_version 1.0;# 壓縮等級#gzip_comp_level 2;# 壓縮類型#gzip_types text/plain application/x-javascript text/css application/xml;# 給CDN和代理服務器使用,針對相同url,可以根據頭信息返回壓縮和非壓縮副本#gzip_vary on;# 設定請求緩沖# 上傳文件大小限制client_header_buffer_size 1K;# 設定請求緩存large_client_header_buffers 4 4K;# 設定負載均衡的服務器列表upstream mysvr {#weight參數表示權值,權值越高被分配到的幾率越大server 192.168.8.1x:3128 weight=5;server 192.168.8.2x:80 weight=1;server 192.168.8.3x:80 weight=6;}upstream mysvr2 {#weight參數表示權值,權值越高被分配到的幾率越大server 192.168.8.x:80 weight=1;server 192.168.8.x:80 weight=6;}# 虛擬主機配置server {# 監聽80端口listen 80;#定義使用localhost訪問 域名可以有多個,用空格隔開server_name localhost;#設置編碼#charset koi8-r;# 是定本虛擬主機的訪問日志#access_log logs/host.access.log main;# 訪問路由配置模塊location / {#定義服務器的默認網站根目錄位置root html;#定義首頁索引文件的名稱index index.html index.htm;#以下是一些防線代理的配置可刪除proxy_redirect off;#后端的web服務器可以通過X-Forwarded-For獲取用戶真實IPproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 10m; #允許客戶端請求的最大單文件字節數client_body_buffer_size 128K; #緩沖區代理緩沖用戶端請求的最大字節數proxy_connect_timeout 90; #nginx跟后端服務器連接超時時間(代理連接超時)proxy_send_timeout 90; #后端服務器數據回傳時間(代理發送超時)proxy_read_timeout 90; #連接成功后,后端服務器響應時間(代理接受超時)proxy_buffer_size 4K; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小proxy_buffers 4 32K; #proxy_buffers緩沖區,網頁平均在32K以下的話,這樣設置proxy_busy_buffers_size 64K; #高負荷下緩沖大小(proxy_buffers*2)proxy_temp_file_write_size 64K; #設定緩沖文件夾大小,大于這個值,將從upstream服務器傳}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##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;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}

5-1 配置連接數

5-2 虛擬主機

5-3 nginx日志及切割

5-3-1 日志文件格式配置

使用llog_format有很多可選的參數用于指示服務器的活動狀態,默認的是:

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" '; 參數 說明 示例 $remote_addr 客戶端地址 211.28.65.253 $remotr_user 客戶端用戶名稱 -- $time_loacal 訪問時間和時區 18/Jul/2012:17:00:01 +0800 $request 請求的URI和HTTP協議 "GET /article-10000.html HTTP/1.1" $http_host 請求地址,即瀏覽器中你輸入的地址(IP或域名) www.wang.com 192.168.100.100 $status HTTP請求狀態 200 $upstream_status upstream狀態 200 $body_bytes_sent 發送給客戶端文件內容大小 1547 $http_referer url跳轉來源 https://www.baidu.com $http_user_agent 用戶端瀏覽器等信息 "Mozilla/4.0 (compatible; MSIE 8.0;)" $ssl_protocol SSL協議版本 TLSv1 $ssl_cipher 交換數據中的算法 RC4-SHA $upstream_addr 后臺upstream的地址,即真正提供服務的主機地址 10.10.10.100:80 $request_time 整個請求的總時間 0.205 $upstream_response_time 請求過程中,upstream響應時間 0.002 $http_x_forwarded_for 是反向代理服務器轉發客戶端地址的參數

5-3-2 access_log指令

語法: access_log path [format [buffer=size [flush=time]]];
access_log path format gzip[=level] [buffer=size] [flush=time];
access_log off;
默認值:
access_log logs/access.log combined;
配置端:
gzip壓縮等級
buffer設置內存緩存區大小
flush保存在緩存區中的最大時間
不記錄日志:access_log off;
note:nginx進程設置的用戶和組必須對日志路徑有創建文件的權限,否則,會報錯。此外,對于每一條日志記錄,都將是先打開文件,再寫入日志,然后關閉。可以使用open_log_file_cache來設置日志文件緩存(默認是off)。

5-3-3 日志文件切割

1、手動日志切割
到logs目錄中,先備份日志文件,在重新生成日志文件
mv access.log access_20201222.log
kill - USR1 pid進程 #向nginx主進程發送USR1信號,重新打開日志文件。

2、系統自動切割
利用shell腳本的方式執行手動操作,配置定時任務,完成自動切割日志文件

編寫腳本,在nginx目錄下logs目錄

$ touch cutlog.sh $ vi cutlog.sh

以下是腳本內容:

#!/binbash LOGS_PATH=/usr/local/nginx/logs YESTEREDAY=$(date -d "yesterday" +%Y-%m-%d) mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #向ngixn主進程發送USR1信號。

設置定時任務:

$ vi /etc/crontab#在文件中添加如下內容: 0 0 * * * root /usr/local/nginx/logs/cutlog.sh #定時每天00:00以root身份執行腳本/usr/local/nginx/logs/cutlog.sh, 實現定時自動分割nginx日志。

5-4 location配置

5-4-1 語法

語法規則:
location [=|~ | ~ *|^~] /uri/ {…}

5-4-2 location區分普通匹配和正則匹配

用前綴“~”和"~*”修復的為正則匹配
~ 前綴表示區分大小寫的正則匹配
~* 前綴標識不區分大小寫的正則匹配
除上面修飾的前綴(“=”和“^~”,或沒有前綴修飾)都為普通匹配
= 前綴表示精確匹配
^~ 前綴表示uri以某個常規字符串開頭,可以理解為url的普通匹配

location作用于server模塊,且支持多個location模塊

server {……location /p {root html/p;index index.html index.htm;}location = /50x.html {root html;}location / {root html.server1;index index.html index.htm;} }

5-4-3 匹配原則

1、普通匹配 最大前綴匹配原則
ex:

server {location /preix/ {#規則A}location /prefix/mid/ {#規則B} }

請求url為:/prefix/mid/t.html ,此請求匹配的是規則B,是以最大的匹配原則進行的,跟順序無關
2、正則匹配 為順序匹配
ex:

server {location ~ \.(gif|jpg|pbg|js|css)$ {#規則C}location ~* \.png$ {#規則D} }

請求http://localhost/1.png,匹配的是規則C,因為規則C在前面,即叫做順序匹配

3、混合匹配
如果location有普通匹配也有正則匹配,那匹配的原則為:
匹配模式及順序

# 帶前綴普通匹配 最優先, = 優先級最高 location = /uri =開頭表示精確匹配,只能完全匹配才能生效 location ^~ /uri ^~開頭對URL路徑進行前綴匹配,并且在正則之前。 # 正則匹配 location ~ pattern ~開頭表示區分大小寫的正則匹配。 location ~* pattern ~* 開頭表示不區分大小寫的正則匹配 # 不帶前綴匹配 location /uri 不帶任何修飾符,也表示前綴匹配,但是在正則匹配之后。 location / 通用匹配,任何未匹配到其他location的請求都會匹配到,相當于switch中的default.

首先匹配 = ,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給/通用匹配。
當有匹配成功的時候,停止匹配,按當前匹配規則處理請求。
ex:

location = / {return 200 '規則A'; } location = /login {return 200 '規則B'; } location ^~ /static/ {return 200 '規則C'; } location ~ \.(gif|jpg|png|js|css)$ {return 200 ‘規則D’; } location ~* \.js$ {return 200 ‘規則E’; } location / {return 200 '規則F'; }

訪問跟目錄/, 比如http://localhost/ 將匹配規則A
http://localhost/login 將匹配規則B
http://localhost/register 則匹配規則F
http://localhost/static/a.html 匹配規則C
http://localhost/a.css 匹配規則D
http://localhost/b.js 優先匹配到規則D,不會匹配到規則E
http://localhost/static/c.js 優先匹配到規則C
http://localhost/a,js 匹配到規則E,不會匹配到規則D,因為規則E不區分大小寫
http://localhost/category/id/111 匹配到規則F,因為以上規則都不匹配

4、實際場景中,通常至少有三個匹配規則定義:
(1)直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理。這里是直接轉發給后端應用服務器了,也可以是一個靜態首頁。
第一個必選規則

location = / {... }

(2) 第二個必選規則是處理靜態文件請求,這是nginx作為http服務器的強項。有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用

location ^~ /static/ {root /webroot/static/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/; }

(3)第三個規則就是通用規則,用來轉發動態請求到后端應用服務器。非靜態文件請求就默認是動態請求,自己根據實際把握,畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了

location /{... }

5-5 負載均衡

nginx實現負載均衡原理:用戶訪問首先訪問到nginx服務器,然后nginx服務器再從應用服務器集群中選擇壓力比較小的服務器,然后將訪問請求引向該服務器。如應用服務器集群中某一臺服務器崩潰,name從帶選擇服務器列表中將該服務器刪除,也就是說一個服務器崩潰了,那么nginx服務器不會把請求引向到改服務器。

upstream mypro{server 192.168.5.140:8080server 192.168.5.141:8080 } server {listen 80;server_name xxx;location / {proxy_pass http://mypro} }

5-5-1 負載均衡方案

(1)隨機輪詢

upstream mypro {server 192.168.5.140:8080;server 192.168.5.141:8080; }

(2) 權重

upstream mypro {server 192.168.5.140:8080 weight=5;server 192.168.5.141:8080 weight=10; }

(3) ip_hash

upstream mypro {ip_hash;server 192.168.5.140:8080;server 192.168.5.141:8080; }

總結

以上是生活随笔為你收集整理的NGINX 安装、启停、平滑升级、配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。