J'ai 3 noms de domaine et j'essaie d'héberger les 3 sites sur un serveur (une gouttelette Digital Ocean) en utilisant Nginx.
mysite1.name mysite2.name mysite3.name
Seul 1 d'entre eux fonctionne. Les deux autres entraînent 403 erreurs (de la même manière).
Dans mon erreur nginx journal, je vois: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Ma configuration activée pour les sites est:
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;
}
}
Les 3 sites ont des fichiers de configuration presque identiques.
Les fichiers de chaque site sont dans des dossiers tels que /usr/share/nginx/mysite1.name/someFolder, et ensuite /usr/share/nginx/mysite1.name/live est un lien symbolique vers cela. (Idem pour mysite2 et mysite3.)
J'ai regardé Nginx 403 interdit pour tous les fichiers mais cela n'a pas aidé.
Des idées sur ce qui ne va pas?
index.html
index.php
fichiers manquants, vous êtes-vous assuré qu'ils existent dans ce dossier?root
de recevoir à nouveau cette erreur, mais cette fois, le problème était que j'avais accidentellement défini le comme étant/Users/myUsername/code/app
au lieu de/Users/myUsername/code/app/public
.Réponses:
Si vous avez désactivé l'indexation des répertoires et que vous rencontrez ce problème, c'est probablement parce que les fichiers try_files que vous utilisez ont une option de répertoire:
Retirez-le et cela devrait fonctionner:
Pourquoi cela arrive
TL; DR: Ceci est dû au fait que nginx essaiera d'indexer le répertoire et sera bloqué par lui-même. Lancement de l'erreur mentionnée par OP.
try_files $uri $uri/
signifie, à partir du répertoire racine, essayez le fichier pointé par leuri
, si cela n'existe pas, essayez un répertoire à la place (d'où le/
). Lorsque nginx accède à un répertoire, il essaie de l'indexer et de renvoyer la liste des fichiers qu'il contient au navigateur / client, mais par défaut, l'indexation des répertoires est désactivée et renvoie donc l'erreur "Erreur Nginx 403: index de répertoire de [dossier] est interdit".L'indexation des répertoires est contrôlée par l'
autoindex
option: https://nginx.org/en/docs/http/ngx_http_autoindex_module.htmlla source
try_files
n'essayais pasindex.php
, j'ai juste continué à obtenir 403 avec "l'index du répertoire de ... est interdit"$uri/
crée un problème?try_files $uri $uri/
signifie, à partir de la racine Web, essayez le fichier pointé par l'URI, si cela n'existe pas, essayez un répertoire à la place (d'où le/
). Lorsque nginx accède à un répertoire, il essaie de l'indexer et de renvoyer la liste des fichiers qu'il contient au navigateur / client, mais par défaut, l'indexation des répertoires est désactivée et renvoie donc l'erreur "Erreur Nginx 403: index de répertoire de [dossier] est interdit". L'indexation des répertoires est contrôlée par l'autoindex
option: nginx.org/en/docs/http/ngx_http_autoindex_module.htmlVoici la config qui fonctionne:
Ensuite, la seule sortie dans le navigateur était une erreur Laravel: "Oups, il semble que quelque chose s'est mal passé."
NE PAS courir
chmod -R 777 app/storage
( note ). Rendre quelque chose d'inscriptible dans le monde entier est une mauvaise sécurité.chmod -R 755 app/storage
fonctionne et est plus sûr.la source
www-data
à- dire sur Debian. Ensuite, définissez des autorisations encore plus strictes sur le dossier comme:chmod -R 640 app/storage
alorschown -R :www-data app/storage
. De cette façon, les fichiers ne sont visibles que par le propriétaire de l'application et le serveur Web. Et personne du tout ne peut exécuter directement les fichiers stockés (éventuellement téléchargés). Nginx ne devrait avoir besoin que d'une autorisation de lecture pour accéder aux fichiers.public/
deroot /usr/share/nginx/mysitename/public/;
. Après avoir ajoutépublic/
et exécutéservice nginx restart
, cela a fonctionné.Si vous essayez simplement de lister le contenu du répertoire, utilisez
autoindex on;
comme:la source
autoindex on
; ce serait une mauvaise idée d'exposer le contenu de mon répertoire au public.J'ai rencontré une erreur similaire
--- "403 Forbidden" dans la page Web
--- "13: Permission refusée" dans le journal des erreurs à /var/log/nginx/error.log
Ci-dessous 3 étapes ont fonctionné pour moi:
1: Terminal ouvert, vu quelque chose comme ci-dessous
Donc, mon nom d'utilisateur est "user1" (ci-dessus)
2: utilisateur changé dans /etc/nginx/nginx.conf
3: rechargement du nginx
De plus, j'ai appliqué les autorisations de fichier / dossier (avant de faire ci-dessus 3 étapes)
(755 dans mon répertoire, disons / dir1 /) & (644 pour les fichiers sous ce répertoire):
(Je ne suis pas sûr, si cette étape supplémentaire est vraiment requis, un peu plus de 3 étapes pourraient suffire):
J'espère que cela aide quelqu'un rapide. Bonne chance.
la source
En fait, vous devez vérifier plusieurs choses. 1. vérifier l'état de fonctionnement de votre nginx
Ici, nous devons vérifier qui exécute nginx. souvenez-vous de l'utilisateur et du groupe
vérifier l'état d'accès au dossier
ls -alt
comparer avec le statut du dossier avec celui de nginx
(1) si l'état d'accès au dossier n'est pas correct
(2) si l'utilisateur et le groupe du dossier ne sont pas les mêmes que ceux de nginx en cours d'exécution
et changer le nom d'utilisateur et le groupe de nginx
pour trouver où se trouve le fichier de configuration nginx
Parce que l'utilisateur de l'exécution par défaut de nginx n'est personne et que le groupe n'est personne. si nous n'avons pas remarqué cet utilisateur et ce groupe, 403 seront introduits.
la source
J'ai eu le même problème, le fichier journal m'a montré cette erreur:
J'héberge une application PHP avec le framework codeignitor. Lorsque je voulais voir les fichiers téléchargés, j'ai reçu un fichier
403 Error
.Le problème était que le
nginx.conf
n'était pas correctement défini. Au lieu dej'ai seulement inclus
J'ai un index.php dans ma racine et j'ai pensé que c'était suffisant, j'avais tort;) L'indice m'a donné NginxLibrary
la source
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
index index.html index.htm index.php;
Vous pourriez l'obtenir à cause de la politique de Nginx (par exemple "refuser"), ou vous pourriez l'obtenir à cause d'une mauvaise configuration de Nginx, ou vous pourriez l'obtenir à cause des restrictions du système de fichiers.
Vous pouvez déterminer si c'est le plus tard (et éventuellement voir la preuve d'une mauvaise configuration en utilisant strace (sauf que l'OP n'y aura pas accès):
Ici, j'inspecte l'activité du système de fichiers effectuée par nginx lors d'un test (j'ai eu la même erreur que vous).
Voici une partie sélectionnée de ma configuration à l'époque
Dans mon cas, comme le montre assez clairement strace, la jonction de dans le "alias" à "l'index" n'était pas ce à quoi je m'attendais, et il semble que je doive prendre l'habitude de toujours ajouter des noms de répertoire avec un /, donc dans mon cas, ce qui suit a fonctionné:
la source
/home/web/public
. Pourquoi nginx essaie d'accéder à ces fichiers non trouvés, c'est parce que j'ai oublié de supprimer cette ligneindex index.html index.htm index.nginx-debian.html;
car ces fichiers ne se trouvent pas dans mon répertoire public.Cela ressemble à un problème d'autorisations.
Essayez de définir toutes les autorisations comme vous l'avez fait dans mysite1 sur les autres sites.
Par défaut, les autorisations de fichier doivent être 644 et dirs 755. Vérifiez également si l'utilisateur qui exécute nginx a l'autorisation de lire ces fichiers et ces répertoires.
la source
changez le
try_files
pour pointer vers leindex.php
chemin, dans le "Laravel" que vous avez mentionné, cela devrait être quelque chose comme çaEt dans le projet "codeigniter", essayez-le comme ceci
la source
Parce que vous utilisez
php-fpm
, vous devez vous assurer que l'php-fpm
utilisateur est le même que l'nginx
utilisateur.Vérifiez
/etc/php-fpm.d/www.conf
et définissez l'utilisateur et le groupe php surnginx
si ce n'est pas le cas.L'
php-fpm
utilisateur a besoin d'une autorisation d'écriture.la source
Vous avez besoin d'une autorisation d'exécution sur votre répertoire de fichiers statiques. Ils doivent également être chown'ed par votre utilisateur et groupe nginx.
la source
Changer la valeur par défaut
à
résolu mon problème.
la source
J'utilisais Ubuntu 15.10 et j'ai rencontré l'erreur 403 Forbidden pour une raison simple. Dans le nginx.conf (fichier de configuration pour nginx), l'utilisateur était «www-data». Une fois que j'ai changé le nom d'utilisateur en [mon nom d'utilisateur], cela a bien fonctionné en supposant que les autorisations nécessaires étaient données à mon nom d'utilisateur. Étapes suivies par moi:
Mon fichier de configuration ressemble à ceci:
la source
Pour moi, le problème était que toutes les routes autres que la route de base fonctionnaient, l'ajout de cette ligne a résolu mon problème:
Chose complète:
la source
Pour résoudre ce problème, j'ai passé une nuit complète. Voici mes deux cents sur cette histoire,
Ceci est une note secondaire: si vous utilisez mysql et que les connexions de hhvm à mysql deviennent impossibles, vérifiez si vous avez installé apparmor . le désactiver.
la source
J'ai résolu mon problème, si je configure comme suit:
Cela montrera l'erreur 403.
J'ai essayé
autoindex on
, mais je ne travaille pas. Si je change ma configuration comme ça, cela fonctionne.Je pense que la correspondance exacte, si c'est un chemin devrait être un répertoire.
la source
lorsque vous souhaitez conserver l'option de répertoire, vous pouvez placer l'index.php avant $ uri comme ceci.
la source