Cet article utilise Nginx comme serveur proxy pour l'équilibrage de charge. Il ne s’agit que d’un simple exemple d’application et n’implique aucun principe.
(Les hôtes ici sont limités, le port hôte 42.192.22.128 8000 est utilisé comme port d'écoute du serveur proxy, 8181 est le port d'écoute du service)
Le client accède au serveur proxy et le serveur proxy distribue la requête à le serveur correspondant.
Modifiez le fichier de configuration Nginx pour configurer l'équilibrage de charge TCP (le fichier de configuration après l'installation de Nginx se trouve dans /usr/local/nginx/conf/nginx.config
, et le programme exécutable Nginx est dans /usr/ local/nginx/sbin
) /usr/local/nginx/conf/nginx.config
中,Nginx可执行程序在/usr/local/nginx/sbin
目录下)
在nginx.conf
配置文件中添加如下字段:
stream { upstream Server { server 42.192.22.128:8181 weight=1 max_fails=3 fail_timeout=30s; server 1.13.180.100:8181 weight=1 max_fails=3 fail_timeout=30s; } server { listen 8000; proxy_pass Server; } }
这里主要涉及两个配置块upstream
和server
在upstream
中定义了两台主机,weight
表示权重,两台主机都为1,说明代理服务器会平分客户端请求给上游服务器,max_fails
与fail_timeout
配合使用,指在fail_timeout
时间段内,如果向当前的上游服务器转发失败次数超过3次,则认为在当前的fail_timeout
时间段内这台上游服务器不可用。fail_timeout
表示该时间段内转发失败多少次后就认为上游服务器暂时不可用。server
中指定了代理服务器监听的端口号8000
,proxy_pass
指定upstream
块中的名字Server
。
配置完成后,使用nginx -s reload
使运行中的Nginx重读配置项并生效。
上游服务器使用“瑞士军刀”nc
命令来模拟TCP服务端,监听在相应的端口:(这里的Ip地址是云主机的内网ip)
客户端用一个简单的Qt小程序模拟一下:
void Widget::on_btnConnection_clicked() { m_pTcpSocket->connectToHost(ui->lineeditIp->text(), ui->lineeditPort->text().toUShort()); qDebug() << m_pTcpSocket->state(); } void Widget::on_btnSend_clicked() { qDebug() << m_pTcpSocket->state(); QByteArray byteArray; byteArray.append(ui->texteditMsg->toPlainText()); const char *pChatMsg = byteArray.data(); qDebug() << m_pTcpSocket->write(pChatMsg, byteArray.size()); }
先后启动两个客户端,通过TCP连接至42.192.22.128:8000
Ajoutez les champs suivants dans le fichier de configuration nginx.conf
:
rrreee
Cela implique principalement deux blocs de configurationamont
et server
🎜Deux hôtes sont définis dans upstream
. weight
représente le poids des deux hôtes, indiquant que le serveur proxy divisera également la demande du client. vers le serveur en amont. max_fails
est utilisé conjointement avec fail_timeout
. Cela signifie que dans la période fail_timeout
, si le nombre d'échecs de transfert vers le serveur amont. le serveur amont actuel dépasse 3 fois, on considère que le serveur amont actuel est indisponible pendant la période fail_timeout
. fail_timeout
indique le nombre d'échecs de transfert au cours de cette période avant que le serveur en amont ne soit considéré comme temporairement indisponible. 🎜server
spécifie le numéro de port 8000
que le serveur proxy écoute, et proxy_pass
spécifie le nom dans le upstream
bloquer >Serveur
. 🎜Une fois la configuration terminée, utilisez nginx -s reload
pour que Nginx en cours d'exécution relise les éléments de configuration et prenne effet. 🎜Le serveur amont utilise la commande "Swiss Army Knife" nc
pour simuler le serveur TCP et écouter sur le port correspondant : (L'adresse IP ici est l'IP intranet de l'hébergeur du cloud) 🎜🎜🎜🎜Le client utilise une simple applet Qt pour le simuler :🎜 rrreee🎜Démarrez deux clients l'un après l'autre, connectez-vous à 42.192.22.128:8000
via TCP et envoyez des messages. Vous pouvez voir que les messages sont distribués aux deux hôtes, indiquant que. la requête du client est en effet distribuée sur différents serveurs. 🎜🎜🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!