宝塔 ecs 配置负载均衡 slb 的问题

在配置 slb 健康检查非常重要,如果出现以下情况

下述原因可能会导致健康检查异常:
iptables 防火墙配置开启
后端 http 探测码401、403与配置不匹配

1、关闭 iptables服务, centOS 7 默认用的是 firewalld,也是基于 iptables 的,但 iptables 服务是没安装的

#开启防火墙,并启用这个服务
sudo systemctl enable firewalld.service
sudo systemctl start firewalld.service

#停止防火墙,并禁用这个服务
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service

如果想在 centOS 7 改用 iptables 的话,需要安装 iptables 服务

#安装
sudo yum install iptables-services 

#开启iptables
sudo systemctl enable iptables 
sudo systemctl enable ip6tables 

#启动服务
sudo systemctl start iptables 
sudo systemctl start ip6tables

2、如果是宝塔面板的 ecs 服务器,一般监听 80 端口时,最容易发生异常,原因还是服务器 nginx 配置问题,准确的说安装 phpmyadmin 的问题。当启动和停止 phpmyadmin 时, 查看 nginx 配置文件 root 配置项会指向 root /www/server/phpmyadmin;root /www/server/stop; 端口也会跟随 phpmyadmin 配置一起变化。好了,问题找到了,那么怎么解决?

更新:最快方式就是在宝塔里设置默认站点即可,下面的不用看了

最快捷方式,手动修改 nginx 配置文件监听端口 80,root 指向 /www/wwwroot/default/,这种方式不能再使用 phpmyadmin

新建配置文件方式,在 /www/server/panel/vhost 目录新建 nginx_slb.conf 文件,添加配置

server
  {
    listen 80;

    server_name slb;
    index index.php index.html index.htm default.php default.htm default.html;
    root  /www/wwwroot/default;

    #error_page   404   /404.html;
    include enable-php.conf;

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
      {
      expires      30d;
    }

    location ~ .*\.(js|css)?$
      {
      expires      12h;
    }

    location ~ /\.
      {
      deny all;
    }
  
    location /{
      if (!-e $request_filename) {
         rewrite ^/(.*)/public/ /$1/public/index.php?$query_string last; #推荐
         break;
      }
    }

    access_log  /www/wwwlogs/slb.log;
    error_log  /www/wwwlogs/slb.error.log;
 } 

完成后,需要在 nginx 配置文件中 phpmyadmin 的 server 前面引入即可

        server_tokens off;
        access_log off;
        
include /www/server/panel/vhost/nginx_slb.conf;       

server
    {
        listen 888;
        server_name phpmyadmin;     

3、https 重定向的次数过多,这是端服务器端口配置问题, 修改端口为 80,使 slb 与 ecs 服务器之间通过 http 转发。如果页面样式错乱, 则将 http 调用改为了https ,在页面添加

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

参考: https://blog.csdn.net/zhangyongbink/article/details/86636014

如果是 laravel 应用,则在 AppServiceProviderboot() 方法中添加以下代码(注意:需要在 slb 高级配置里勾选“ 通过X-Forwarded-Proto头字段获取SLB的监听协议 ”)

$this->app['request']->server->set('HTTPS', isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO']);

小刘

纸上得来终觉浅,绝知此事要躬行

你可能也会喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注