web-dev-qa-db-fra.com

Comment diffuser des images avec nginx

Je suis complètement nouveau sur nginx et on me demande de trouver un moyen de servir les tuiles de carte qui sont séparées en fonction des niveaux de zoom. La structure du fichier image est comme ~/data/images/7/65/70.png où 7 est le niveau de zoom, 65 et 70 sont les valeurs lon-lat. Le dossier 65 contient de nombreux fichiers tels que 71.png, 72.png et etc.

J'ai installé Nginx correctement et je peux obtenir Welcome to nginx message. J'ai suivi les instructions de http://nginx.org/en/docs/beginners_guide.html et créé le /data/www et /data/images répertoires. J'ai placé le fichier index.html sous /data/www et des images de tuiles sous /data/images. J'ai ensuite modifié le fichier de configuration en ajoutant les lignes suivantes dans les balises http:

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

Après avoir rechargé le fichier de configuration et entré localhost sur le navigateur, je ne peux ni obtenir le fichier index.html ni voir les images.

Ce que j'essaie de faire, c'est d'afficher l'image lorsque j'entre quelque chose comme:

http://localhost/1.0.0/basemap/7/65/70.png
  • 7: dossier indiquant le 7e niveau de zoom
  • 65: dossier indiquant la latitude
  • 70.png: fichier indiquant la longitude (le dossier 65 comprend de nombreux fichiers png)

Qu'est-ce que je rate?

13
iso_9001_

Ok, laissez-moi vous expliquer quelque chose, vous avez déjà un serveur localhost, qui est défini dans un fichier appelé default qui est le fichier qui fait apparaître "Welcome to nginx" ou quelque chose, et je pense que vous pouvez ' t créer un nouveau serveur avec le même server_name, supprimons cela et faisons en sorte que votre hôte local ne diffuse que ces images,

  • Nous devons d'abord supprimer le fichier default de sites-enabled, il existera toujours à l'intérieur sites-available si jamais vous voulez le récupérer. (notez que tous les fichiers à l'intérieur de sites-enabled sont simplement des liens symboliques à partir des fichiers à l'intérieur de sites-available)
  • Nous créons un nouveau fichier à l'intérieur de sites-available et appelez-le comme vous voulez, images-app par exemple
  • créer le nouveau serveur dans le images-app fichier, je suppose que la racine de l'application se trouve dans un dossier appelé /data bien sûr, vous allez associer cela à votre propre structure de serveur.

    server {
        server_name localhost;
        root /data;
        index index.html;
        location / {
            try_files $uri =404;
        }
    }
    
  • maintenant on passe à sites-enabled et activez ce site que nous avons créé à l'intérieur sites-available

    Sudo ln -s /etc/nginx/sites-available/images-app /etc/nginx/sites-enabled/
    
  • assurez-vous que toutes les config nginx sont correctes

    Sudo nginx -t
    
  • Si rien ne va, nous pouvons aller de l'avant et recharger les paramètres nginx

    Sudo service nginx reload
    
17
Mohammad AbuShady

Je suis également nouveau sur nginx, voici ma solution qui est similaire à la réponse de Mohammad AbuShady:

  • supprimer sites-enabled/default
  • créer le whatever.conf dans /etc/nginx/conf.d/

La raison est:

sites-enabled/default a défini un serveur

qui écoute sur 80 enracinement avec/var/www/html

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  root /var/www/html;
  location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }
}

les nginx.conf le fichier inclut d'autres fichiers conf

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

faites attention à la permission

la 1ère édition de my.conf est root sur/home/scotv /, mais obtiendra une erreur interdite 403, consultez le fichier error.log:

2016/04/07 20:12:44 [error] 12466#0: *2 open() "/home/scotv/data/a" failed (13: Permission denied), 
client: 127.0.0.1, server: , request: "GET /a HTTP/1.1", Host: "localhost"
3
scozv

Pour mon cas, je viens de modifier /etc/nginx/sites-enabled/default fichier.

J'ai ajouté la configuration suivante:

location /images/ {
            root /data;
        }

et placé des images sous /data/images:

enter image description here

et l'url fonctionne: http: //localhost/images/example.png

J'utilise VS Code comme SuperUser. (Je sais que c'est mauvais, mais j'accepte les risques) Cela aide beaucoup à l'édition des fichiers d'accès root:

enter image description here

1
Teoman shipahi