Почему я получаю 404 на обратном прокси-сервере nginx? - PullRequest
0 голосов
/ 11 января 2019

Ниже мой конфиг, и я получаю 404 на всех маршрутах, определенных кроме маршрута well-known, и я не понимаю, почему.

Если я сделаю запрос к http://example.tech/connect, я получу 404, а если я сделаю запрос к http://api.example.tech, я также получу 404.

Я не вижу, где я ошибся, так как похоже, что это должно сработать!

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;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Вам нужен определенный URI в директиве proxy_pass, а не обратный слеш. Но в вашем случае здесь обратный слеш действует как конкретный URI. Nginx заменяет '/auth' (например) на '/' (вы добавили).

На самом деле, вы ответили правильно, превратив proxy_pass http://myapp.net; в proxy_pass http://myapp.net/;.

Причина в том, что proxy_pass будет работать двумя разными способами с / без определенного URI. Подробнее об этой директиве на nginx.org. Blow - это некоторый контент, указанный в этой ссылке.

  • Если директива proxy_pass указана с URI, то когда запрос передается на сервер, часть нормализованного URI запроса совпадающее местоположение заменяется на URI, указанный в директиве:

    местоположение / название / {
    proxy_pass http://127.0.0.1/remote/;
    }

  • Если proxy_pass указан без URI, URI запроса передается на сервер в той же форме, что и отправленный клиентом, когда оригинал запрос обработан или передан полный нормализованный URI запроса при обработке измененного URI:

    location / some / path / {
    proxy_pass http://127.0.0.1;
    }

В вашем случае без URI в директиве proxy_pass, поэтому /auth будет передано на внутренний сервер. К сожалению, ваш сервер не имеет ресурса /auth, поэтому возвращается 404. Если ваш внутренний сервер должен обработать /auth, вы никогда не получите ошибку 404 при запросе uri /auth.

0 голосов
/ 11 января 2019

По какой-то причине требовалась косая черта в конце proxy_pass

...