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.gz2、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-devel4、nginx編譯
$ cd nginx-1.13.0 $ ./configure --prefix=/usr/local/nginx5、安裝nginx
$ make & make install6、查看安裝路徑
$ 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.conf2、nginx啟動
# 進入nginx可執行程序的目錄 $ cd /usr/local/nginx/sbin $ ./nginx -s reload # 重啟是建立在nginx服務需要啟動3、nginx停止
# stop 是快速關閉,不管有沒有正在處理的請求。 $ ./nginx -s stop # quit 是一個優雅的關閉方式,nginx在退出前完成已經接受的連接請求 $ ./nginx -s quit4、 重新打開日志
$ ./nginx -s reopen5、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:
請求url為:/prefix/mid/t.html ,此請求匹配的是規則B,是以最大的匹配原則進行的,跟順序無關
2、正則匹配 為順序匹配
ex:
請求http://localhost/1.png,匹配的是規則C,因為規則C在前面,即叫做順序匹配
3、混合匹配
如果location有普通匹配也有正則匹配,那匹配的原則為:
匹配模式及順序
首先匹配 = ,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給/通用匹配。
當有匹配成功的時候,停止匹配,按當前匹配規則處理請求。
ex:
訪問跟目錄/, 比如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)直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理。這里是直接轉發給后端應用服務器了,也可以是一個靜態首頁。
第一個必選規則
(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 安装、启停、平滑升级、配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机解除移动宽带屏蔽_FANUC/三菱M
- 下一篇: Andorid 项目中Dialog的便捷