Tengo 3 nombres de dominio y estoy tratando de host de todos los 3 sitios en un mismo servidor (Digital Ocean gota) usando el Nginx.

misitio1.nombre
mysite2.nombre
mysite3.nombre

Sólo 1 de ellos funciona. Los otros dos resultar en errores 403 (de la misma manera).

En mi nginx registro de errores, veo: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden.

Mi sites-enabled config es:

server {
        server_name www.mysite2.name;
        return 301 $scheme://mysite2.name$request_uri;
}
server {
        server_name     mysite2.name;

        root /usr/share/nginx/mysite2.name/live/;
        index index.html index.htm index.php;

        location /{
                try_files $uri $uri//index.html index.php;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Todos 3 los sitios tienen casi las mismas archivos de configuración.

Cada uno de los archivos del sitio están en las carpetas como /usr/share/nginx/misitio1.nombre/someFolder y, a continuación, /usr/share/nginx/misitio1.nombre/vivir es un enlace simbólico para que. (Lo mismo para mysite2 y mysite3.)

He mirado en Nginx 403 prohibido para todos los archivos pero eso no ayuda.

Alguna idea sobre lo que podría estar equivocado?

  • creo que tienes index.html index.php archivos que faltan, ¿asegúrese de que existe en esa carpeta?
  • Oh, tienes razón; los 2 sitios que no son un proyecto de Laravel (que ha index.php en un /público subcarpeta) y un viejo proyecto de CodeIgniter (que ha index.php en un /public_web subcarpeta). Pero no estoy seguro de cómo cambiar la configuración de mi para hacer que los sitios de trabajo.
  • Igual que @MohammadAbuShady dicho, no tiene un archivo de índice en la carpeta y tengo este error.
  • Acabo de recibir este error de nuevo, pero esta vez el problema era que yo había accidentalmente la root a ser /Users/myUsername/code/app en lugar de /Users/myUsername/code/app/public.
  • Esto es cuando los administradores de servidor brillo. detalles
InformationsquelleAutor Ryan | 2013-10-10

18 Comentarios

  1. 127

    Si usted tiene indexación de directorios, y teniendo este problema, es probablemente porque el try_files está utilizando tiene una opción de directorio:

    location /{
      try_files $uri $uri//index.html index.php;
    }                 ^ that is the issue
    

    La quita y se debe trabajar:

    location /{
      try_files $uri /index.html index.php;
    } 
    

    De lo que puedo ver, esto es causado porque nginx intentará índice del directorio, y de ser bloqueado por sí mismo. Lanzando el mensaje de error mencionado por OP.

    • Este es exactamente el problema que estaba teniendo. Yo no podía entender por qué try_files no estaba tratando de index.php, seguí recibiendo 403 con el «índice del directorio de la … está prohibido»
    • He quitado $uri/ y funciona
    • mismo aquí: este es mi aceptado respuesta 🙂
    • ¿te importaría añadir una explicación de porque tener $uri/ crea un problema?
    • Resuelto mina así
    • porque nginx intentará índice del directorio, y de ser bloqueado por sí mismo. Lanzando el mensaje de error mencionado por OP.
    • Estado buscando toda la mañana, no podía entenderlo. Muchas gracias!
    • Yo tenía el mismo error. Tuve 2 sitios, tanto en un subdominio. La eliminación de los $uri/ hizo el truco. Gracias!
    • Estado tomando el pelo durante 2 días y ahí está la respuesta, gracias a un montón hombre 🙂
    • No entiendo tu explicación. ¿Qué significa decir, «está tratando de índice de directorios, pero bloqueado por sí mismo?» ¿Qué parte es el bloqueo? ¿Qué parte es la indexación?
    • significa, desde la raíz web, pruebe el archivo apuntado por la uri, si eso no existe, intente un directorio en lugar (de ahí el /). Cuando nginx acceder a un directorio, intenta índice y devuelva la lista de archivos en el navegador/cliente, sin embargo por defecto en el directorio indexar, y así se devuelve el error «Nginx error 403: índice de directorio de [carpeta] es prohibido». Indexación de directorios es controlado por el autoindex opción: nginx.org/en/docs/http/ngx_http_autoindex_module.html

  2. 60

    Aquí es la config que funciona:

    server {
        server_name www.mysite2.name;
        return 301 $scheme://mysite2.name$request_uri;
    }
    server {
        #This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf
        server_name mysite2.name;
    
         # The location of our project's public directory.
        root /usr/share/nginx/mysite2/live/public/;
    
         # Point index to the Laravel front controller.
        index           index.php;
    
        location /{
            # URLs to attempt, including pretty ones.
            try_files   $uri $uri//index.php?$query_string;
        }
    
        # Remove trailing slash to please routing system.
        if (!-d $request_filename) {
                rewrite     ^/(.+)/$ /$1 permanent;
        }
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #   # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    
    }
    

    Entonces la única salida en el navegador fue un Laravel error: «¡Vaya, parece que algo salió mal.»

    NO ejecutar chmod -R 777 app/storage (nota). Hacer algo escritura es mala seguridad.

    chmod -R 755 app/storage funciona y es más seguro.

    • NUNCA ejecutar chmod -R 777 para conseguir que las cosas funcionen!
    • Sí, ustedes están a la derecha; que es una mala idea. Voy a actualizar mi respuesta. Las personas también podrían beneficiarse de la stackoverflow.com/a/11996645/470749
    • Usted también puede tener la opción de cambiar las carpetas de grupo para el nginx grupo ie www-data en debian. A continuación, ajuste aún más estrictas permisos en la carpeta como: chmod -R 640 app/storage luego chown -R :www-data app/storage. De esta manera los archivos sólo son visibles para el propietario de la aplicación y el servidor web. Y nadie en absoluto puede ejecutar cualquiera de las almacenado (posiblemente cargado) archivos directamente. Nginx sólo es necesario el permiso de lectura para acceder a los archivos.
    • Nota personal: yo acabo de recibir este Nginx 403 nuevo y nuevo el problema era que yo había accidentalmente dejó public/ en root /usr/share/nginx/mysitename/public/;. Después de la adición de public/ y ejecución de service nginx restart, funcionó.
    • ¿qué acerca de windows?
  3. 54

    Si usted está simplemente tratando de lista el contenido del directorio uso autoindex on; como:

    location /somedir {
           autoindex on;
    }
    

    server {
            listen   80;
            server_name  domain.com www.domain.com;
            access_log  /var/...........................;
            root   /path/to/root;
            location /{
                    index  index.php index.html index.htm;
            }
            location /somedir {
                   autoindex on;
            }
    }
    
    • Yo definitivamente no quiero autoindex on; sería una mala idea para exponer mi directorio de contenidos para el público.
    • Siempre se reduce a «¿Qué quieres hacer?»
    • Es bastante claro que él quiere quitar 403 errores y conseguir que las páginas web para mostrar no mostrar todo el contenido del directorio (esp dado la discusión de más arriba)
  4. 19

    Me encontré con un error similar

    — «403 Forbidden» en la página web

    — «13: Permiso denegado» en el registro de error en /var/log/nginx/error.registro de

    Por debajo de los 3 Pasos que funcionó para mí:

    1: Abre el Terminal, vio algo como la siguiente

    [email protected]:/home/www/
    

    Así, mi nombre de usuario es «usuario1» (desde arriba)

    2: Cambiar de usuario en /etc/nginx/nginx.conf

    # user www-data;
    user user1;
    

    3: vuelve a Cargar la nginx

    sudo nginx -s reload  
    

    Además, me han solicitado permisos de archivo o carpeta (antes de que lo hice por encima de 3 pasos)

    (755 a mi directorio, decir /dir1/) & (644 para los archivos en ese directorio):

    (No estoy seguro, si este paso adicional es realmente necesaria, justo por encima de 3 pasos puede ser suficiente):

    chmod 755 ./dir1/
    chmod 644 ./dir1/*.*
    

    Espero que esta ayuda rápida a alguien. La mejor de las suertes.

    • Gracias bro, yo tenía el mismo problema, y fue a causa de los permisos. I establecer permisos de carpeta y archivo, y ahora se está trabajando muy bien.
    • Me alegra saber que yo soy útil. (Ayudar a los demás, en su dominio, en su tiempo libre, si es posible, sin esperar nada a cambio)
    • Esto funcionó! Gracias!
    • Me alegro de oír eso ayudó.
  5. 8

    De hecho, hay varias cosas que usted necesita para comprobar.
    1. revise su nginx del estado de ejecución

    ps -ef|grep nginx
    
    ps aux|grep nginx|grep -v grep
    

    Aquí tenemos que comprobar que se está ejecutando nginx. por favor, recuerde que el usuario y el grupo

    1. de verificación de la carpeta de estado de acceso

      ls -alt

    2. comparar con el estado de la carpeta con nginx del

    (1) si la carpeta de estado de acceso es un derecho que no

    sudo chmod 755 /your_folder_path
    

    (2) si la carpeta de usuario y de grupo no son las mismas con nginx la ejecución del

    sudo chown your_user_name:your_group_name /your_folder_path
    

    y cambio nginx ejecución del nombre de usuario y de grupo

    nginx -h
    

    para encontrar donde está la configuración de nginx archivo

    sudo vi /your_nginx_configuration_file
    
    //in the file change its user and group
    user your_user_name your_group_name;
    
    //restart your nginx
    sudo nginx -s reload
    

    Porque nginx predeterminado de ejecución del usuario es de nadie y es el grupo nadie. si no hemos aviso de este usuario y de grupo, 403 va a ser introducido.

  6. 7

    Tuve el mismo problema, el archivo de registro me mostró este error:

    2016/03/30 14:35:51 [error] 11915#0: *3 directory index of "path_scripts/viewerjs/" is forbidden, client: IP.IP.IP.IP,     server: domain.com, request: "GET /scripts/viewerjs/HTTP/1.1", host: "domain", referrer: "domain.com/new_project/do_update"
    

    Estoy hosting PHP de la aplicación con codeignitor marco. Cuando quise ver los archivos subidos he recibido un 403 Error.

    El problema era, que el nginx.conf no estaba bien definido. En lugar de

    index index.html index.htm index.php
    

    yo sólo incluye

    index index.php
    

    Tengo una index.php en mi raíz y pensé que eso era suficiente, estaba equivocado 😉
    La sugerencia me dio NginxLibrary

    • Gracias hombre.. yo estaba con el mismo barco.. me pasé horas tratando de averiguar por qué mi wordpress ¿no funciona en absoluto! índice de la directiva es necesaria en el nginx principal config para mi instalación de wordpress para trabajar include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; index index.html index.htm index.php;
    • A mí me funciona!
  7. 6

    Usted puede obtener este porque de Nginx políticas (por ejemplo. «negar»), o usted podría conseguir esto debido a una mala configuración de Nginx, o usted podría conseguir esto porque el sistema de archivos restricciones.

    Usted puede determinar si su el que más tarde (y posiblemente ver la evidencia de un error de configuración mediante el uso de strace (excepto, el OP no tiene acceso a ese):

    # pidof nginx
    11853 11852
    
    # strace -p 11853 -p 11852 -e trace=file -f
    Process 11853 attached - interrupt to quit
    Process 11852 attached - interrupt to quit
    [pid 11853] stat("/var/www/html/kibanaindex.html", 0x7ffe04e93000) = -1 ENOENT (No such file or directory)
    [pid 11853] stat("/var/www/html/kibana", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
    ^CProcess 11853 detached
    Process 11852 detached
    

    Aquí estoy inspeccionando el sistema de ficheros de la actividad realizada por nginx mientras que ejecutó una prueba (yo tuve el mismo error como usted).

    Aquí una parte seleccionada de mi config en el momento

        location /kibana/3/{
            alias /var/www/html/kibana;
            index index.html;
        }
    

    En mi caso, como strace muestra claramente, la unión en el «alias» para el «índice» no era lo que yo esperaba, y me parece necesario entrar en el hábito de siempre añadiendo los nombres de directorio con a /a, así que en mi caso, los siguientes trabajado:

        location /kibana/3/{
            alias /var/www/html/kibana/;
            index index.html;
        }
    
    • Gracias por este. Yo sabía que no tienen un problema de permisos y tu comentario me ayudó a encontrar la solución. He añadido un «/» al final de mi alias y funciona bien.
    • tú eres mi héroe @Cameron Kerr, basado en mi experiencia el problema es nginx elevar 403 para que no encuentra los archivos de alias de directorio de correo.g /home/web/public. Por qué nginx intentar acceder a estos no se encuentran los archivos es porque se me olvidó quitar esta línea index index.html index.htm index.nginx-debian.html; desde thats archivos no está dentro de mi publico dir.
  8. 4

    Que se vea como un problema de permisos.

    Intenta establecer todos los permisions y como hizo en misitio1 a otros sitio.

    Por defecto, los permisos de archivo debe ser 644 y dirs 755.
    Compruebe también si el usuario que ejecuta nginx tiene permiso para leer los archivos y directorios.

  9. 3

    Porque estás usando php-fpm, usted debe asegurarse de que php-fpm usuario es el mismo que nginx usuario.

    De verificación /etc/php-fpm.d/www.conf y configurar php de usuario y de grupo para nginx si no.

    La php-fpm necesidades del usuario con permiso de escritura.

  10. 2

    cambiar el try_files a punto para el index.php camino, en el «Laravel» que usted menciona debe ser algo como esto

    location /{
        try_files $uri $uri//public/index.php$request_uri;
    }
    

    Y en el «codeigniter» proyecto de probarlo como este

    location /{
        try_files $uri $uri//public_web/index.php$request_uri;
    }
    
  11. 2

    Necesita permiso de ejecución en los archivos estáticos directorio. También ellos necesitan ser chown ed por su nginx de usuario y de grupo.

    • Creo que sólo necesita necesita permiso de lectura para el nginx proceso?
  12. 2
    location ~* \.php$ {
        ...
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    
    }
    

    Cambio predeterminado

    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    

    a

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    

    resuelto mi problema.

  13. 1
    6833#0: *1 directory index of "/path/to/your/app" is forbidden, client: 127.0.0.1, server: lol.com, request: "GET /HTTP/1.1", host: "localhost"    
    

    Yo estaba corriendo Ubuntu 15.10 y se encontró con el error 403 Forbidden debido a una simple razón.
    En el nginx.conf(archivo de configuración de nginx), el usuario ‘www-data’.
    Una vez que he cambiado el nombre de usuario a [mi nombre de usuario], que trabajó muy bien asumiendo los permisos necesarios fueron dadas a mi nombre de usuario.
    Los pasos seguidos por mí:

    chmod 755 /path/to/your/app    
    

    Mi archivo de configuración se parece a esto:

    **user [my username]**;#I made the change here.
    worker_processes auto;
    pid /run/nginx.pid;
    events {
    worker_connections 768;
    # multi_accept on;
    }
    
    http {
    
    ##
    # Basic Settings
    ##
    
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;
    
    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;
    
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    ##
    # SSL Settings
    ##
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;
    
    ##
    # Logging Settings
    ##
    
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    
    ##
    # Gzip Settings
    ##
    
    gzip on;
    gzip_disable "msie6";
    
    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    ##
    # Virtual Host Configs
    ##
    
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    
    
    server {
        listen 80;
    
        server_name My_Server;
    
        access_log  /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;
    
        location /{
            proxy_pass         http://127.0.0.1:8000;
            proxy_redirect     off;
    
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
    }
    
  14. 0

    Para mí, el problema era que cualquiera de las rutas que no sean la base de la ruta estaban trabajando, añadiendo esta línea solucionado mi problema:

    index           index.php;
    

    Lo completa:

    server {
    
        server_name example.dev;
        root /var/www/example/public;
        index           index.php;
    
        location /{
            try_files $uri $uri//index.php?$query_string;
        }
    
        location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
    
  15. 0

    He resuelto mi problema, si puedo configurar como sigue:

    location = /login {
        index  login2.html;
    }
    

    Se mostrará el error 403.

    [error] 4212#2916: *2 directory index of "D:\path/to/login/" is forbidden
    

    He intentado autoindex on, pero no funciona.
    Si yo cambio mi configure como este, funciona.

    location = /login/{
        index  login2.html;
    }
    

    Creo que la coincidencia exacta, si se trata de una ruta de acceso debe ser un directorio.

  16. 0

    cuando se desea mantener la opción de directorio,usted puede poner el index.php por delante de $uri como este.

    try_files /index.php $uri $uri/
    
  17. 0

    Para solucionar este problema que me pasé toda la noche. Aquí está mi granito de arena en esta historia,

    Comprobar si está utilizando hhvm como intérprete de php. Entonces es posible que
    que está escuchando en el puerto 9000 por lo que tendrá que modificar su web
    del servidor de configuración.

    Esta es una nota al margen: Si usted está usando mysql, y las conexiones de hhvm a mysql, el llegar a ser imposible, comprobar si se han apparmor instalado. deshabilite.

  18. 0
    location /{
    root  fileLocation;
    index  index.html index.htm;
    expires 0;
    if_modified_since off;}
    

    Aquí he utilizado alias en lugar de root y que me causó el error. Esta configuración funciona bien.

Dejar respuesta

Please enter your comment!
Please enter your name here