Tengo 3 nombres de dominio y estoy tratando de alojar los 3 sitios en un servidor (una gota Digital Ocean) usando Nginx.
mysite1.name mysite2.name mysite3.name
Solo 1 de ellos funciona. Los otros dos resultan en 403 errores (de la misma manera).
En mi registro de errores nginx, veo: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Mi configuración habilitada para sitios 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;
}
}
Los 3 sitios tienen archivos de configuración casi idénticos.
Los archivos de cada sitio están en carpetas como /usr/share/nginx/mysite1.name/someFolder, y luego /usr/share/nginx/mysite1.name/live es un enlace simbólico a eso. (Lo mismo para mysite2 y mysite3.)
He mirado Nginx 403 prohibido para todos los archivos, pero eso no ayudó.
¿Alguna idea sobre lo que podría estar mal?
index.html
index.php
faltan archivos, ¿se aseguró de que existan en esa carpeta?root
en/Users/myUsername/code/app
lugar de/Users/myUsername/code/app/public
.Respuestas:
Si tiene la indexación de directorio desactivada y tiene este problema, probablemente se deba a que try_files que está utilizando tiene una opción de directorio:
Elimínalo y debería funcionar:
Por que sucede esto
TL; DR: Esto se debe a que nginx intentará indexar el directorio y se bloqueará solo. Lanzando el error mencionado por OP.
try_files $uri $uri/
significa que, desde el directorio raíz, intente el archivo señalado por eluri
, si eso no existe, intente con un directorio (de ahí el/
). Cuando nginx accede a un directorio, intenta indexarlo y devolver la lista de archivos dentro del navegador / cliente, sin embargo, de forma predeterminada, la indexación del directorio está deshabilitada, por lo que devuelve el error "Error Nginx 403: índice del directorio de [carpeta] está prohibido".La indexación de directorios está controlada por la
autoindex
opción: https://nginx.org/en/docs/http/ngx_http_autoindex_module.htmlfuente
try_files
no estaba intentandoindex.php
, seguí obteniendo 403 con "el índice de directorio de ... está prohibido"$uri/
crea un problema?try_files $uri $uri/
significa, desde la raíz web, pruebe el archivo señalado por la uri, si eso no existe, intente con un directorio (de ahí el/
). Cuando nginx accede a un directorio, intenta indexarlo y devolver la lista de archivos dentro del navegador / cliente, sin embargo, de forma predeterminada, la indexación del directorio está deshabilitada, por lo que devuelve el error "Error Nginx 403: índice del directorio de [carpeta] está prohibido". La indexación de directorios está controlada por laautoindex
opción: nginx.org/en/docs/http/ngx_http_autoindex_module.htmlAquí está la configuración que funciona:
Entonces, el único resultado en el navegador fue un error de Laravel: "Vaya, parece que algo salió mal".
NO corras
chmod -R 777 app/storage
( nota ). Hacer algo que se pueda escribir en el mundo es una mala seguridad.chmod -R 755 app/storage
Funciona y es más seguro.fuente
www-data
en debian. Luego, establezca permisos aún más estrictos en la carpeta como:chmod -R 640 app/storage
entonceschown -R :www-data app/storage
. De esta forma, los archivos solo son visibles para el propietario de la aplicación y el servidor web. Y nadie puede ejecutar ninguno de los archivos almacenados (posiblemente cargados) directamente. Nginx solo debería necesitar permiso de lectura para acceder a los archivos.public/
encendidoroot /usr/share/nginx/mysitename/public/;
. Después de agregarpublic/
y ejecutarservice nginx restart
, funcionó.Si simplemente está tratando de enumerar el contenido del directorio, use
autoindex on;
como:fuente
autoindex on
; sería una mala idea exponer el contenido de mi directorio al público.Encontré un error similar
--- "403 Prohibido" en la página web
--- "13: Permiso denegado" en el registro de errores en /var/log/nginx/error.log
A continuación 3 pasos me funcionaron:
1: Abra la Terminal, vi algo como abajo
Entonces, mi nombre de usuario es "usuario1" (desde arriba)
2: Usuario cambiado en /etc/nginx/nginx.conf
3: Recargó el nginx
Además, he aplicado permisos de archivo / carpeta (antes de hacer los 3 pasos anteriores)
(755 a mi directorio, por ejemplo / dir1 /) y (644 para archivos en ese directorio):
(No estoy seguro, si este paso adicional es realmente requerido, un poco más de 3 pasos pueden ser suficientes):
Espero que esto ayude a alguien rápido. La mejor de las suertes.
fuente
De hecho, hay varias cosas que debe verificar. 1. verifique el estado de ejecución de su nginx
Aquí tenemos que verificar quién está ejecutando nginx. por favor recuerde el usuario y el grupo
verificar el estado de acceso de la carpeta
ls -alt
comparar con el estado de la carpeta con el de nginx
(1) si el estado de acceso de la carpeta no es correcto
(2) si el usuario y el grupo de la carpeta no son los mismos que los de nginx
y cambiar el nombre de usuario y el grupo en ejecución de nginx
para encontrar dónde está el archivo de configuración nginx
Porque el usuario de nginx default running es nadie y el grupo no es nadie. Si no hemos notado a este usuario y grupo, se introducirá 403.
fuente
Tuve el mismo problema, el archivo de registro me mostró este error:
Estoy alojando una aplicación PHP con framework codeignitor. Cuando quería ver los archivos cargados, recibí un
403 Error
.El problema era que
nginx.conf
no estaba correctamente definido. En vez desolo incluí
Tengo un index.php en mi raíz y pensé que era suficiente, estaba equivocado;) La pista me dio NginxLibrary
fuente
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
index index.html index.htm index.php;
Puede obtener esto debido a la política de Nginx (por ejemplo, "negar"), o puede obtener esto debido a una configuración incorrecta de Nginx, o puede obtener esto debido a restricciones del sistema de archivos.
Puede determinar si es más tarde (y posiblemente ver evidencia de una configuración incorrecta utilizando strace (excepto, el OP no tendrá acceso a eso):
Aquí estoy inspeccionando la actividad del sistema de archivos realizada por nginx mientras ejecutaba una prueba (tuve el mismo error que usted).
Aquí hay una parte seleccionada de mi configuración en el momento
En mi caso, como muestra claramente Strace, la unión de "alias" al "índice" no era lo que esperaba, y parece que necesito acostumbrarme a agregar siempre nombres de directorio con un /, así que en mi caso, funcionó lo siguiente:
fuente
/home/web/public
. Por qué nginx intenta acceder a estos archivos no encontrados es porque olvidé eliminar esta líneaindex index.html index.htm index.nginx-debian.html;
ya que esos archivos no están dentro de mi directorio público.Parece un problema de permisos.
Intente establecer todos los permisos como lo hizo en mysite1 para el sitio de otros.
De manera predeterminada, los permisos de los archivos deben ser 644 y los directorios 755. Compruebe también si el usuario que ejecuta nginx tiene permiso para leer esos archivos y directorios.
fuente
cambia el
try_files
punto para apuntar a laindex.php
ruta, en el "Laravel" que mencionaste debería ser algo como estoY en el proyecto "codeigniter" pruébalo así
fuente
Debido a que está utilizando
php-fpm
, debe asegurarse de que elphp-fpm
usuario sea el mismo que elnginx
usuario.Verifique
/etc/php-fpm.d/www.conf
y establezca php user and group ennginx
si no es así.El
php-fpm
usuario necesita permiso de escritura.fuente
Necesita ejecutar permiso en su directorio de archivos estáticos. También deben ser identificados por su usuario y grupo de nginx.
fuente
Cambiar predeterminado
a
resuelto mi problema
fuente
Estaba ejecutando Ubuntu 15.10 y encontré el error 403 prohibido debido a una simple razón. En el nginx.conf (archivo de configuración para nginx), el usuario era 'www-data'. Una vez que cambié el nombre de usuario a [mi nombre de usuario], funcionó bien asumiendo que se le dieron los permisos necesarios a mi nombre de usuario. Pasos seguidos por mí:
Mi archivo de configuración se ve así:
fuente
Para mí, el problema era que cualquier otra ruta que no fuera la ruta base funcionaba, agregar esta línea solucionó mi problema:
Cosa completa:
fuente
Para solucionar este problema, pasé una noche completa. Aquí están mis dos centavos en esta historia,
Esta es una nota al margen: si está usando mysql, y las conexiones de hhvm a mysql se vuelven imposibles, verifique si tiene instalado un dispositivo . deshabilitarlo
fuente
Resolví mi problema, si configuro como sigue:
Mostrará el error 403.
Lo intenté
autoindex on
, pero no funcionó. Si cambio mi configuración de esta manera, funciona.Creo que la coincidencia exacta, si es una ruta, debería ser un directorio.
fuente
cuando desee mantener la opción de directorio, puede colocar el index.php delante de $ uri de esta manera.
fuente