基于LNMP在负载均衡集群上部署Wordpress(低配版) 在讲解会话保持之前,我们先利用之前的学习内容,做一个小实验:在负载均衡集群上部署wordpress。 准备三台服务器: 第一台proxy服务器作为代理服务器,负载均衡器,ip:1
在讲解会话保持之前,我们先利用之前的学习内容,做一个小实验:在负载均衡集群上部署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.txtceshi 将wordpress项目的压缩包上传到共享目录,可以通过rpm -ivh下载,或者从windows上上传到共享目录都可以 [root@web1-server ~]# cd /nfs-dir[root@web1-server nfs-dir]# lsa.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]# lsa.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.confserver { 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.confserver { 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.conf user 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// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'HanJing@123'); define('DB_HOST', '192.168.242.138'); define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', ''); define('AUTH_KEY', '>$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会话保持主要有以下几种实现方式。
ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。
upstream web { ip_hash; server www.zcy666.com; server www.hjf777.com; }
注意:
ip_hash简单易用,但有如下问题:
使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。(需要引入第三方模块才能实现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打开开发者工具,然后在地址栏按回车进入页面,看到如下界面
单击之后就可以看到我们自己定义的缓存格式
来源地址:https://blog.csdn.net/qq_50660509/article/details/129688503
--结束END--
本文标题: nginx-会话保持-3
本文链接: https://lsjlt.com/news/387869.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0