Nginx redirige vers le port 8080 lors de l'accès à l'url sans barre oblique [fermé]

19

lors de l'accès: http://example.com/somefolder -> http://example.com:8080/somefolder

J'ai essayé ceci:

 http {
    port_in_redirect off;

Des idées?

Chris Muench
la source
Pouvez-vous fournir votre configuration? Utilisez-vous un autre service derrière nginx?
Shane Madden
Je crois que nous mandatons Apache. Quels fichiers de configuration souhaitez-vous?
Chris Muench
3
Le fichier de configuration nginx qui définit le serverbloc qui contient la proxy_passdirective. Ce dont vous aurez probablement besoin sera une proxy_redirectdirective - voir votre configuration devrait confirmer.
Shane Madden
Notez que certains navigateurs mettent en cache les redirections.Par conséquent, lorsque vous passez port_in_redirectde onà, offvous devrez peut-être le redémarrer.
émersion du
@emersion port_in_redirectne fonctionne pas du tout
TomSawyer

Réponses:

21

Je viens de rencontrer le même problème et port_in_redirect off;j'ai réellement travaillé pour moi, assurez-vous simplement de l'utiliser dans le server {}bloc.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}
neojp
la source
Ou même utiliser à l' port_in_redirectintérieur location.
wqw
a parfaitement fonctionné pour héberger nginx sur 8080 derrière un équilibreur de charge. merci
xxstevenxo
a également travaillé pour moi, merci beaucoup pour votre aide
h3nr1ke
4

Cela devrait résoudre le problème. Ajouter une proxy_redirectdirective juste après la proxy_passdirective

proxy_redirect http://example.com:8080/ http://example.com/;

Hariadi
la source
3

Si quelqu'un rencontre toujours ce problème tout en ayant apache derrière la configuration du proxy inverse nginx, vous pouvez essayer le ff:

  emplacement / {
    proxy_redirect off;
    proxy_set_header Hôte $ host: $ server_port; # <- celui-ci a résolu le mien
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Ma configuration est que je laisse Apache écouter 127.0.0.1:8083 et laisse les requêtes proxy nginx.

gone43v3r
la source
2

J'ai eu le même problème avec ma configuration nginx + Apache. Apache semble rediriger vers son propre port (exécuté sur 8080), tandis que nginx est sur le port 80.

Dans ma configuration, cela faisait une boucle de redirection infinie pour les URL normales :

proxy_set_header Host $host:80; # Force port 80

Liez plutôt les données renvoyées au port 80, comme ceci:

proxy_bind $host:80; # Bind to port 80

Voici mon bloc serveur nginx:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Avec cette configuration générique, toutes les requêtes pour lesquelles nginx n'a pas de bloc serveur sont transmises à Apache.

Ecker00
la source
Ne fonctionne pas du tout
TomSawyer
1

Au cas où quelqu'un d'autre aurait ce problème - l'article ici: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ a résolu le problème pour moi .

J'ai dû ajouter un en-tête supplémentaire dans le proxy.

Assurez-vous que vous avez l'ensemble du pays hôte $http_hostet que vous avez défini le X-Forwarded-Hostà $http_hostcomme ci - dessous:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;
derekyau
la source
Cela ne fonctionne pas du tout
TomSawyer
1

Je pense que cet exemple simple suffit:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}
Xiaomu Blue
la source
0

J'avais un problème similaire.

Vous devriez peut-être utiliser la directive proxy_set_headerpour définir l'hôte et l'emplacement des en-têtes. Dans ma configuration, j'ai ajouté proxy_set_header Location $host:80; et toutes les demandes renvoient maintenant le port 80.

Sergii Kovtoniuk
la source
Je crois que cela va casser les redirections au-delà de "/" - chaque redirection pointerait vers $ host: 80
perrierism
0

Ce problème est dû à la conversion automatique de Nginx du chemin relatif en chemin absolu, non?
Il existe un moyen de dire à Nginx de ne pas traduire, vous ajoutez un espace avant la barre oblique: ngx.redirect(" /foo")

Simon
la source
Veuillez noter qu'il s'agit d'une question d'il y a 3 ans.
Deer Hunter
-1

Je recommanderais plutôt d'ajouter ceci à votre bloc serveur:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

C'était lorsque vous allez sur example.com/wp-admin, il ira sur example.com/wp-admin plutôt que sur example.com:8080/wp-admin/ et si vous êtes sur CloudFlare DNS par exemple, il dira le site est en panne.

J'utilise Ubuntu, Nginx et Varnish et cela fonctionne parfaitement maintenant plutôt que de désactiver port_in_redirect.

Pour ajouter, assurez-vous de redémarrer nginx après:

sudo service nginx restart
cchiera
la source
-1

L'ajout absolute_redirect off; du bloc de localisation fonctionne pour moi.

vijit sharma
la source