负载均衡

Nginx 配置负载均衡

负载均衡处理方案

  • 源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

  • 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

  • 随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。

  • 加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

  • 加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。

  • 最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

相关资料

使用Nginx实现负载均衡
Nginx之负载均衡

websocket-nginx反向代理

nginx反向代理easyswoole的http和websocket

server {
    root /var/www/es;
    server_name esapi.test;
    # 代理http
    location / {
        proxy_http_version 1.1;
        proxy_set_header Connection "keep-alive";
        proxy_set_header X-Real-IP $remote_addr;
        if (!-f $request_filename) {
             proxy_pass http://192.168.3.67:9501;
        }
        # 代理websocket就靠下面两行
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
    }
}

相关资料

官方文档参考

阿里云https(SSL)证书过期后更新

项目的证书过期了(一年), 本以为按之前替换下文件就OK了. 但是出现 无法解析IP地址, URL内容出错问题.

URL内容出错?

使用的文件验证方式, 需要先项目中存放对应的文件 那么阿里云后台才可以获取到证书文件. 免费的是一个证书只能对应一个子域名. 后台证书设置绑定域名 www.xxxx.com 但是阿里云却会把域名变成指向 xxxx.com 也就是忽略www了. 那么Nginx-vhost中没有配置xxxx.com域名. 所以导致URL内容访问错误问题.(去年配置的时候, www.xxxx.com 对应绑定的就www.xxxx.com, 估计是阿里云中的策略发生改变了.)

处理方式1: www.xxxx.com xxxx.com vhost配置同一个项目 处理方式2: 使用DNS验证方式.


解析IP地址?

域名没有在后台做解析.



继续阅读

私有git-http克隆方式

SP(server-path) 服务器路径: /home/www
G(git) git文件夹: git1.git

服务器中用Nginx配置好目录指向SP中.


初始git库在SP中, sudo git init --bare git1.git

在G文件夹中,

mv hooks/post-update.sample hooks/post-update
chmod a+x hooks/post-update
git update-server-info

克隆: git clone http://(ip或域名)/git1.git

待解决

目前这种方式只是支持只读(克隆), 但是不支持push(提交).

相关资料

搭建Composer私有仓库
服务器上的 Git

docker中的PHP如何获取客户端IP

MAC-只能获取容器的IP. 但是Linux上可以获取到客户端的真实IP. (自己测试-在阿里云服务器中docker打印出可以获取客户端的IP-Test-Time: 2018年09月15日15:12:50)

docker-moby-issues

相关资料

Document how to get real remote client ip for service running in container
nginx获取客户端IP实现 根据配置了但无法获取到真实IP
network_mode-docker网络连接方式

Docker所知总结 Docker+Nginx架构详解
获取客户端 IP 好像没有什么用, 可能还需要结合其它的配置

未有答案的相关问题

docker 如何让 Nginx 获取到访问者 IP
nginx 如何获取到访客的真实 IP
docker部署nginx,怎么获取客户访问ip地址
Docker下的lnmp环境如何获取clientIp,和主机Ip

LNMP-出现目录无法访问

当项目目录移动后出现:

Warning: require(): open_basedir restriction in effect. File(/home/wwwroot/***/bootstrap/autoload.php) is not within the allowed path(s): (/home/wwwroot/***/public/:/tmp/:/proc/) in /home/wwwroot/***/public/index.php on line 

LNMP 1.1 解决方法:
如果你是PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入或修改:

[HOST=www.vpser.net]
open_basedir=/home/wwwroot/www.vpser.net/:/tmp/
[PATH=/home/wwwroot/www.vpser.net]
open_basedir=/home/wwwroot/www.vpser.net/:/tmp/

按上面的这个例子修改,换成你自己的域名和目录,多个网站就按上面的例子改成多个,最后重启php-fpm:/etc/init.d/php-fpm restart

相关资料

LNMP1.1下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本
LNMP1.2及以上版本-防跨目录设置