2
votes

Pourquoi est-ce que j'obtiens 404 sur le proxy inverse Nginx?

Voici ma configuration et j'obtiens 404 sur toutes les routes définies à l'exception de la route connue et je ne comprends pas pourquoi.

Si je fais une demande à http://example.tech/connect J'obtiens un 404 et si je fais une demande à http://api.example.tech Je reçois aussi un 404.

Je ne vois pas où je ' J'ai mal tourné car cela devrait fonctionner!

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log  warn;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #REMOVE REFERENCE TO FILES THAT HAVE  "server" and "location" blocks in them so we can do it all in this file
    #include /etc/nginx/conf.d/*.conf;

    # issue with ip and the nginx proxy
    real_ip_header X-Forwarded-For;
    set_real_ip_from 0.0.0.0/0;

    server {
        listen 80;
        listen [::]:80;
        server_name example.tech;

        location /.well-known/openid-configuration {
            proxy_pass https://myapp.net;

            proxy_redirect off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            #proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-Host $host;
            #proxy_set_header X-Forwarded-Proto $scheme;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffers 32 4k;
        }

        location /connect {
            proxy_pass https://myapp.net;

            proxy_redirect off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            #proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-Host $host;
            #proxy_set_header X-Forwarded-Proto $scheme;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffers 32 4k;
        }

        location /auth {
            proxy_pass https://myapp.net;

            proxy_redirect off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            #proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-Host $host;
            #proxy_set_header X-Forwarded-Proto $scheme;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffers 32 4k;
        }
    }

    server {
        listen 80;
        listen [::]:80;
        server_name api.example.tech;

        location /auth/ {
            proxy_pass https://myapp.net;

            proxy_redirect off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            #proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-Host $host;
            #proxy_set_header X-Forwarded-Proto $scheme;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffers 32 4k;
        }
    }
}


0 commentaires

3 Réponses :


2
votes

Besoin d'une barre oblique à la fin du proxy_pass pour une raison quelconque


0 commentaires

1
votes

Vous avez besoin d'un uri spécifique dans la directive proxy_pass , pas d'une barre oblique inverse. Mais dans votre cas ici, une barre oblique inverse agit comme l'URI spécifique. Nginx remplace '/ auth' (par exemple) par '/' (que vous avez ajouté).

En fait, la réponse que vous avez donnée est la bonne, en transformant proxy_pass http://myapp.net; en proxy_pass http://myapp.net/; .

La raison en est que proxy_pass fonctionnerait de deux manières différentes avec / sans uri spécifique. Plus de détails sur cette directive sur nginx.org. Blow est un contenu cité dans ce lien.

  • Si la directive proxy_pass est spécifiée avec un URI, alors lorsqu'une requête est transmise au serveur, la partie d'un URI de requête normalisé correspondant à l'emplacement est remplacé par un URI spécifié dans la directive:

    lieu / nom / {
    proxy_pass http://127.0.0.1/remote/ ;
    }

  • Si proxy_pass est spécifié sans URI, l'URI de la demande est transmis au serveur sous la même forme que celle envoyée par un client lorsque l'original la demande est traitée ou l'URI de la demande normalisée complète est passée lors du traitement de l'URI modifié:

    emplacement / certains / chemin / {
    proxy_pass http://127.0.0.1 ;
    }

Dans votre cas, sans URI dans la directive proxy_pass , donc / auth serait passé au serveur backend. Malheureusement, votre serveur backend ne dispose pas de la ressource / auth , donc 404 est renvoyé. Si votre serveur backend a / auth à traiter, vous n'obtiendrez jamais l'erreur 404 en demandant uri / auth .


0 commentaires

0
votes

C'est mon cas comment j'ai 404 au lieu de 502:

# let's define some proxy pass
location ~ /.well-known/acme-challenge {
    proxy_pass http://127.0.0.1:5080; # this backend doesn't exist which leads to 502
    proxy_set_header Host $host;
}

# this is a default directives
error_page   500 502 503 504  /50x.html; # this is a reason to redirect 502 to 50x.html
location = /50x.html { # but this file doesn't exist in root so we get 404 instead of 502
    root   /usr/share/nginx/html;
}


0 commentaires