J'utilise nginx comme proxy et pour maintenir des connexions persistantes avec des serveurs éloignés.
J'ai configuré une quinzaine de blocs semblables à cet exemple :
upstream rinu-test {
server test.rinu.test:443;
keepalive 20;
}
server {
listen 80;
server_name test.rinu.test;
location / {
proxy_pass https://rinu-test;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
}
}
Le problème est que si le nom d'hôte ne peut pas être résolu dans un ou plusieurs des éléments suivants upstream
blocs, nginx ne (re)démarre pas. Je ne peux pas non plus utiliser d'IP statiques, certains de ces hôtes m'ont explicitement dit de ne pas le faire parce que les IP vont changer. Toutes les autres solutions que j'ai vues pour ce message d'erreur recommandent de se débarrasser des éléments suivants upstream
et faire tout dans le location
bloc. Ce n'est pas possible ici car keepalive
est uniquement disponible sous upstream
.
Je peux temporairement me permettre de perdre un serveur mais pas les 15.
Éditer : Il s'avère que nginx n'est pas adapté à ce cas d'utilisation. Un proxy keepalive alternatif (en amont) devrait être utilisé. Une alternative Node.js personnalisée se trouve dans ma réponse . Jusqu'à présent, je n'ai pas trouvé d'autres solutions qui fonctionnent vraiment.
4 votes
Il y a deux choses que vous pouvez essayer. Changez
proxy_pass https://rinu-test;
aproxy_pass $proxyurl;
et avant cela, vous pouvez définir la variableset $proxyurl $scheme://$host$request_uri
Et la suivante est d'essayer d'utiliser une variable en amont, je n'ai pas testé la 2ème option et ne peux pas encore vérifier. Mais utiliser une variable dansproxy_pass
désactive la mise en cache DNS dans nginx0 votes
La procuration sans l'amont est inutile. Les variables ne peuvent pas être utilisées en amont.
0 votes
Je voulais dire que vous pourriez essayer quelque chose comme
proxy_pass https://rinu-test$request_uri;
0 votes
Pourquoi ne pas explorer HAProxy au lieu de nginx pour cela ? Si vous utilisez des flux ascendants, ce cas d'utilisation ne peut pas être traité par défaut.
0 votes
J'ai essayé HAProxy mais ça n'a pas marché. Il a bien établi un proxy mais n'a pas gardé les connexions ouvertes ou n'a pas réussi à les réutiliser.
0 votes
La fonction "keep-alive" devrait être activée par défaut ? stackoverflow.com/questions/46966813/
0 votes
C'est la théorie, mais je suppose que cela ne fonctionne que du côté frontal. Mes tests ont clairement montré que cela ne fonctionne pas du côté backend. J'ai essayé toutes les options, j'y ai passé 4 heures.