大家公司的會話保持怎麼作的?php
一、開發作的:記錄用戶登錄的狀態,將用戶登錄狀態保存到,redis服務器中,nfs,mysql。mysql
記錄用戶的登錄狀態。nginx
經過登錄用戶對應的userid和cookie結合,記錄用戶的狀態;若是是保存在本地,那麼在其它用戶使用該機器的時候去更改cookie的userid就能登錄其它用戶的登錄狀態,這樣很不安全。git
這樣就引入了session。github
二、運維:由於開發沒有寫會話保持功能,咱們公司使用的是nginx的upstream模塊的ip_hash調度算法。redis
什麼是session算法
session保存在服務端sql
什麼是cookie?後端
保存在客戶端安全
# 一、下載源碼包 [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; } }