Il ne s'agit pas simplement d'une fonctionnalité manquante dans Nginx qui pourrait être améliorée d'une manière ou d'une autre à l'avenir, mais d'une incompatibilité au niveau du protocole qui rend la chose totalement impossible.
Dans votre exemple, le chemin de localisation /mysql
n'existe que dans le protocole HTTP. Dans le protocole HTTP, le client commence la communication par une demande :
GET /mysql HTTP/1.1
Hostname: example.com
Le site Protocole client/serveur MySQL est un protocole totalement différent qui commence même dans l'autre sens : le serveur envoyant une Paquet de poignée de main initial par exemple
36 00 00 00 0a 35 2e 35 2e 32 2d 6d 32 00 0b 00 6....5.5.2-m2...
00 00 64 76 48 40 49 2d 43 4a 00 ff f7 08 02 00. ..dvH@I-CJ......
00 00 00 00 00 00 00 00 00 00 00 00 00 2a 34 64. .............*
4d 7c 63 5a 77 6b 34 5e 5d 3a 00 |cZwk4^]:.
En théorie, TLS pourrait permettre de distinguer différents services sur le même port TCP en se basant sur l'identité de l'utilisateur. Indication du nom du serveur (SNI) et transmettent le trafic à différents serveurs en amont, même avec des protocoles sous-jacents différents. Cependant,
- AFAIK, rien de tel n'a été implémenté dans Nginx.
- L'exemple que vous avez choisi, le protocole client/serveur MySQL, ne lance pas la communication avec TLS, mais la capacité de TLS est la suivante a annoncé dans le paquet de poignée de main initiale, et la connexion est mise à niveau vers TLS, si le serveur et le client le supportent.
- Chaque protocole standard dispose de son propre port pour TLS (ou texte brut avec
STARTTLS
), et nous ne sommes pas à court de ports TCP, de toute façon. Par conséquent, il n'y a pas de forte demande pour cette fonctionnalité.