51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Nginx|从零开始的 Nginx 负载均衡教程

安装环境 {#menu_index_1}

测试环境为虚拟机,使用 VMware Fusion + Debian 11,搭建一个 WordPress 网站集群,有关虚拟机安装和系统安装的教程可以自行搜索。

软件环境为 LNMP,依次安装相关软件。

安装 PHP {#menu_index_2}

sudo apt update
sudo apt install php-fpm php-opcache php-cli php-gd php-curl php-mysql

查看当前 php 版本:

php -v

编辑www.conf文件(下面的 7.4 换成你安装的版本号):

vim /etc/php/7.4/fpm/pool.d/www.conf

去掉security.limit_extensions前面的注释,并将其内容改成如下:

security.limit_extensions = .php .php3 .php4 .php5 .php7 .html .js .css .jpg .jpeg .gif .png .htm

启动 php:

sudo systemctl restart php7.4-fpm

卸载 apache2 {#menu_index_3}

由于 debian11 中有一个自带的 apache2 可能会跟我们的 nginx 抢端口,所以我们这里先把它卸载了:

sudo systemctl stop apache2
sudo apt --purge remove apache2 apache2-bin apache2-doc apache2-data apache2-utils -y

安装 MariaDB {#menu_index_4}

sudo apt install mariadb-server  # 安装 MariaDB
sudo systemctl status mariadb  # 查看 MariaDB 运行状态
sudo mysql_secure_installation # 数据库安全加固,基本默认 Y 即可

安装 Nginx {#menu_index_5}

sudo apt install nginx

检查运行状态:

sudo systemctl status nginx.service

然后在浏览器打开:http://替换为你的IP/index.nginx-debian.html

应该可以看到如下界面:

配置环境 {#menu_index_6}

Nginx 配置 {#menu_index_7}

首先删除 Nginx 默认的网站配置,否则 80 端口会被占用:

sudo rm -f /etc/nginx/sites-enabled/default
cd /etc/nginx/sites-available
sudo rm -f default

新建一个 wordpress.conf 的配置:

sudo vim wordpress.conf

复制以下内容,注意把 php7.4-fpm 换成你所安装的版本:

upstream php {
    server unix:/var/run/php/php7.4-fpm.sock;
    server 127.0.0.1:9000;
}

server {
    server_name localhost;
    root /var/www/wordpress;
    index index.php;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_intercept_errors on;
        fastcgi_pass php;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}

保存后, 创建软连接到 sites-enabled 目录:

sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/

检查配置文件是否正确:

sudo nginx -t

重启 Nginx 让配置文件生效:

sudo systemctl restart nginx

接着下载最新的 WordPress 源码到网站的根目录:

cd /var/www && sudo wget https://cn.wordpress.org/latest-zh_CN.tar.gz
sudo tar -xzvf latest-zh_CN.tar.gz && sudo rm -f latest-zh_CN.tar.gz
cd wordpress

Nginx 配置部分基本完成!

数据库配置 {#menu_index_8}

先连接数据库:

mariadb -uroot -p

输入加固数据库时设置的 root 密码回车即可。

进入 MariaDB 的交互界面后,先创建一个数据库:

CREATE DATABASE wordpress;

为 WordPress 创建一个数据库账户:

CREATE USER "wordpress" IDENTIFIED BY "password";

给刚创建的账户授予权限:

GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%' WITH GRANT OPTION;

退出交互界面:

FLUSH PRIVILEGES;  
EXIT

安装 WordPress {#menu_index_9}

这部分比较容易出问题的就是权限了,需要将 wordpress 目录下的文件夹和文件所有者设置为www-data

chown -R www-data:www-data /var/www/wordpress

浏览器打开虚拟机的 IP 地址,根据指引安装即可。

负载平衡 {#menu_index_10}

首先需要再创建两台虚拟机,需要两台机器提供服务,一台服务器提供负载均衡:

| 主机名 | 用途 | |-----|-------------| | s01 | 提供服务(已经创建的) | | s02 | 提供服务 | | s03 | 负载均衡 |

s01:设置数据库允许远程访问 {#menu_index_11}

s02 需要的配置与之前 s01 的相同,唯一的区别就是在安装 WordPress 网站程序的过程中,需要将数据库连接地址改为 s01 的 ip地址,因此,还需要开启 s01 数据库的远程访问。

在此前的配置中,我们已经授予了数据库用户的远程访问权限,接下来还需要修改数据库的监听端口和系统防火墙。

修改配置文件 {#menu_index_12}

首先需要修改 MariaDB 的配置文件,使其监听所有网络接口,而不仅仅是本地环回地址

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

找到如下行:

bind-address = 127.0.0.1

127.0.0.1 改为 0.0.0.0,表示 MariaDB 将监听所有 IP 地址:

bind-address = 0.0.0.0

防火墙设置 {#menu_index_13}

设置防火墙允许 3306 端口:

sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

s02:设置 WordPress 数据库地址 {#menu_index_14}

此时有两种情况:

  1. 你的 s02 虚拟机是由全部配置好的 s01 直接克隆而来;
  2. 你的 s02 没有配置过环境。

对于第一种情况,只需要更改 s02 网站根目录下的 wp-config.php文件,找到如下行,将其中的 localhost 改为 s01 的 ip 地址:

define( 'DB_HOST', 'localhost' );

对于第二种情况,按照上文步骤在 s02 中安装并配置必要的环境,唯一不同的地方是 s02 安装 WordPress 时,在安装时提示输入数据库地址,需要设置为 s01 的 ip 地址,其它全都一模一样。

接着浏览器访问 s02 的 ip 地址测试访问内容与 s01 是否一致,也可以测试在 s01 中更改文章标题,再打开 s02 查看更改是否生效。

s03:负载均衡配置 {#menu_index_15}

环境配置的过程这里就不再赘述,s03 作为负载均衡服务器需要一套新的配置:

sudo vim /etc/nginx/sites-available/wordpress.conf

使用下面的内容:

upstream wordpress {
    server 192.168.169.129; // s01 的 ip 地址
    server 192.168.169.131; // s02 的 ip 地址
}

server {
    listen 80;
    server_name localhost;  
  
    location / {
        proxy_pass http://wordpress;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                         proxy_set_header X-Forwarded-Proto $scheme;
    }
}

重启 Nginx:

sudo systemctl restart nginx

绑定域名 / 修改 hosts {#menu_index_16}

最后把域名绑定到负载均衡服务器 s03 上,这里直接改宿主机的 hosts 就好,不同系统改 hosts 方法自行查找。在 hosts 尾部添加一条:

192.168.169.132 wordpress.cn

修改网站域名 {#menu_index_17}

访问 WordPress 的后台会发现自动跳转到 s01 的 ip 地址上,需要修改网站域名。

登入 WordPress 后台 http://域名/wp-admin设置 -> 常规 中将 WordPress 地址和站点地址更改为http://wordpress.cn,保存。

验证负载均衡访问 {#menu_index_18}

Nginx 负载均衡默认采用轮训的方法,在 s01 和 s02 下分别建立一个同名文件,里面填写不同的内容作为测试。在 s01 中创建文件:

sudo echo 's01' > /var/www/wordpress/test.html

在 s02 中创建文件:

sudo echo 's02' > /var/www/wordpress/test.html

接着浏览器打开:http://wordpress.cn/test.html ,每次刷新过后,会分别显示 s01s02

至此,负载均衡配置完成!

参考文档 {#menu_index_19}

如何在Debian10上快速搭建LNMP环境

WordPress Advanced Administration Handbook

使用 nginx 作为 HTTP 负载均衡器

赞(2)
未经允许不得转载:工具盒子 » Nginx|从零开始的 Nginx 负载均衡教程