nginx-会话保持-3
创始人
2025-06-01 00:03:19

基于LNMP在负载均衡集群上部署wordpress(低配版)

在讲解会话保持之前,我们先利用之前的学习内容,做一个小实验:在负载均衡集群上部署wordpress。

准备三台服务器:

第一台proxy服务器作为代理服务器,负载均衡器,ip:192.168.242.140 域名:www.zcg666.com

第二台和第三台做作为提供服务的真实服务器:

web-1 ip:192.168.242.137 域名:www.zcy666.com

web-2 ip:192.168.242.138 域名:www.hjf777.com

实验要求:将wordpress这个项目放到两台web服务器上,通过代理服务器对两台web服务器做代理,最后通过浏览器访问代理服务器能够访问wordpress项目。

实验思路:这是一个简单的基于LNMP部署wordpress,先部署好两台web服务器。web-1和web-2上边下载nginx、php、php-fpm、php-mysql、php-gd gd。在其中任意一台web服务器上安装mysql数据库(5.37版本的),在mysql中创建wordpress项目所需的数据库。通过nfs共享目录,将wordpress项目放在共享目录中,将共享目录作为nginx的网站发布目录。然后配置nginx支持php。web服务器部署好后在wordpress能够通过浏览器正常访问的前提下,在proxy服务器上部署负载均衡+代理。最后时限通过访问代理服务器能够访问wordpress。

实验过程:

(我所使用的nginx版本都是1.20.2)

实验之前在三台服务器以及windows上做一下本地域名解析:
proxy服务器:192.168.242.140 www.zcg666.com
web-1:192.168.242.137 www.zcy666.com
web-2:192.168.242.138 www.hjf777.com

首先在web-2和web-1上部署nfs共享目录,并将wordpress压缩包上传至共享目录并解压。

web-2
[root@web2-server ~]# yum -y install nfs-utils
[root@web2-server ~]# systemctl start nfs
[root@web2-server ~]# mkdir /nfs-dir
[root@web2-server ~]# vim /etc/exports
/nfs-dir 192.168.242.137(rw,no_root_squash,sync)   保存退出
[root@web2-server ~]# systemctl restart nfs
[root@web2-server ~]# exportfs -v      #确保exports配置文件生效
[root@web2-server ~]# echo "ceshi" >>/nfs-dir/a.txt    #在共享目录创建测试文件
web-1
[root@web1-server ~]# yum -y install nfs-utils
[root@web1-server ~]# mkdir /nfs-dir         #创建挂载目录
[root@web1-server ~]# vim /etc/fstab         #设置开机自动挂载
.....
192.168.242.138/nfs-dir /nfs-dir nfs       defaults 0 0挂载设备       挂载点  文件类型   属性            
[root@web1-server ~]# systemctl restart nfs
[root@web1-server ~]# mount -a
[root@web1-server ~]# cat /nfs-dir/a.txt
ceshi将wordpress项目的压缩包上传到共享目录,可以通过rpm -ivh下载,或者从windows上上传到共享目录都可以[root@web1-server ~]# cd /nfs-dir
[root@web1-server nfs-dir]# ls
a.txt   wordpress-4.9.1-zh_CN.tar.gz
[root@web1-server ~]# tar zxf wordpress-4.9.1-zh_CN.tar.gz
[root@web1-server nfs-dir]# ls
a.txt   wordpress-4.9.1-zh_CN.tar.gz  wordpress        

接着在web-2上下载mysql5.7,在mysql数据库中创建wordpress库,创建对应数据库用户

[root@web2-server ~]# yum -y install nginx php php-fpm php-mysql php-gd gd
[root@web2-server ~]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm    #下载mysql的yum仓库
[root@web2-server ~]# cd /etc/yum.repos.d
[root@web2-server ~]# vim mysql-community.repo
[mysql57-community]         #开启mysql5.7关闭mysql8.0
...
enabled=1
....[mysql80-community]
...
enabled=0
....
[root@web2-server ~]# grep password /var/log/mysqld.log    #查看数据库的初始密码
[root@web2-server ~]# mysqladmin -uroot -p'S7ydsrRT6w_r' password 'HanJing@123'  修改密码
[root@web2-server ~]# mysql -uroot -p'HanJing@123'  进入数据库
mysql> create database wordpress;    #创建wordpress项目需要的库
mysql> grant all on wordpress.* to 'wordpress'@'%' identified by 'QianFeng@123';
mysql> exit

接下来在web-2上编辑nginx和php的配置文件,使nginx支持php

[root@web2-server ~]# cd /etc/nginx/conf.d/
[root@web2-server conf.d]# mv default.conf default.conf.bak
[root@web2-server ~]# vim /etc/nginx/conf.d/wordpress.conf
server {listen 80;server_name www.hjf777.com;access_log /var/log/nginx/nfs-dir_access_log;location / {root /nfs-dir/wordpress;index index.php index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root  html;}location ~ \.php$ {root               /nfs-dir/wordpress;fastcgi_pass       127.0.0.1:9000;fastcgi_index      index.php;fastcgi_param      SCRIPT_FILENAME  $document_root$fastcgi_script_name;include            fastcgi_params;}
}然后修改php的配置文件,将/etc/php.ini文件中的short_open_tag=Off打开
[root@web2-server ~]# sed -i '/short_open_tag=Off/c short_open_tag=On' /etc/php.ini
然后重启nginx和php
[root@web2-server ~]# systemctl restart nginx php-fpm.service

web-1做相同的操作

[root@web1-server ~]# cd /etc/nginx/conf.d/
[root@web1-server conf.d]# mv default.conf default.conf.bak
[root@web1-server ~]# vim /etc/nginx/conf.d/wordpress.conf
server {listen 80;server_name www.hjf777.com;access_log /var/log/nginx/nfs-dir_access_log;location / {root /nfs-dir/wordpress;index index.php index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root  html;}location ~ \.php$ {root               /nfs-dir/wordpress;fastcgi_pass       127.0.0.1:9000;fastcgi_index      index.php;fastcgi_param      SCRIPT_FILENAME  $document_root$fastcgi_script_name;include            fastcgi_params;}
}然后修改php的配置文件,将/etc/php.ini文件中的short_open_tag=Off打开
[root@web1-server ~]# sed -i '/short_open_tag=Off/c short_open_tag=On' /etc/php.ini
然后重启nginx和php
[root@web1-server ~]# systemctl restart nginx php-fpm.service

然后通过浏览器访问web-1和web-2服务器,验证是否可以访问wordpress。在浏览器分别输入www.zcy666.com    www.hjf777.com。看到以下界面就算成功。

接下来就需要在proxy服务器上部署负载均衡+代理了。

[root@proxy-server ~]# yum -y install nginx
[root@proxy-server ~]# systemctl start nginx
[root@proxy-server ~]# vim /etc/nginx/nginx.confuser  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/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  /var/log/nginx/access.log  main;upstream web{                  #创建一个负载均衡地址池 upstream后面跟的是地址池的名字server www.zcy666.com;     #web-1服务器的域名server www.hjf777.com;     #web-2服务器的域名}sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}[root@proxy-server ~]# vim /etc/nginx/conf.d/proxy.conf
server {listen 80;server_name www.zcg666.com;   #本机域名location / {proxy_pass http://web;    #地址池proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}[root@proxy-server ~]# systemctl restart nginx

好了,最后在浏览器上访问proxy服务器的域名,验证是否能够访问wordpress。

去web-2服务器上在/nfs-dir/wordpress目录中创建wp-config.php文件

[root@web2-server ~]# vim /nfs-dir/wordpress/wp-config.php
$OYl?CV>.zZ>LekR}iDn[.+&7ssW |}?9[E/,-f06IOoI8@l%0T_~c}f.|?G My');
define('SECURE_AUTH_KEY',  '7ko&V6CI:_o|fRrJSLrR:y9QB,>yrK~&(.?b_XsmGI=$3s6nFI`gt-9nI>ws@$!;~-L;R:m;`?9kLLpGZ_:@,wwzf3Q&PMCZ8)o1#n(Iu8');
define('NONCE_KEY',        '7y`e^p8$E}{Eq;M]k.LI,qz],3Zv?,iIlO}P}Y[-La;f]j%5X}af4vFl;)1Xk%}G');
define('AUTH_SALT',        'xE7OwR!}x9FqJzw{C&pHd<1p9z_zc*MiTZ[9895KeMu.dbse?;9D3`w}GfvNbP&/');
define('SECURE_AUTH_SALT', '5rexQ,&|XfRoaG`^=x$ x@

 然后在刚才浏览器的页面点击现在安装。然后按提示创建账户即可。

nginx会话保持

nginx会话保持主要有以下几种实现方式。

ip_hash

ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。

ip_hash语法:

upstream web {ip_hash;server www.zcy666.com;server www.hjf777.com;}

注意:
ip_hash简单易用,但有如下问题:

  • 当后端服务器宕机后,session会丢失;
  • 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡;

使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。(需要引入第三方模块才能实现sticky)

sticky语法:

    upstream web{server www.zcy666.com;server www.hjf777.com;sticky expires=1h domain=3evip.cn path=/;}
说明:
expires:设置浏览器中保持cookie的时间 
domain:定义cookie的域 
path:为cookie定义路径

实验案例:这个实验是基于上文wordpress项目的实验环境做的。

Sticky机器:
在原有的基础上添加sticky模块,首先准备好一台yum安装好的带有nginx的服务器
下载nginx的源码包和sticky的源码包[root@proxy-server ~]# wget  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip
[root@proxy-server ~]# yum -y install unzip
[root@proxy-server ~]# unzip 08a395c66e42.zip
[root@proxy-server ~]# mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky-module-ng
[root@proxy-server ~]# yum install -y pcre* openssl* gcc gcc-c++ make
[root@proxy-server ~]# wget http://nginx.org/download/nginx-1.20.2.tar.gz
[root@proxy-server ~]# tar zxf nginx-1.20.2.tar.gz
[root@proxy-server ~]# cd nginx-1.20.2/
[root@proxy-server nginx-1.20.2]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --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-sticky-module-ng
[root@proxy-server nginx-1.20.2]# make &&make install
[root@proxy-server ~]# vim /etc/nginx/nginx.conf    在upstream块中添加sticky参数
...upstream web{server www.zcy666.com;server www.hjf777.com;sticky expires=1h domain=3evip.cn path=/;}
.....   
保存退出后从新加载nginx配置
[root@proxy-server ~]# nginx -s reload

浏览器访问proxy代理服务器的域名。在网址栏输入域名后,先别按回车进入,按F12打开开发者工具,然后在地址栏按回车进入页面,看到如下界面

单击之后就可以看到我们自己定义的缓存格式

相关内容

热门资讯

华为畅享6s是什么处理器,华为... 华为畅享6s是什么处理器目录华为畅享6s是什么处理器华为畅享6s:参数详解华为畅享6S外观及性能评测...
京东方普工干什么活,北京京东方... 京东方普工干什么活目录京东方普工干什么活北京京东方茶谷累不累合肥京东方一线员工做什么京东方普工,特工...
燕城是哪个城市,我的人间烟火燕... 燕城是哪个城市目录燕城是哪个城市我的人间烟火燕城是哪个城市?秦国燕城是现在的哪里燕城是哪个城市燕城是...
什么是黑洞谢谢告诉我,黑洞的基... 什么是黑洞谢谢告诉我目录什么是黑洞谢谢告诉我黑洞的基本性质?黑洞是什么?什么是黑洞什么是黑洞谢谢告诉...
光疗美甲怎么卸除,光疗甲怎么卸... 光疗美甲怎么卸除目录光疗美甲怎么卸除光疗甲怎么卸光疗甲要怎么卸下来?光疗甲怎么卸掉光疗美甲怎么卸除 ...
巧克力是怎么做成的,巧克力是用... 巧克力是怎么做成的目录巧克力是怎么做成的巧克力是用什么做成的 巧克力是用啥做的巧克力是什么做的巧克力...
感慨生活不易但励志的句子,关于... 感慨生活不易但励志的句子目录生活很苦的励志说说 励志开心的说说关于在艰难的路上的励志句子生活不易下一...
等腰三角形三线合一怎么证明,如... 等腰三角形三线合一怎么证明目录等腰三角形三线合一怎么证明如果只告诉三角形是等腰三角形,那么直接能证明...
番禺有哪些公园好玩的,广州市番... 番禺有哪些公园好玩的目录番禺有哪些公园好玩的广州市番禺区有哪些公园广州番禺有哪些公园好玩番禺旅游必去...
研究生读几年研究生的介绍,研究... 研究生读几年研究生的介绍目录研究生读几年研究生的介绍研究生读几年学制研究生是啥啊?国内研究生读几年研...
擦什么可以让纹身变淡,抹点什么... 擦什么可以让纹身变淡目录擦什么可以让纹身变淡抹点什么可以淡化纹身什么可以淡纹身不花钱去掉纹身的小窍门...
61键电子琴各个琴键代表什么,... 61键电子琴各个琴键代表什么目录61键电子琴各个琴键代表什么如何认识61键电子琴电子琴上的按钮分别是...
汽车钣金是什么意思(汽车钣金是... 今天给各位分享汽车钣金是什么意思的知识,其中也会对汽车钣金是什么意思的照片进行解释,如果能碰巧解决你...
40尺的高柜集装箱尺寸是多少(... 本篇文章极速百科给大家谈谈40尺的高柜集装箱尺寸是多少,以及40尺的高柜集装箱尺寸是多少寸对应的知识...
斗罗大陆唐三的魂环分别是什么,... 斗罗大陆唐三的魂环分别是什么目录斗罗大陆唐三的魂环分别是什么唐家三少的《斗罗大陆》一书中,主角唐三的...
浅色硅胶手机壳脏了怎么清洗,硅... 1. 准备工具:洗洁精、牙膏、牙刷、风油精、棉签、橡皮擦和抹布。 以上内容仅供参考,可阅读硅胶...
英雄联盟lng是哪个战队,ln... 英雄联盟lng是哪个战队目录英雄联盟lng是哪个战队lng是哪个国家的战队lng打野tarzan哪国...
有没有学习美妆的软件,有什么教... 有没有学习美妆的软件目录有没有学习美妆的软件有什么教化妆的app?有什么美妆的APP有什么教化妆的a...
黑芝麻一天吃多少合适,每天吃多... 黑芝麻一天吃多少合适目录黑芝麻一天吃多少合适每天吃多少黑芝麻为宜黑芝麻每天吃多少合适?黑芝麻每天吃多...
东风标志307三厢车多长(东风... 今天给各位分享东风标志307三厢车多长的知识,其中也会对东风标志307三厢车多长多宽进行解释,如果能...
法国百科法国女人最钟爱的香水是... 本篇文章极速百科给大家谈谈法国百科法国女人最钟爱的香水是?,以及法国的什么香水最有名对应的知识点,希...
自然灾难电影有哪些 极速百科网... 自然灾难电影有哪些目录自然灾难电影有哪些自然灾难电影有哪些自然灾难片都有那些?像(后天)(烈火雄心)...
免费高速收费2023最新规定,... 今天给各位分享免费高速收费2023最新规定,高速费免费时间2023的知识,其中也会对202年高速路免...
紫砂壶水温高时会渗水是为什么(... 本篇文章极速百科给大家谈谈紫砂壶水温高时会渗水是为什么,以及紫砂壶烧成温度过高会影响透气性吗对应的知...
陕西省三原县属于哪个市,三原县... 陕西省三原县属于哪个市目录陕西省三原县属于哪个市三原县是哪个市的三原县是属于西安还是咸阳?三原邮编陕...
莫扎特的作品有哪些,莫扎特的名... 莫扎特的作品有哪些目录莫扎特的作品有哪些莫扎特的名曲有哪些?莫扎特有什么曲?莫扎特的作品有哪些?莫扎...
三字词语有哪些,三字词语 极速... 三字词语有哪些目录三字词语有哪些三字词语有什么三个字比较好听的词语三个字的词语 三个字的词语有哪些三...
美国纽约是不是在纽约州,纽约在... 美国纽约是不是在纽约州目录美国纽约是不是在纽约州纽约在美国哪个州?是不是在纽约州纽约在哪个州美国纽约...
黑色的大蜜蜂是什么蜂,黑色个头... 黑色的大蜜蜂是什么蜂目录黑色的大蜜蜂是什么蜂黑色个头很大的蜜蜂是啥蜂黑色的体型较大毛茸茸的蜂. 是什...
水老鼠学名叫什么,水老鼠学名叫... 水老鼠学名叫什么目录水老鼠学名叫什么水老鼠学名叫什么?麝鼠学名是?水老鼠学名叫什么呢?水老鼠学名叫什...