第十七周作业

一、nginx负载均衡中常见的算法及原理有哪些?

1.1 rr轮询

    将客户端的请求按照顺序分配到后端服务器上,如果后端有节点服务器出现故障,则新的请求将不会分配给该服务器。

1.2 wrr加权轮询

    将后端服务器加上权重,依据权值进行调度到哪一台服务器上。权重越高,访问概率越大。

1.3 哈希算法

    根据客户端的IP地址进行hash运算,调度到后端服务器上,当源地址相同时,将会一直调度到同一台后端服务器上。

1.4 一致性哈希算法

    基于指定请求报文中首部字段或者URI等key做hash计算。可以包含文本、key变量及其组合。
    如果consistent指定了参数,将使用ketama一致性hash算法。该方法确保在将服务器添加到组或从组中删除时,只有少数密钥将重新映射到不同的服务器。这有助于为缓存服务器实现更高的缓存命中率。
    一致性hash算法适用于后端是Cache服务器(如varnish)时使用,consistent定义使用一致性hash运算,一致性hash基于取模运算。




## 二、使用rewrite规则实现将所有到a域名的访问rewrite到b域名
**注: 前提环境见第十五周作业Nginx编译安装及多域名的HTTPS**
### 2.1 编辑配置文件
~~~bash
# 配置www.wuhao.org永久重定向到www.wuhaolam.com
server {
        listen 80;
        listen 443 ssl;
        ssl_certificate /apps/nginx/certs/www.wuhao.org.pem;
        ssl_certificate_key /apps/nginx/certs/www.wuhao.org.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;

        root /data/nginx/html/pc;
        server_name www.wuhao.org;
        location / {
                root /data/nginx/html/pc;
                index index.html;
                rewrite / http://www.wuhaolam.com permanent;
        }
}

# 重启Nginx的服务
[root@Rocky8-mini ~]# systemctl restart nginx.service 

2.2 验证结果

image

三、实现反向代理客户端IP透传

3.1 环境准备

image

Rocky-mini:192.168.119.128           Nginx_proxy
Rocky-mini2: 192.168.119.138          WEB

3.2 实验步骤

# Nginx网页访问配置见第十六周作业
# 配置Nginx IP地址透传
[root@Rocky8-mini ~]# cat /apps/nginx/conf/conf.d/pc.conf
server {
        listen 80;
        listen 443 ssl;
        ssl_certificate /apps/nginx/certs/www.wuhao.org.pem;
        ssl_certificate_key /apps/nginx/certs/www.wuhao.org.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;

        root /data/nginx/html/pc;
        server_name www.wuhao.org;
        location / {
                root /data/nginx/html/pc;
                index index.html;
                proxy_pass http://192.168.119.138;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
[root@Rocky8-mini ~]# systemctl restart nginx.service

# 配置web端
[root@Rocky8-mini2 ~]# yum -y install httpd
[root@Rocky8-mini2 ~]# systemctl enable --now httpd
[root@Rocky8-mini2 ~]# vim /etc/httpd/conf/httpd.conf        // 注释原语句,修改该行至如下
#    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[root@Rocky8-mini2 ~]# systemctl restart httpd

3.3 结果验证

image

# 相关日志如下
# proxy代理日志
[root@Rocky8-mini ~]# tail -5  /apps/nginx/logs/access.log
192.168.119.1 - - [28/Jul/2022:08:43:36 -0400] "GET /poweredby.png HTTP/1.1" 200 5714 "http://www.wuhao.org/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.71"
192.168.119.1 - - [28/Jul/2022:08:43:36 -0400] "GET /bootstrap.min.css.map HTTP/1.1" 404 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.71"
192.168.119.1 - - [28/Jul/2022:08:57:52 -0400] "GET / HTTP/1.1" 403 199691 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
192.168.119.1 - - [28/Jul/2022:08:57:52 -0400] "GET /icons/poweredby.png HTTP/1.1" 200 643 "http://www.wuhao.org/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
192.168.119.1 - - [28/Jul/2022:08:57:52 -0400] "GET /poweredby.png HTTP/1.1" 200 5714 "http://www.wuhao.org/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"

# 后端服务器日志
[root@Rocky8-mini2 ~]# tail -5  /var/log/httpd/access_log    
192.168.119.1 192.168.119.128 - - [28/Jul/2022:20:43:36 +0800] "GET /poweredby.png HTTP/1.0" 200 5714 "http://www.wuhao.org/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.71"
192.168.119.1 192.168.119.128 - - [28/Jul/2022:20:43:37 +0800] "GET /bootstrap.min.css.map HTTP/1.0" 404 196 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.71"
192.168.119.1 192.168.119.128 - - [28/Jul/2022:20:57:53 +0800] "GET / HTTP/1.0" 403 199691 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
192.168.119.1 192.168.119.128 - - [28/Jul/2022:20:57:53 +0800] "GET /icons/poweredby.png HTTP/1.0" 200 643 "http://www.wuhao.org/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
192.168.119.1 192.168.119.128 - - [28/Jul/2022:20:57:53 +0800] "GET /poweredby.png HTTP/1.0" 200 5714 "http://www.wuhao.org/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"

四、利用LNMP实现wordpress站点搭建"

4.1 环境准备

Rocky8-mini:192.168.119.128
  Nginx:1.18.0
  php-fpm:7.4.30
  WordPress:6.0

Centos7:192.168.119.131
  MySQL:8.0.19

image

4.2 实验步骤

4.2.1 二进制安装MySQL数据库

[root@centos7 ~]# ls
anaconda-ks.cfg  mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
[root@centos7 ~]# groupadd -r -g 306 mysql
[root@centos7 ~]# useradd -r -g 306 -u 306 -d /data/mysql mysql
[root@centos7 ~]# mkdir -p /data/mysql
[root@centos7 ~]# chown mysql:mysql /data/mysql/
[root@centos7 ~]# tar xf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz  -C /usr/local/
[root@centos7 ~]# cd /usr/local/
[root@centos7 local]# ln -sv mysql-8.0.19-linux-glibc2.12-x86_64/ mysql
‘mysql’ -> ‘mysql-8.0.19-linux-glibc2.12-x86_64/’
[root@centos7 local]# chown -R root:root /usr/local/mysql
[root@centos7 local]# echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@centos7 local]# . /etc/profile.d/mysql.sh
[root@centos7 local]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
[root@centos7 local]# mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
[root@centos7 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@centos7 local]# chkconfig --add mysqld
[root@centos7 local]# service mysqld start
Starting MySQL. SUCCESS!
[root@centos7 local]# mysqladmin -uroot password wuhaolam

# 为wordprss和discuz应用准备数据库和用户帐号
[root@centos7 ~]# mysql -uroot -pwuhaolam
mysql> create database wordpress;
Query OK, 1 row affected (0.01 sec)

mysql> create user wordpress@'192.168.119.%' identified by 'wuhaolam';   
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on wordpress.* to wordpress@'192.168.119.%';
Query OK, 0 rows affected (0.00 sec)

4.2.2 编译安装PHP

# Rocky8编译安装PHP时,oniguruma环境错误解决办法 https://blog.csdn.net/niuxitong/article/details/120992814?spm=1001.2101.3001.6661.1&depth_1-utm_relevant_index=1
[root@Rocky8-mini ~]# ls
php-7.4.30.tar.gz  wordpress-6.0-zh_CN.tar.gz
[root@Rocky8-mini ~]# yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma
[root@Rocky8-mini ~]# tar xf php-7.4.30.tar.gz -C /usr/local/src/
[root@Rocky8-mini ~]# cd /usr/local/src/php-7.4.30/
[root@Rocky8-mini php-7.4.30]# ./configure --prefix=/apps/php --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-opnfig-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-mbstring --enable-xml --enable-sockets --enable-fpm --enable-maintainers-zts --disable-fileinfo
[root@Rocky8-mini php-7.4.30]# make -j 2 && make install

# 准备PHP配置文件
[root@Rocky8-mini php-7.4.30]# cp /usr/local/src/php-7.4.30/php.ini-production /etc/php.ini
[root@Rocky8-mini php-7.4.30]# cd /apps/php/etc/
[root@Rocky8-mini etc]# cp php-fpm.conf.default php-fpm.conf
[root@Rocky8-mini etc]# cd php-fpm.d/
[root@Rocky8-mini php-fpm.d]# cp www.conf.default www.conf
[root@Rocky8-mini php-fpm.d]# cat www.conf                  // 修改文件如下
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /pm_status
ping.path = /ping
access.log = log/$pool.access.log
slowlog = log/$pool.log.slow

# 创建用户和日志文件路径
[root@Rocky8-mini php-fpm.d]# useradd -r -s /sbin/nologin www
[root@Rocky8-mini php-fpm.d]# mkdir /apps/php/log  

# 启动并创建service启动项
[root@Rocky8-mini php-fpm.d]# /apps/php/sbin/php-fpm -t
[28-Jul-2022 10:13:19] NOTICE: configuration file /apps/php/etc/php-fpm.conf test is successful

[root@Rocky8-mini php-fpm.d]# cp /usr/local/src/php-7.4.30/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
[root@Rocky8-mini php-fpm.d]# systemctl daemon-reload
[root@Rocky8-mini php-fpm.d]# systemctl enable --now php-fpm.service 
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.

4.2.3 编译安装PHP

# 编译安装Nginx服务
详见第十六周作业:https://www.cnblogs.com/wuhaolam/p/16526106.html

# 配置Nginx支持fastcgi
[root@Rocky8-mini ~]# grep -Ev '#|^$' /apps/nginx/conf/nginx.conf      // 修改文件如下
worker_processes  1;
pid        /apps/nginx/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.wuhao.org;
        location / {
            root   /data/nginx/wordpress;
            index  index.php index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           /data/nginx/wordpress;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        location ~ ^/(ping|pm_status)$ {
            include fastcgi_params;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

}
[root@Rocky8-mini ~]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@Rocky8-mini ~]# systemctl reload nginx.service 

4.2.4 准备PHP测试页

[root@Rocky8-mini ~]# mkdir -p /data/nginx/wordpress
[root@Rocky8-mini ~]# cat  /data/nginx/wordpress/index.php
<?php
phpinfo();
?>

image

4.2.5 部署WordPress

[root@Rocky8-mini ~]# tar xf wordpress-6.0-zh_CN.tar.gz 
[root@Rocky8-mini ~]# cp -r wordpress/* /data/nginx/wordpress
[root@Rocky8-mini ~]# chown -R www:www /data/nginx/wordpress/

image
image
详见第十四周作业,建议用Centos7进行操作。https://www.cnblogs.com/wuhaolam/p/16456289.html

posted @ 2022-07-29 08:41  wuhaolam  阅读(24)  评论(0编辑  收藏  举报