1 votes

nginx disable directory browsing ne fonctionne pas

J'ai une application Django en production et mon serveur web est Nginx.

Mon application est située à l'adresse suivante /home/rouizi/blog et disons que mon nom de domaine est example.com . Je veux empêcher les utilisateurs de lire les fichiers qui se trouvent dans le dossier de l'utilisateur. blog dossier.

Par exemple, avec ma configuration actuelle, si quelqu'un accède à exemple.com/manage.py il peut voir le contenu de ce fichier. Je veux plutôt lui montrer un 404 not found erreur.

Voici ma configuration de nginx :

/etc/nginx/nginx.conf

user www-data;
worker_processes auto;

pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 1024;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        include /etc/nginx/conf.d/*.conf;

       add_header    X-Content-Type-Options nosniff;
       add_header    X-Frame-Options SAMEORIGIN;
       add_header    X-XSS-Protection "1; mode=block";

       server_tokens off;
       keepalive_timeout 75;
}

/etc/nginx/conf.d/example.conf

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen         80;
    server_name    example.com www.example.com;
    return         301 https://example.com$request_uri;
}

server {
    listen                          443 ssl http2 default_server;
    listen                          [::]:443 ssl http2 default_server;

    #  ssl stuff

    server_name                     example.com www.example.com;
    root                            /home/rouizi/blog/;
    index                           index.html;

    location /static {
        alias /home/rouizi/blog/staticfiles/;
     }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://127.0.0.1:8000;
            break;
        }
    }

    gzip             on;
    gzip_comp_level  3;
    gzip_types       text/plain text/css application/javascript image/*;
}

Ce que j'ai essayé jusqu'à présent :

J'ai ajouté la directive autoindex on; et rechargez nginx. Ne fonctionne pas

J'ai ajouté un index.html dans le fichier blog directory et rechargez nginx. Ne fonctionne pas

Comment puis-je résoudre ce problème ?

Editar

J'ai découvert que si je mets mon adresse IP à la place de mon nom de domaine dans le champ server_name la navigation dans le répertoire est désactivée :

/etc/nginx/conf.d/example.conf

# ...

server {
    # ...
    #  ssl stuff

    server_name                     139.151.187.143;

    # ...

}

Comme ça, si je vais à exemple.com/manage.py ou d'autres fichiers, j'obtiens un 404 not found de mon application Dango. Mais les fichiers statiques et multimédia ne sont plus servis non plus.

Quelqu'un peut expliquer pourquoi ? Ce problème est-il lié à mon fournisseur d'hébergement DNS ?

2voto

anx Points 5996

Servir quoi que ce soit d'autre que les fichiers spécifiquement copiés sur une static n'est pas typiquement ce que vous voulez pour les applications alimentées par Django.

Le site configuration typique fonctionne comme ça :

  1. tout dans /static est géré par le serveur web (c'est ce que le location /static {} porte sur : le alias pointe vers le répertoire où se trouvent les fichiers django collectstatic les commandes placent les fichiers statiques)
  2. traitement similaire d'un /media l'emplacement, si nécessaire
  3. tout le reste est transmis à l'application wsgi (ce qui signifie que les fichiers de votre programme sont no directement accessible par le nginx serveur)

Ce que vous voulez, c'est probablement supprimer le root /home/rouizi/blog/; et sans condition (pas à l'intérieur d'un if (!-f $request_filename) { block) transmet les demandes à votre application wsgi.

0voto

Tero Kilkanen Points 32968

Vous devez configurer l'application qui est exécutée à 127.0.0.1:8000 pour bloquer ces demandes.

nginx transmet simplement toutes les requêtes commençant par / à votre application web, sauf pour les requêtes commençant par /static .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X