咻咻ing 2020-06-01
你们公司的会话保持(session共享)怎么做的?
# 开发做会话保持,将用户登录信息存储在redis,MySQL,文件共享存储...中 1.记录用户的登录状态(logined=1) 2.通过用户对应的user_id跟cookie结合,记录用户的登录状态(明确知道是哪个用户登录的) 3.不安全,如果知道别人的user_id,或者尝试别人的id 4.通过session的加密,来保护cookie # 开发没有做会话保持,我们通过运维的方式做会话保持,nginx的upstream模块中的ip_hash调度算法,保证用户的请求一直发送到同一台机器 # 不过这么做有弊端...负载不均衡,所以我们公司,先让运维做会话保持,后面开发会写 # 什么是cookie? cookie是后端服务器,传给浏览器的一段字符串,作用是用来记录用户登录的状态,和数据库中的user id结合,可 以保证知道是哪一个用户登录的。仅存储在浏览器。 # 什么是session? session是后端服务器,传给浏览器的一段字符串,作用也是用来记录用户的登录状态(通过加密的方式保护 cookie,防止其他用户通过user id随意登录别人账号),存储在服务器[redis,mysql,file,mongodb,es,memcache...]
在Nginx官方模块提供的模块中,没有对负载均衡后端节点的健康检查模块,但可以使用第三方模块。nginx_upstream_check_module
来检测后端服务的健康状态。
第三方模块项目地址:TP
# 模块写法 例如: [ conf.d]# cat proxy_web.conf upstream web { server 172.16.1.7:80 max_fails=2 fail_timeout=10s; server 172.16.1.8:80 max_fails=2 fail_timeout=10s; 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 web.drz.com; location / { proxy_pass http://web; include proxy_params; } location /up { # 负载均衡状态 check_status; # 和nginx状态模块写法很像 } } ##### 具体操作如下
# 1.安装依赖包 [ ~]# yum install -y openssl-devel pcre-devel openssl-devel patch # 2.下载官方的nginx包,和下载负载均衡健康检查的包 [ ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz [ ~]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip # 3.解压 [ ~]# tar xf nginx-1.14.2.tar.gz [ ~]# unzip master.zip # 4.进入nginx目录,打补丁(nginx的版本是1.14补丁就选择1.14的,p1代表在nginx目录,p0是不在nginx目录) [ ~]# cd nginx-1.14.2/ [ nginx-1.14.2]# patch -p1 <../nginx_upstream_check_module-master/check_1.14.0+.patch # 4.1进入目录生成 [ ~]# cd nginx-1.14.2/ [ nginx-1.14.2]# ./configure --prefix=/appinx-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 --add-module=/rootinx_upstream_check_module-master --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‘ # 5.编译和安装 [ ~]# make && make install # 6.做软连接 [ ~]# ln -s /app/nginx-1.14.2/ /app/nginx # 7.添加环境变量 [ ~]# vim /etc/profile.d/nginx.sh export PATH="/app/nginx/sbin:$PATH" # 8.重新加载环境变量 [ ~]# source /etc/profile.d/nginx.sh # 9.创建用户 [ ~]# groupadd www -g 666 [ ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M # 10.修改nginx的配置文件 user www; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; } 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; #gzip on; include /app/nginx/conf.d/*; } # 11.创建虚拟主机配置文件存放目录 [ ~]# mkdir /app/nginx/conf.d # 12.配置文件添加模块 upstream qwe { server 172.16.1.7; server 172.16.1.8; check interval=3000 rise=2 fall=3 timeout=1000 type=tcp; } server { listen 80; server_name www.wp.com admin.com; location / { proxy_pass http://qwe; proxy_set_header Host $http_host; } location /up { check_status; } } # 13.检查语法 [ ~]# nginx -t # 14.重现加载配置文件 [ ~]# nginx -s reload ## 最后访问网站
就比如增加nginx_upstream_check_module
模块
## 在你源码安装完之后 # 1.安装依赖包 [ ~]# yum install -y patch openssl-devel # 2.下载负载均衡健康检查的包 [ ~]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip # 3.解压 [ ~]# tar xf nginx-1.14.2.tar.gz [ ~]# unzip master.zip # 4.进入nginx目录,打补丁(nginx的版本是1.14补丁就选择1.14的,p1代表在nginx目录,p0是不在nginx目录) [ ~]# cd nginx-1.14.2/ [ nginx-1.14.2]# patch -p1 <../nginx_upstream_check_module-master/check_1.14.0+.patch # 4.1进入目录生成(一般在这需要什么模块就添加什么模块) [ ~]# cd nginx-1.14.2/ [ ~]# ./configure --prefix=/app/nginx-1.14.2_new --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‘ --user=www --group=www # 5.编译和安装 [ ~]# make && make install # 6.查看 [ ~]# cd /app/ [ /app]# ll total 0 lrwxrwxrwx 1 root root 18 May 29 01:13 nginx -> /app/nginx-1.14.2/ drwxr-xr-x 12 root root 165 May 29 01:25 nginx-1.14.2 drwxr-xr-x 6 root root 54 May 29 01:59 nginx-1.14.2_new # 7.拷贝nginx配置文件到新的 [ ~]# \cp /app/nginx/conf/nginx.conf /app/nginx-1.14.2_new/conf/ # 创建conf.d [ ~]# mkdir /app/nginx-1.14.2_new/conf.d/ [ ~]# \cp /app/nginx/conf.d/* /app/nginx-1.14.2_new/conf.d/ # 8.拷贝pid到新的nginx [ ~]# cp /app/nginx/logs/nginx.pid /app/nginx-1.14.2_new/logs/ # 9.拷贝站点目录 [ ~]# \cp -a /app/nginx/html/* /app/nginx-1.14.2_new/html/ # 10.给配置文件加上nginx_upstream_check_module模块 [ ~]# vim /app/nginx-1.14.2_new/conf.d/php_lb.conf upstream qwe { server 172.16.1.7; server 172.16.1.8; check interval=3000 rise=2 fall=3 timeout=1000 type=tcp; } server { listen 80; server_name www.wp.com admin.com; location / { proxy_pass http://qwe; proxy_set_header Host $http_host; } location /up { check_status; } } # 检查语法 [ ~]# nginx -t # 11.在其他虚拟机上写1秒访问一次的脚本 [ ~]# vim a.sh #!/bin/bash while true;do status_code=`curl -I -m 10 -o /dev/l -s -w %{http_code} http://www.qwe.com` if [ $status_code -eq 200 ];then echo "$(date +%F-%T)_访问成功" >> /tmp/111.log else echo "$(date +%F-%T)_访问失败" >> /tmp/111.log fi sleep 1 done # 12.执行并查看脚本 [ ~]# sh a.sh [ ~]# tailf /tmp/111.log 2020-05-28-18:36:53_访问成功 2020-05-28-18:36:54_访问成功 。。。 # 13.删除老连接并创建新链接 [ ~]# rm -rf /app/nginx && ln -s /app/nginx-1.14.2_new/ /app/nginx ### 最好reload下或者[ /app]# nginx -s stop && nginx ### web01如果没有失败那就是添加完成了
状态模块也ok
必须要把负载均衡的健康模块带上和相对应的版本
# 1.查看nginx现有的模块(生成语句./configure) [ suibian]# nginx -V --prefix=/app/nginx-1.14.2_new --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 --add-module=/root/nginx_upstream_check_module-master --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‘ # 2.下载新版本源码包 [ ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz # 3.解压 [ ~]# tar xf nginx-1.16.1.tar.gz # 4.进入目录并生成,给负载均衡健康模块打补丁。 [ ~]# cd nginx-1.16.1/ [ ~/nginx-1.16.1]# patch -p1 <../nginx_upstream_check_module-master/check_1.16.1+.patch [ ~/nginx-1.16.1]# ./configure --prefix=/app/nginx-1.16.1 --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=/source/nginx_upstream_check_module-master # 5.编译和安装 [ ~]# make && make install # 6.查看 [ ~]# ll /app/ total 0 lrwxrwxrwx 1 root root 22 May 29 02:24 nginx -> /app/nginx-1.14.2_new/ drwxr-xr-x 12 root root 165 May 29 01:25 nginx-1.14.2 drwxr-xr-x 12 root root 165 May 29 02:27 nginx-1.14.2_new drwxr-xr-x 6 root root 54 May 29 04:37 nginx-1.16.1 # 7.拷贝配置文件 [ ~]# \cp /app/nginx/conf/nginx.conf /app/nginx-1.16.1/conf/ # 创建conf.目录 [ ~]# mkdir /app/nginx-1.16.1/conf.d [ ~]# cp /app/nginx/conf.d/* /app/nginx-1.16.1/conf.d/ # 8.拷贝pid [ ~]# cp /app/nginx/logs/nginx.pid /app/nginx-1.16.1/logs/ # 9.拷贝站点目录 [ ~]# \cp -a /app/nginx/html/* /app/nginx-1.16.1/html/ # 10.执行并查看脚本 ## 这是写脚本的机子上 [ ~]# sh a.sh [ ~]# tailf /tmp/111.log 2020-05-28-18:36:53_访问成功 2020-05-28-18:36:54_访问成功 .... # 11.删除以前的软链接并生成新版本的软链接 [ ~]# rm -rf /app/nginx && ln -s /app/nginx-1.16.1/ /app/nginx # 12.重新加载配置文件,或者启动马上重启(但是有一个失败的,不妨碍吧) [ ~]# nginx -s reload [ ~]# nginx -s stop && nginx