2017-05-03 1 views
1

J'ai un petit périphérique Linux embarqué exécutant Nginx. Je peux me connecter sur le réseau et accéder aux terminaux sur un PC dans Chrome ou Firefox. Ma page par défaut contient une balise HTML qui pointe vers "loading.jpeg", qui se trouve sur le périphérique dans /tmp/nginx/loading.jpeg. Je peux taper dans le navigateur: http://192.168.0.4/loading.jpeg et voir mon image. Je peux également visiter le point de terminaison qui rend html et voir mon image rendue correctement.La page par défaut de Nginx et la directive de serveur Web racine

Maintenant, je veux être en mesure de visiter la page racine: http://192.168.0.4/ dans un navigateur et de rediriger cela vers ma page par défaut qui devrait rendre le code HTML et montrer l'image. Le problème est que si je place une page pour l'emplacement "/" par défaut, ma directive racine du serveur web pointant vers/tmp/nginx ne fonctionne plus. Donc, je reçois ma page affichée, mais l'image loading.jpeg est introuvable. J'ai essayé de rediriger la requête root vers ma page par défaut, mais cela casse aussi la racine du serveur web.

Comment puis-je rendre une page Web par défaut pour Nginx, tout en faisant en sorte que mon serveur web soit respecté? Je vous remercie.

Cela ne fonctionne pas (racine du serveur Web est cassé - bien que page Web par défaut prévu est affichée):

location/{ 

      default_type text/html; 
      content_by_lua_file /sbin/http/serve_stream.lua; 

      ## The streaming endpoint 
      location /streaming { 

       default_type text/html; 
       content_by_lua_file /sbin/http/serve_stream.lua; 

      } 

Voici mon nginx.conf actuel sans redirection:

## Setup server to handle URI requests 
server { 

    # Setup the root 
    root /tmp/nginx; 

    ## Port 
    listen  80; ## Default HTTP 

    ## Android phones from Ice Cream Sandwich will try and get a response from 
    server_name 
      clients3.google.com 
      clients.l.google.com 
      connectivitycheck.android.com 
      apple.com 
      captive.apple.com; 

    ## We want to allow POSTing URI's with filenames with extensions in them 
    ## and nginx does not have a "NOT MATCH" location rule - so we catch all 
    ## and then selectively disable ones we don't want and proxy pass the rest 
    location/{ 

     # For Android - Captive Portal 
     location /generate_204 { 
      return 204; 
     } 

     # For iOS - CaptivePortal 
     if ($http_user_agent ~* (CaptiveNetworkSupport)) { 
      return 200; 
     } 

     ## Raw WebSocket 
     location /ws { 

      lua_socket_log_errors off; 
      lua_check_client_abort on; 

      default_type text/html; 
       content_by_lua_file /sbin/http/websocket.lua; 

     } 

     ## The streaming endpoint 
     location /streaming { 

      default_type text/html; 
      content_by_lua_file /sbin/http/serve_stream.lua; 

     } 

     ## We can have file extensions in POSTing of /blahendpoints for filesystem 
     ## control HTTP commands 
     location ~ "\.(txt|bin)$" { 

      ... 

     } 

    } 

} 

Répondre

1

Il y a nombre de solutions. Un bloc de correspondance exacte location avec un rewrite ... last est très efficace:

location =/{ 
    rewrite^/some.html last; 
} 

Voir this document pour plus.