通過Nginx調度器負載后端兩台Web服務器,實現以下目標:
- 部署Nginx為前台調度服務器
- 調度算法設置為輪詢
- 后端為兩台LNMP服務器
- 部署測試頁面,查看PHP本地的Session信息
概念:Session:存儲在服務器端,保存用戶名、登陸狀態等信息。Cookies:由服務器下發給客戶端,保存在客戶端的一個文件里。保存的內容主要包括:SessionID
拓撲環境:使用4台RHEL7虛擬機,其中一台作為Nginx前端調度器服務器(eth0:192.168.4.5,eth1:192.168.2.5)、兩台虛擬機部署為LNMP服務器,分別為Web1服務器(192.168.2.100)和Web2服務器(192.168.2.200),另外一台作為測試用的Linux客戶機(192.168.4.10)
拓撲圖:
步驟:
一, 部署后端LNMP服務器相關軟件
注意:以下部署LNMP服務器的操作,需要在兩台后端服務器做相同的操作,下面以Web2服務器(192.168.2.200)為例,對Web1服務器執行相同操作即可。
[root@web2 ~]# yum -y install gcc openssl-devel pcre-devel #yum安裝基礎依賴包
[root@web2 ~]# tar -xf nginx-1.12.2.tar.gz
[root@web2 ~]# cd nginx-1.12.2
[root@web2 nginx-1.12.2]# ./configure \ #源碼安裝Nginx
> --with-http_ssl_module
[root@web2 nginx-1.12.2]# make && make install
[root@web2 ~]# yum -y install mariadb mariadb-server mariadb-devel #安裝MariaDB數據庫
[root@web2 ~]# yum -y install php php-mysql php-fpm #安裝PHP
[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf #修改Nginx配置文件的默認首頁與動靜分離)
location / {
root html;
index index.php index.html index.htm;
}
location ~ \.php$ { #啟用動態頁面
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf; #修改默認文件為fastcgi.conf
}
二, 啟動LNMP服務器相關的服務
[root@web2 ~]# systemctl stop httpd #如果該服務存在,則關閉,以避免端口沖突
[root@web2 ~]# systemctl start mariadb #啟動MySQL服務
[root@web2 ~]# systemctl status mariadb
[root@web2 ~]# systemctl start php-fpm #啟動PHP-FPM服務
[root@web2 ~]# systemctl status php-fpm
三, 修改Nginx配置文件,實現代理服務器
- 通過upstream定義后端服務器地址池,默認調度策略為輪詢,使用proxy_pass調用upstream定義的服務器地址池
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
...
http{
upstream webs {
server 192.168.2.100:80;
server 192.168.2.200:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webs;
root html;
index index.php index.html index.htm;
}
...
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加載配置文件
[root@client ~]# curl http://192.168.4.5/index.html #瀏覽器訪問,查看默認頁面加載是否成功
四, 部署web1與web2的測試頁面
1. 部署 web1 的測試頁面
[root@web1 ~]# tar -xf php-memcached-demo.tar.gz //找一個php的測試頁面
[root@web1 php_scripts]# cd php-memcached-demo
[root@web1 php-memcached-demo]# ls
home.php images index.php login.php README.md style.css
[root@web1 php-memcached-demo]# cp -r * /usr/local/nginx/html/ #拷貝php頁面到Nginx的網頁目錄下
[root@web1 php-memcached-demo]# vim home.php
<body bgcolor=blue> #定義home.php的頁面顏色為blue, 以便於區分后端兩台不同的web服務器
[root@web1 php-memcached-demo]# vim index.php
<body bgcolor=red> #定義index.php的頁面顏色為red,以便於區分后端兩台不同的web服務器
1.1 瀏覽器訪問后端服務器 web1 的測試頁面
[root@web1 ~]# firefox http://192.168.2.100 #在web1網站上注冊用戶,密碼
[root@web1 ~]# cd /var/lib/php/session/
[root@web1 ~]# ls #查看服務器本地生成的Session信息
sess_ahilcq9bguot0vqsjtd84k7244 #Session信息是隨機分配的
2. 部署 web2 的測試頁面
[root@web2 ~]# tar -xf php-memcached-demo.tar.gz //找一個php的測試頁面
[root@web2 php_scripts]# cd php-memcached-demo
[root@web2 php-memcached-demo]# ls
home.php images index.php login.php README.md style.css
[root@web2 php-memcached-demo]# cp -r * /usr/local/nginx/html/ #拷貝php頁面到Nginx的網頁目錄下
[root@web2 php-memcached-demo]# vim home.php
<body bgcolor=blue> #定義home.php的頁面顏色為blue, 以便於區分后端兩台不同的web服務器
[root@web2 php-memcached-demo]# vim index.php
<body bgcolor=red> #定義index.php的頁面顏色為red,以便於區分后端兩台不同的web服務器
2.1 瀏覽器訪問后端服務器 web2 的測試頁面
[root@web2 ~]# firefox http://192.168.2.200 #在web2網站上注冊用戶,密碼
[root@web2 ~]# cd /var/lib/php/session/
[root@web2 ~]# ls #查看服務器本地生成的Session信息
sess_qqek1tmel07br8f63d6v9ch401 #Session信息是隨機分配的
五, 瀏覽器訪問前端調度器Nginx,查看頁面
root@client ~]# google-chrome http://192.168.4.5
- 填寫注冊信息后,刷新,還需要再次注冊,說明兩台計算機使用的是本地Session.
- 因為,第二台主機並不知道你在第一台主機已經登錄,第一台主機的登錄信息也沒有傳遞給第二台主機.
- 也就是當前存在的問題: 不同后端web服務器的Session不一致,即沒有實現Session的共享.
- 如何實現Session共享,在后面的隨筆再介紹.
結束.