Question Empêcher le changement de port sur la redirection dans nginx


J'ai actuellement la configuration nginx pour diffuser du contenu via Varnish. Nginx écoute sur le port 8000 et varnish relie les demandes des utilisateurs de 80 à 8000.

Le problème est, à certaines occasions, en particulier lorsque vous essayez de frapper un répertoire, comme site.com/2010, nginx redirige la demande vers site.com:8000/2010/.

Comment puis-je empêcher cela?


6
2018-01-27 18:21


origine




Réponses:


J'ai trouvé la réponse à cette question en lisant plus attentivement le Documents HttpCoreModule.

port_in_redirect off;

Ceci conserve le port utilisé par le client lors des redirections. Étroitement liée est server_name_in_redirect qui utilise le premier nom d'hôte pour les redirections. Comme je ne voulais pas que sitename.v.myserver.com redirige vers sitename.com,


9
2018-02-01 01:21





Le code derrière NGINX utilise probablement la variable FASTCGI, SERVER_PORT, pour déterminer où diriger l'utilisateur. SERVER_PORT contiendra le port sur lequel nginx est à l’écoute, ce qui serait 8000 dans votre cas.

Vous pouvez essayer quelque chose comme ceci à des fins de test:

location ~ \.php$ {
        [...]
        fastcgi_param  SERVER_PORT 80;
}

adapté à votre configuration. C'est un sale coup mais peut vous aider à diagnostiquer le problème.


3
2018-01-28 01:22





Je mon cas nginx écoute mettre en communication 80 à l'intérieur d'un conteneur de menu fixe, mais il est mappé sur le port 8080 (ou tout port aléatoire) en dehors du conteneur. Il n'y a pas de proxy inverse entre les deux qui puisse ajouter des en-têtes appropriés pour le port et ne veut pas non plus le coder en dur dans la configuration de nginx.

Exemple de mauvaise redirection:

http://localhost:8080/directory -> http://localhost/directory/

J'ai essayé:

server {
  # ...
  port_in_redirect off;
  server_name_in_redirect off;
  # ...
}

Mais ça n'a pas marché. La seule chose qui a bien fonctionné était:

server {
  # ...
  absolute_redirect off;
  # ...
}

Entrée manuelle pourabsolute_redirect dit:

Si cette option est désactivée, les redirections émises par nginx seront relatives.

Je trouve cela plus flexible et ne vous oblige pas à avoir le nom du serveur et le port codés en dur n'importe où.

Si vous êtes inquiet à propos des redirections avec vérification des URL relatives ce commentaire.


3
2018-02-22 10:17



même problème, querelles avec nginx dans docker .. absolute_redirect off; aide, cependant, c’est si l’on a besoin occasionnellement d’une règle de réécriture redirigeant vers une ressource externe, avec absolute_redirect set à off, on ne pourra pas. En l'ajoutant à spécifique location bloquer, on peut cibler des chemins d’emplacement spécifiques. - anapsix


Pour ceux qui ont

  • Vernis écoute port 80
  • serveur principal (dans mon cas, nginx) écoute le port 8080

le fastcgi_param SERVER_PORT devrait être identique à l'interface.

Alors, j'ai mis

fastcgi_param  SERVER_PORT 80;

pour rediriger vers l'URL appropriée à partir de nginx.


2
2018-02-23 13:12