Điểm:0

{“status”:400,“message”:“Bad request”} when hit a microservice using Nginx API Gateway

lá cờ us

Hi I am trying to consume an api using Nginx API Gateway: I have this url: example.com/api/nodeapp. In my setup I have an Ingress controller which is exposed externally at .com and which takes request do oauth and redirect to internal nginx pod(exposed as Cluster IP service in private cluster) this internal nginx pod will do re route to target microservice pod (also exposed as Cluster IP service in same private cluster). Goal: I browse url as example.com/api/nodeapp ---> the Ingress will do oauth and redirect request to Nginx (which is happening fine ) the Nginx take my request and redirect me to target nodeapp microservice (which is failing at Error 400) My code snippets:

Ingress.yaml

spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /api/nodeapp
            backend:
              serviceName: nginx-internal-service
              servicePort: 80
          - path: /api/tea
            backend:
              serviceName: nginx-internal-service
              servicePort: 80

Nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log debug;
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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    include /etc/nginx/api_gateway.conf;
    include /etc/nginx/conf.d/*.conf;
}

api_gateway.conf

include api_backends.conf;
#include api_keys.conf;

server {
    access_log /var/log/nginx/api_access.log main; # Each API may also log to a separate file

    listen 80; # TLS config goes here (for production use)
    server_name example.com;

    # TLS config
    #ssl_certificate      /etc/ssl/certs/api.example.com.crt;
    #ssl_certificate_key  /etc/ssl/private/api.example.com.key;
    #ssl_session_cache    shared:SSL:10m;
    #ssl_session_timeout  5m;
    #ssl_ciphers          HIGH:!aNULL:!MD5;
    #ssl_protocols        TLSv1.2 TLSv1.3;
   # Invalid resource
    location / {
        rewrite ^ https://$host$request_uri permanent;
    }
    # API definitions, one per file
    include api_conf.d/*.conf;

    # Error responses
    error_page 404 = @400;         # Invalid paths are treated as bad requests
    location @400 {
        return 400 '{"status":400,"message":"Bad request"}\n';
    }
    proxy_intercept_errors on;     # Do not send backend errors to the client
    include errors_json.conf;  # API client friendly JSON error responses
    default_type application/json; # If no content-type then assume JSON
}

nodeapi_simple.conf

# Node API
#
location /api/ {
    # Policy configuration here (authentication, rate limiting, logging, more...)
    #
    access_log /var/log/nginx/nodeapp_api.log main;

    # URI routing
    #
    location /api/tea {
        proxy_pass http://tea;
    }

    location /api/nodeapp {
        proxy_pass http://nodeapp;
    }

    return 404; # Catch-all
}

# vim: syntax=nginx

api_backend.conf

upstream nodeapp {
    zone nodeapp 64k;
    server nodeapp IP:8000;
    
    
}


upstream tea {
    zone tea 64k;
    server Tea app IP:80;
    
    
}



# vim: syntax=nginx

My main focus here is to run the example.com/api/nodeapp to run which is not working though I have already tested nodeapp on localhost its running fine. Also strange thing is this tea app is a just a sample text based app which is working as I hit in the browser with URL example.com/api/tea its working a[[1]: https://i.stack.imgur.com/3fP3k.png][1]s per below snap:

Here are my logs [1]: https://i.stack.imgur.com/jssnb.png][1] I been stuck on this error since 3 days hence requesting everyone to help me out on this at their earliest conveniences

Michael Hampton avatar
lá cờ cz
Bạn đã viết cấu hình nginx này hay sao chép nó từ đâu đó? Nó cho thấy rõ ràng rằng "400" mà bạn nhận được thực sự là 404 từ máy chủ API mà cấu hình của bạn ghi lại thành 400 với nội dung phản hồi cụ thể đó. Tiếp theo, bạn nên xem xét máy chủ API.
yash avatar
lá cờ us
Tôi sử dụng cấu hình nginx từ blog nginx "Triển khai NGINX dưới dạng Cổng API, Phần 1" và tôi đã kiểm tra máy chủ api của nút với bản thân nginx bên ngoài, nó hoạt động tốt (200) giống như bất cứ khi nào tôi nhấn example.com/node (không sử dụng của nginx nội bộ) tôi nhận được trang thành công nhưng khi tôi nhấn example.com/api/nodeapp (thông qua lối vào và nhóm nginx nội bộ) tôi gặp lỗi 400 này
yash avatar
lá cờ us
Tôi cũng đã thêm nhật ký mặc dù chúng không có nhiều chi tiết nhưng đây là những gì tôi chỉ nhận được
yash avatar
lá cờ us
bạn nói đúng, tôi đã nhận xét dòng "trang lỗi 404 = @400" và bây giờ tôi đang gặp lỗi 404 nhưng không biết phải làm gì tiếp theo
Michael Hampton avatar
lá cờ cz
Bạn kiểm tra lại ứng dụng của mình.
yash avatar
lá cờ us
Tôi đã kiểm tra lại ứng dụng của mình bên trong máy chủ. Ứng dụng này thực sự đang hoạt động. Có một vấn đề ở đây là có gì đó không ổn với " proxy pass http://nodeip:nodeport" Điều tôi đã làm là tôi đã nhận xét dòng này trong khối vị trí /api/nodeapp {) và thay vào đó tôi đặt return 200; và sau đó đã kiểm tra ứng dụng của tôi, nó đã đạt mức 200, điều đó có nghĩa là có điều gì đó khó hiểu với đường chuyền proxy không thể truy cập vào ứng dụng nút của tôi
yash avatar
lá cờ us
Nó hoạt động tôi đoán bây giờ tôi chỉ cần thêm / vào cuối proxy pass proxy pass nodeip:nodeport như thế này -> proxy pass nodeip:nodeport/
yash avatar
lá cờ us
Một vấn đề là làm thế nào nếu ứng dụng của tôi được định cấu hình theo cách mà yêu cầu của tôi có thể giống như /api/nodeapp/something thì làm cách nào để chuyển hướng url này đến trang được nhắm mục tiêu?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.