nginx版本無縫升級與回滾

chookie和session

  • 大家公司的會話保持怎麼作的?php

    一、開發作的:記錄用戶登錄的狀態,將用戶登錄狀態保存到,redis服務器中,nfs,mysql。mysql

    記錄用戶的登錄狀態。nginx

    經過登錄用戶對應的userid和cookie結合,記錄用戶的狀態;若是是保存在本地,那麼在其它用戶使用該機器的時候去更改cookie的userid就能登錄其它用戶的登錄狀態,這樣很不安全。git

    這樣就引入了session。github


    二、運維:由於開發沒有寫會話保持功能,咱們公司使用的是nginx的upstream模塊的ip_hash調度算法。redis

  • 什麼是session算法

    session保存在服務端sql

  • 什麼是cookie?後端

    保存在客戶端安全

源碼安裝nginx

# 一、下載源碼包
[root@lb01 ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz

# 二、解壓
[root@lb01 ~]# tar -xf nginx-1.14.2.tar.gz

# 三、查看yum安裝時所須要的模塊
[root@lb01 ~/nginx-1.14.2]# nginx -V
--with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

# 四、安裝依耐
[root@lb01 ~/nginx-1.14.2]# yum -y install openssl-devel

# 五、生成
[root@lb01 ~/nginx-1.14.2]# ./configure --prefix=/app/nginx-1.14.2 --user=www --group=www --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

# 六、編譯安裝
[root@lb01 ~/nginx-1.14.2]# make && make install

# 七、建立軟連接
[root@lb01 ~]# ln -s /app/nginx-1.14.2/ /app/nginx

# 八、添加環境變量並生效
[root@lb01 ~]# vi /etc/profile.d/nginx.sh
export PATH="/app/nginx/sbin:$PATH"

[root@lb01 ~]# source /etc/profile

# 九、編輯配置文件
[root@lb01 /app/nginx/conf]# vi nginx.conf
...
http {
    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        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
# 十、放網站配置文件的地方
    include conf.d/*.conf;
}

## 十一、建立一個配置文件的目錄。
[root@lb01 /app/nginx/conf]# mkdir conf.d

# 十二、配置一個負載均衡
[root@lb01 /app/nginx/conf/conf.d]# vi upstream.conf
upstream phpadmin {
        server 172.16.1.7;
        server 172.16.1.8;
}

server {
        listen 80;
        server_name php.gong.com;
        location / {
                proxy_pass http://phpadmin;
                include proxy_params;
        }
}

# ----------------------------# 
[root@lb01 /app/nginx/conf]# vi proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
 
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
 
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

# 十一、啓動nginx;訪問測試,目前是1.14.2的版本

版本升級

在不影響用戶體驗的狀況下把nginx的版本升級到nginx-1.16.1的版本,並添加nginx負載均衡的健康檢查模塊。

# 一、下載1.16.1版本的額包
[root@lb01 ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz

# 二、下載補丁包
[root@lb01 ~]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip

# 三、解壓nginx
[root@lb01 ~]# tar -xf nginx-1.16.1.tar.gz

# 四、解壓master擴展包
[root@lb01 ~]# unzip master.zip

# 五、安裝打補丁的命令
[root@lb01 ~]# yum -y install patch

# 六、打補丁
[root@lb01 ~/nginx-1.16.1]# patch -p1 < ../nginx_upstream_check_module-master/check_1.16.1+.patch

# 七、生成,指定安裝模塊
[root@lb01 ~/nginx-1.16.1]# ./configure --prefix=/app/nginx-1.16.1 --user=www --group=www --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx_upstream_check_module-master

# 八、編譯安裝
[root@lb01 ~/nginx-1.16.1]# make && make install

# 九、安裝好的目錄下生成的文件
[root@lb01 /app]# ll
total 0
lrwxrwxrwx  1 root root  18 May 28 22:02 nginx -> /app/nginx-1.14.2/
drwxr-xr-x 11 root root 151 May 28 22:10 nginx-1.14.2
drwxr-xr-x  6 root root  54 May 28 22:31 nginx-1.16.1

# 十、複製必要的文件
## 主配置文件
[root@lb01 /app]# \cp nginx-1.14.2/conf/nginx.conf nginx-1.16.1/conf/nginx.conf
## 添加的配置文件
[root@lb01 /app]# \cp nginx-1.14.2/conf/conf.d/upstream.conf nginx-1.16.1/conf/conf.d/upstream.conf
## 配置文件裏面指定的優化參數 
[root@lb01 /app]# \cp nginx-1.14.2/conf/proxy_params nginx-1.16.1/conf/proxy_params
## 複製pid
[root@lb01 /app]# \cp nginx-1.14.2/logs/nginx.pid nginx-1.16.1/logs/

# 十一、建立新的連接文件
[root@lb01 /app]# rm -fr nginx && ln -s /app/nginx-1.16.1/  nginx

# 十二、秒級重啓nginx;如今使用nginx的命令走的是/app/nginx-1.16.1/sbin/下的nginx;可是stop結束的是原來版本下的pid文件,從老版本複製過來的,因此實現了對原來版本的進程結束;經過&&在瞬間進行nginx新版本的啓動,添加新的進程和pid
[root@lb01 /app]# nginx -s stop && nginx

訪問測試的腳本

[root@db01 ~]# cat test.sh 
#!/bin/bash
while true;do
status=$(curl -I -m 10 -o /dev/null -s -w %{http_code} php.gong.com)
	if [ $status -eq 200 ];then
		echo "$(date +%F-%T)_訪問成功"
	else
		echo "$(date +%F-%T)_訪問失敗"
	fi
sleep 2
done

健康檢查的配置

[root@lb01 /app]# vi /app/nginx/conf/conf.d/upstream.conf 
upstream phpadmin {
        server 172.16.1.7;
        server 172.16.1.8;
        check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
             #interval  檢測間隔時間,單位爲毫秒
   	 		#rise      表示請求2次正常,標記此後端的狀態爲up
    		#fall      表示請求3次失敗,標記此後端的狀態爲down
    		#type      類型爲tcp
    		#timeout   超時時間,單位爲毫秒
}

server {
        listen 80;
        server_name php.gong.com;
        location / {
                proxy_pass http://phpadmin;
                include proxy_params;
                }
        location /uc {
                check_status;
        }
        }

相關文章
相關標籤/搜索