« Utiliser un proxy Apache pour Proxmox » : différence entre les versions
Aucun résumé des modifications |
mAucun résumé des modifications |
||
(4 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{ | {{ArticleHead|Adadov}} | ||
Notre serveur de test proxmox se trouve à l'intérieur d'un réseau privé. | Notre serveur de test proxmox se trouve à l'intérieur d'un réseau privé. | ||
Ligne 8 : | Ligne 8 : | ||
Mais c'était sans compter sur les spécificités de ce genre d'interfaces ... | Mais c'était sans compter sur les spécificités de ce genre d'interfaces ... | ||
== Problèmes rencontrés == | == Problèmes rencontrés == | ||
Ligne 38 : | Ligne 36 : | ||
<Location /websockify> | <Location /websockify> | ||
ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006 | ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006 | ||
ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006 | #ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006 | ||
</Location> | </Location> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Le proxy renvoi une page blanche === | |||
Après toutes ces misères, il a fallu encore chercher ... | |||
Le proxy renvoyait une page blanche depuis l'extérieur du réseau. | |||
En supprimant les options ProxyPassReverse le problème semble corrigé ... A suivre ... | |||
== Fichier de configuration complet == | == Fichier de configuration complet == | ||
Ligne 61 : | Ligne 66 : | ||
<Location /> | <Location /> | ||
ProxyPass https://IP.DU.SERVEUR.PROXMOX:8006/ | ProxyPass https://IP.DU.SERVEUR.PROXMOX:8006/ | ||
ProxyPassReverse https://IP.DU.SERVEUR.PROXMOX:8006/ | #ProxyPassReverse https://IP.DU.SERVEUR.PROXMOX:8006/ | ||
</Location> | </Location> | ||
Ligne 70 : | Ligne 75 : | ||
<Location /websockify> | <Location /websockify> | ||
ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006 | ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006 | ||
ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006 | #ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006 | ||
</Location> | </Location> | ||
Ligne 101 : | Ligne 106 : | ||
</VirtualHost> | </VirtualHost> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[:Catégorie:Proxmox]] | [[Catégorie:Apache]] | ||
[[Catégorie:Proxmox]] | |||
[[Catégorie:Virtualisation]] |
Dernière version du 8 février 2023 à 07:38
Notre serveur de test proxmox se trouve à l'intérieur d'un réseau privé.
N'ayant malheureusement pas toujours une connexion supportant IPv6 à l'extérieur on ne peut pas se reposer sur son IPv6 publique pour l'accès et une simple redirection dans le NAT IPv4 ne me convenait pas les ports 80 et 443 étant déjà utilisés sur une autre machine.
Il a donc été nécessaire de créer un reverse proxy dans le serveur Apache existant afin de servir l'interface web de proxmox malgré tout.
Mais c'était sans compter sur les spécificités de ce genre d'interfaces ...
Problèmes rencontrés[modifier | modifier le wikicode]
Pour créer un proxy c'est relativement rapide dans les cas simple.
En effet si votre serveur possède déjà de nombreux VirtualHost il suffit de lui en ajouter un et de lui configurer les options ProxyPass et ProxyPassReverse.
Proxmox force les connexions SSL[modifier | modifier le wikicode]
Le premier soucis que j'ai eu, c'est que proxmox force la connexion SSL. En plus de ça les certificats étant ceux par défaut (donc self-signed) mon serveur Apache n'en voulait pas.
Donc on commence par activer le support SSL pour les proxy et on demande à ne pas valider le certificat (on est en interne je rappel, les risques sont limités)
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
Les connexions aux consoles[modifier | modifier le wikicode]
Les connexions aux consoles se font via des websocket et ne me demandez pas pourquoi mais Apache n'aime pas qu'on mélange tout ...
Il faut donc ajouter des règles de proxy spécifiques pour les destinations de ces connexion WebSocket.
<LocationMatch ^/(api2/json/nodes/[^\/]+/[^\/]+/[^\/]+/vncwebsocket.*)$>
ProxyPass wss://IP.DU.SERVEUR.PROXMOX:8006/$1 retry=0
</LocationMatch>
<Location /websockify>
ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006
#ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006
</Location>
Le proxy renvoi une page blanche[modifier | modifier le wikicode]
Après toutes ces misères, il a fallu encore chercher ...
Le proxy renvoyait une page blanche depuis l'extérieur du réseau.
En supprimant les options ProxyPassReverse le problème semble corrigé ... A suivre ...
Fichier de configuration complet[modifier | modifier le wikicode]
Le reste du fichier est standard pour un VirtualHost qui fait office de proxy.
Je vous mets ici ma version pour référence si besoin
# Ce VirtualHost est là uniquement pour forcer la connexion SSL
<VirtualHost *:80>
ServerName FQDN_DU_SERVEUR
Redirect / https://FQDN_DU_SERVEUR/
</VirtualHost>
# VirtualHost Proxy pour Proxmox
<VirtualHost *:443>
ServerName FQDN_DU_SERVEUR
CustomLog logs/access_log combined
<Location />
ProxyPass https://IP.DU.SERVEUR.PROXMOX:8006/
#ProxyPassReverse https://IP.DU.SERVEUR.PROXMOX:8006/
</Location>
<LocationMatch ^/(api2/json/nodes/[^\/]+/[^\/]+/[^\/]+/vncwebsocket.*)$>
ProxyPass wss://IP.DU.SERVEUR.PROXMOX:8006/$1 retry=0
</LocationMatch>
<Location /websockify>
ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006
#ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006
</Location>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile fullchain.pem
SSLCertificateKeyFile privkey.pem
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyRequests off
ProxyPreserveHost on
RequestHeader unset Accept-Encoding
# On force l'accès via SSL
Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>