0

Je cours une production d'API REST basée sur Play Framework 2.5.10. C'est en cours de routage inverse NGINX, je suis en mesure d'atteindre tous les points de fin GET, mais je reçois un délai d'attente sur tous les points de terminaison POST, tout cela consomme JSON. S'il vous plaît noter que sur l'environnement de développement fonctionne très bien et je suis capable d'atteindre tous ces points de terminaison, mais en production, je reçois un délai d'attente sur POST que ce soit en se connectant via IP ou via route inverse DNS.Lecture du point de terminaison POST Framework renvoyé Time Out - 504

Tout pointeur dans la résolution de ceci est très apprécié.

server { 
listen 80; 
server_name subdomain.domain.com; 

location/{ 
    proxy_connect_timeout  300; 
    proxy_send_timeout   300; 
    proxy_read_timeout   300; 
    send_timeout    300; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host  $http_host; 
    proxy_http_version 1.1; 
    proxy_set_header Connection ""; 
    proxy_pass http://xxx.xxx.xxx.xxx:3000; 
    } 
} 

Route essayant d'accéder

POST /auth      controllers.Application.authenticate() 

Ai-je besoin de définir toutes les routes sur nginx?

Ajouté auth code

@BodyParser.Of(BodyParser.Json.class) 
public Result authenticate(){ 
    JsonNode json = request().body().asJson(); 
    EncryptUtil secure = null; 
    secure=EncryptUtil.getSecurityUtility(); 
    String command = "login"; 
    String logincommand = json.findPath("command").asText(); 
    if (logincommand.equals(command)){ 
     String email = json.findPath("email").textValue(); 
     String password = json.findPath("password").textValue(); 
     Logger.info("Passwords::"+password+"\t"+secure.getEncryptedUserPassword(password.trim())); 
     UserAccount user=UserAccount.findByEmail(email); 
     if(user!=null){ 
      if(!(secure.getDecryptedUserPassword(user.password).equals(password))){ 
       return status(400,"Invalid credentials"); 
      }else { 
       if (user.accountstatus == Boolean.FALSE){ 
        result.put("error","Account Deactivated Contact Admin"); 
        return status(400,"Account Deactivated Contact Admin"); 

       } else { 
        String authToken = user.createToken(); 
        ObjectNode authTokenJson = Json.newObject(); 
        authTokenJson.put(AUTH_TOKEN, authToken); 
        response().setCookie(Http.Cookie.builder(AUTH_TOKEN, authToken).withSecure(ctx().request().secure()).build()); 
        JsonNode userJson = Json.toJson(user); 
        return status(200,userJson); 
       } 

      } 

     } 
     else{ 
      result.put("Error", "Invalid User"); 
      Logger.info(result.toString()); 
      return status(400,"Invalid Credentials"); 
     } 
    } else{ 
     return globalFunctions.returnBadRequest(command); 
    } 

} 
+0

Partagez la méthode pour l'action POST (dans votre automate) ainsi que la section correspondante de nginx conf. – marcospereira

+0

@marcospereira J'ai posté l'information que vous avez demandée. – Seroney

+0

Pouvez-vous confirmer que les demandes POST arrivent réellement dans votre application? Pourriez-vous également publier le code pour la méthode 'authenticate'? – marcospereira

Répondre

1

Dans le cas où votre corps demande POST sont grandes et la connexion est lente et/ou le milieu où nginx stocke les fichiers temporaires est lent, cela peut être causé par la mise en mémoire tampon de demande que nginx fait par défaut. Dans son fichier journal, nginx devrait également avertir que des corps volumineux sont mis en cache sur le disque.

Si tel est votre problème, vous pouvez désactiver les requêtes de mise en mémoire tampon avec la directive suivante, valable à l'intérieur http, server et location strophes:

proxy_request_buffering off; 

Notez que cela empêche le basculement vers les serveurs de sauvegarde dans certains cas , au cas où vous utilisez cette fonctionnalité. Si non, vous allez bien.

Voir aussi http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_buffering

Si vous le souhaitez, vous pouvez désactiver mise en mémoire tampon de demande sélective, par exemple que pour certains location s ou juste pour la méthode POST.

+0

génial m'a pointé dans la bonne direction – Seroney