Maison > Questions et réponses > le corps du texte
J'ai plusieurs serveurs A, B, C, D, E... Parmi eux, A peut accéder au réseau externe, mais les autres ne le peuvent pas. J'utilise la méthode http_proxy pour accéder au réseau externe via A. Le but principal est de. accédez à l'interface du partenaire, telle que http ://api.xxx.com/get/user, probablement des centaines de fois par seconde.
Ces derniers jours, j'ai essayé de voir si je pouvais maintenir une connexion longue entre A et le serveur partenaire (supposé être Z). Après modification et tests, l'en-tête renvoyé par Z montre déjà que le http/1.1. la connexion est maintenue, mais le temps d'attente du socket est toujours très élevé. De plus, dans le journal de A, le paramètre $connection de nginx augmente toujours. Pourquoi est-ce ?
.Voici la configuration du proxy-pass sur A :
server{
resolver 10.10.2.118;
listen 1080;
error_log /var/log/nginx/proxy.error.log error;
access_log /var/log/nginx/proxy.access.log proxy_access;
location / {
proxy_pass http://$host$request_uri;
proxy_redirect off;
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 Connection "keep-alive";
proxy_http_version 1.1;
proxy_ignore_client_abort on;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
allow 10.0.0.0/8;
deny all;
}
}
Est-ce un problème avec ma configuration ? Je ne comprends pas Internet et je ne fais que déconner. J'espère que quelqu'un a des connaissances et pourra me donner des conseils
.高洛峰2017-05-16 17:26:38
J'ai vu le blog officiel et transmis cette question, alors je suis venu vous aider à la vérifier. Je ne sais pas si vous l'avez résolu vous-même
.Tout d'abord, parlons de votre configuration. Je ne sais pas d'où elle vient. Elle contient un tas de paramètres sur le proxy. Prenons votre proxy_pass comme exemple $host$request_uri
. pointe vers votre configuration d'origine. L'adresse, par exemple, accède à 10.0.0.100/api/user de votre machine A (supposée être 10.0.0.100), où $host est 10.0.0.100, $request_uri est/api/user, donc quelque chose de bizarre s'est produit, l'accès A puis les délégués à A. Est-ce qu'il s'est effondré ? Je n'ai pas sommeil. Je ne vais pas continuer à expliquer ce qui va se passer dans cette situation, je vais juste vous proposer une solution simple$host$request_uri
就是指向你原来的地址,例如访问你的A机器(假设为10.0.0.100)的10.0.0.100/api/user,其中$host就是10.0.0.100,$request_uri就是/api/user,所以这里奇葩的事情发生了,访问A然后又代理到A,是不是已经崩溃了,有点儿困,我就不继续解释这种情况下到底会发生什么了,直接说下简单地解决办法
----------------就决定是你了,upstream----------------
这里设你需要访问的外网ip为123.123.123.123,
upstream backend {
server 123.123.123.123;
keepalive 10;
}
location / {
proxy_pass http://$backend;
proxy_http_version 1.1;
proxy_ignore_client_abort on;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
allow 10.0.0.0/8;
deny all;
}
还有就是有些参数你不知道是啥意思,就不要加进去,不一定适合你的业务场景的
这里着重解释一下upstream里面的这个keepalive
.
----------------La décision vous appartient, en amont----------------
Ici, définissez l'adresse IP du réseau externe auquel vous devez accéder au 123.123.123.123,
rrreee
.
Ici, nous nous concentrons sur l'explication du paramètre keepalive
en amont
phpcn_u15822017-05-16 17:26:38
Excusez-moi : si le serveur backend est dynamique en ce moment, comment utiliser le keepalive d'amont pour garantir que nginx et le backend ont une longue connexion ? Merci!