Redirection de barre oblique de fin Nginx + Apache [fermé]

8

J'ai un Nginxserveur fonctionnant sur un 80port qui fonctionne comme un proxy et Apache 2.2qui écoute127.0.0.1:8080

Lorsque j'y accède, http://hostname/subfolder/cela fonctionne très bien.
Lorsque j'y accède, http://hostname/subfolderil me redirige vers http://hostname:8080/subfolder/ce qui ne va pas.

Pour autant que je vois la mauvaise redirection est retournée par Apache mais UseCanonicalNameet UseCanonicalPhysicalProxysont toutes les deux définies surOff

Des idées sur la façon de résoudre ce problème?

quark
la source
Le problème semble provenir de votre configuration nginx étant donné que votre accès au port 80 sans barre oblique entraîne une redirection vers le port 8080. À MOINS que votre nginx ne procède à un proxy vers Apache et qu'Apache commande une redirection.
PP.
J'utilise nginx comme proxy
quark

Réponses:

5

J'ai également rencontré cela, et j'ai pu le corriger avec une directive proxy_redirect juste après ma directive proxy_pass dans ma configuration nginx:

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

Ceci est ma configuration nginx complète (dans mon cas, Apache est sur le port 81 et héberge deux sites. J'ai ajouté deux lignes proxy_redirect spécifiques au site parce que je ne sais pas comment ajouter une seule générique.)

server {
    listen 80;

    access_log /var/log/nginx/apache-proxy.access.log;

    location / {
        proxy_pass http://localhost:81;

        #fix for apache redirects that include the port number
        proxy_redirect http://nfriedly.com:81/ http://nfriedly.com/;
        proxy_redirect http://misticflame.com:81/ http://misticflame.com/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 6000;
        proxy_send_timeout 6000;
        proxy_read_timeout 6000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        send_timeout 6000;
        proxy_buffering off;
        proxy_next_upstream error;

    }
}

Remarque: c'était pour une version pré-1.0 de nginx il y a 5+ ans. Voici les documents pour proxy_redirect pour la version actuelle: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Nathan Friedly
la source
l'ajout de proxy_redirect donne l'erreur de syntaxe
TomSawyer
C'était sur une version assez ancienne de nginx. Je n'utilise plus nginx (juste du contenu statique sur les pages github pour mon site personnel), mais j'ai mis à jour la réponse avec un lien vers les documents proxy_redirect actuels.
Nathan Friedly
De cette façon, vous l'obtenez toujours plus lentement en raison de la redirection
TomSawyer
2

Si votre directive ServerName sur Apache est définie sur "hostname: 8080", supprimez ": 8080" ou remplacez-la par "hostname: 80". Vous pouvez également ajouter "proxy_set_header Host $ host: 80"

user71577
la source
1

J'ai eu ce problème il y a longtemps .. Comme je me souviens, cela avait à voir avec le HTTP RFC, une barre oblique à la fin désigne un répertoire (/ test /), aucune barre oblique à la fin c'est un fichier (/ test)

Pour faire court, ajoutez une règle de réécriture qui ajoutera une barre oblique à la demande, s'il n'y en a pas.

regardez Résolu: problème de barre oblique de fin avec le serveur Nginx

HTP

Mihai
la source
1

J'ai rencontré ce problème exactement récemment. Alors que les solutions suggérées fonctionneront, Nginx propose une solution intégrée:

proxy_redirect default;

Documentation à http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Voici un exemple complet de la façon de l'utiliser:

server {
  listen 80;
  location / {
    proxy_pass http://localhost:8080
    proxy_redirect default
  }
}
Bois Dylan
la source
0

Peut-être que nginx ne définit pas les en-têtes de proxy pour indiquer à apache à quoi ressemblait la demande d'origine.

En nginx:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Voir http://wiki.nginx.org/LikeApache

des haricots
la source