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 toujours garder 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 http://my-app.net
, saisis les informations de connexion, je suis ensuite redirigé vers http://ip_of_the_app:7180
la même page de connexion et je dois me reconnecter. Cette double connexion peut-elle être évitée?
linux
nginx
reverse-proxy
tonio94
la source
la source
Réponses:
Ne vous mettez pas
proxy_redirect
àoff
, ce n'est pas faire ce que vous pensez qu'il fait.proxy_redirect
effectue quelque chose de similaire à la réécriture d'URL, par exemple:Cela vous permet d'héberger le
/sales/
chemin ailleurs. Mais même dans ce cas, les paramètres par défaut deproxy_redirect
font exactement cela pour vous gratuitement. La valeur par défaut est de rediriger l'emplacement dans tout ce qui est présent dansproxy_pass
(et les paramètres par défaut sont utilisés lorsque vous ne définissez pasproxy_redirect
du tout, ou utilisezproxy_redirect default;
).Vous n'avez pas besoin de régler
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 proxy comme vous le souhaitez et conservera l'URL correcte dans le navigateur.Notez que l'application
http://ip_of_the_app:7180/
recevra désormais la demande avec l'en-Host: my-app.net
tête.Vous devriez également envisager d'utiliser quelques en-têtes supplémentaires:
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 à l'nginx
IP s) etX-Forwarded-Proto
pour vérifier si le client s'est connecté ànginx
via HTTP ou HTTPS.la source
Referer
est simplement celle$http_referer
qui le copie de la requête. Cela ne fonctionne pas si la demande n'a pas d'en-tête Referer, donc le codage en dur est une solution dans certains cas.