J'utilise nginx
comme proxy inverse et lorsque je me connecte dans mon interface Web, je suis redirigé vers l'URL proxy. Je voudrais l'éviter et garder toujours le "nom_serveur" comme URL. C'est possible?
C'est mon /etc/nginx/conf.d/my_app.conf
:
server {
listen 443 ssl;
server_name my-app.net;
ssl_certificate /etc/pki/tls/certs/my-app.cer;
ssl_certificate_key /etc/pki/tls/private/my-app.key;
ssl_protocols TLSv1.1 TLSv1.2;
access_log /var/log/nginx/my-app.access.log main;
location / {
proxy_pass http://ip_of_the_app:7180/;
proxy_redirect off;
}
}
Je me connecte sur http://my-app.net
, entrez les informations de connexion, je suis ensuite redirigé vers http://ip_of_the_app:7180
sur la même page de connexion et je dois me reconnecter. Cette double connexion peut-elle être évitée?
Ne pas fixer proxy_redirect
à off
, cela ne fait pas ce que vous pensez qu'il fait. proxy_redirect
effectue quelque chose de similaire à la réécriture d'URL, par exemple:
location /sales/ {
proxy_pass http://ip_of_the_app:7180/;
proxy_redirect http://ip_of_the_app:7180/ http://$Host/sales/;
}
Cela vous permet d'héberger le /sales/
chemin ailleurs. Mais même dans ce cas, les paramètres par défaut de proxy_redirect
faites exactement cela pour vous gratuitement. La valeur par défaut est de rediriger l'emplacement vers ce qui est présent dans proxy_pass
(et les paramètres par défaut sont utilisés lorsque vous ne définissez pas proxy_redirect
du tout, ou utilisez proxy_redirect default;
).
Vous n'avez pas besoin de définir proxy_redirect
.
Ce qui vous manque, ce sont des en-têtes qui doivent être envoyés à l'application. Le plus important d'entre eux est Host
. Cela effectuera le mandataire comme vous le souhaitez et conservera l'URL correcte dans le navigateur.
location / {
proxy_pass http://ip_of_the_app:7180/;
proxy_set_header Host $Host;
}
Notez que l'application sur http://ip_of_the_app:7180/
recevra désormais la demande avec le Host: my-app.net
entête.
Vous devriez également envisager d'utiliser quelques en-têtes supplémentaires:
proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
Cela permettra une meilleure connexion à l'intérieur de l'application sur http://ip_of_the_app:7180/
. X-Forwarded-For
donnant l'IP du client réel (par opposition à nginx
s IP) et X-Forwarded-Proto
pour vérifier si le client s'est connecté au nginx
via HTTP ou HTTPS.