J'ai 3 noms de domaine et j'essaie d'héberger les 3 sites sur un serveur (un droplet Digital Ocean) à l'aide de Nginx.
mysite1.namemysite2.namemysite3.name
Un seul d'entre eux fonctionne. Les deux autres résultent en 403 erreurs (de la même manière).
Dans mon journal des erreurs nginx, je vois: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
La configuration compatible avec mes 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 se trouvent dans des dossiers tels que /usr/share/nginx/monsite1.name/someFolder, puis /usr/share/nginx/monsite1.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 pourrait être faux?
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;
}
}
Ensuite, le seul résultat dans le navigateur était une erreur de Laravel: "Oups, on dirait que quelque chose s'est mal passé."
Ne PAS exécuter chmod -R 777 app/storage
( note ). Rendre quelque chose de mondial en écriture est une mauvaise sécurité.
chmod -R 755 app/storage
fonctionne et est plus sécurisé.
Si vous avez désactivé l'indexation de répertoire et que vous rencontrez ce problème, c'est probablement parce que try_files que vous utilisez possède une option de répertoire:
location / {
try_files $uri $uri/ /index.html index.php;
} ^ that is the issue
Supprimez-le et cela devrait fonctionner:
location / {
try_files $uri /index.html index.php;
}
D'après ce que je peux voir, cela est dû au fait que nginx essaiera d'indexer le répertoire et sera bloqué par lui-même. Lancer l'erreur mentionnée par OP.
Si vous essayez simplement de lister le contenu du répertoire, utilisez autoindex on;
comme:
location /somedir {
autoindex on;
}
J'ai rencontré une erreur similaire
--- "403 Interdit" dans la page Web
--- "13: Autorisation refusée" dans le journal des erreurs à /var/log/nginx/error.log
Ci-dessous 3 étapes ont fonctionné pour moi:
user1@comp1:/home/www/
Donc, mon nom d'utilisateur est "utilisateur1" (d'en haut)
# user www-data;
user user1;
Sudo nginx -s reload
De plus, j'ai appliqué les autorisations de fichiers/dossiers (avant les 3 étapes précédentes)
(755 dans mon répertoire, dites/dir1 /) & (644 pour les fichiers de ce répertoire):
(Je ne sais pas si cette étape supplémentaire est vraiment nécessaire, juste au-dessus de 3 étapes pourrait suffire):
chmod 755 ./dir1/
chmod 644 ./dir1/*.*
J'espère que cela aide vite quelqu'un. Bonne chance.
J'ai eu le même problème, le fichier de log m'a montré cette erreur:
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"
J'héberge une application PHP avec un framework de codeignitor. Quand je voulais voir les fichiers téléchargés, j'ai reçu un 403 Error
.
Le problème était que le nginx.conf
n'était pas correctement défini. Au lieu de
index index.html index.htm index.php
j'ai seulement inclus
index index.php
J'ai un index.php dans ma racine et je pensais que c'était suffisant, je me suis trompé;) L'indice m'a donné NginxLibrary
En fait, il y a plusieurs choses à vérifier. 1. vérifier l'état de fonctionnement de votre nginx
ps -ef|grep nginx
ps aux|grep nginx|grep -v grep
Ici, nous devons vérifier qui exécute nginx. s'il vous plaît rappelez-vous l'utilisateur et le groupe
vérifier le statut d'accès du 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
Sudo chmod 755 /your_folder_path
(2) si l'utilisateur et le groupe du dossier ne sont pas les mêmes que ceux en cours d'exécution de nginx
Sudo chown your_user_name:your_group_name /your_folder_path
et changer le nom d'utilisateur et le groupe en cours d'exécution de nginx
nginx -h
trouver où se trouve le fichier de configuration nginx
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
Parce que l'utilisateur de nginx default running n'est ni personne ni groupe. si nous n'avons pas remarqué cet utilisateur et ce groupe, 403 seront introduits.
Si vous essayez simplement de lister le contenu du répertoire, utilisez autoindex on;
comme:
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;
}
}
Vous pouvez l'obtenir à cause de la politique de Nginx (par exemple, "refuser") ou à cause d'une mauvaise configuration de Nginx ou à cause de 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 le PO n'aura pas accès à cela):
# 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
Ici, j'inspecte l'activité du système de fichiers effectuée par nginx pendant l'exécution d'un test (j'avais la même erreur que vous).
Voici une partie sélectionnée de ma config à l'époque
location /kibana/3/ {
alias /var/www/html/kibana;
index index.html;
}
Dans mon cas, comme strace le montre bien, la fusion de "l'alias" avec "l'index" n'était pas ce à quoi je m'attendais et il me semble que je dois prendre l'habitude de toujours ajouter des noms de répertoire avec un /, donc dans mon cas, ce qui suit a fonctionné:
location /kibana/3/ {
alias /var/www/html/kibana/;
index index.html;
}
Cela ressemble à un problème d'autorisations.
Essayez de définir toutes les permissions comme vous l'avez fait dans mysite1 sur le site des autres.
Par défaut, les autorisations de fichier doivent être 644 et les répertoires 755. Vérifiez également si l'utilisateur qui exécute nginx est autorisé à lire ces fichiers et répertoires.
Puisque vous utilisez php-fpm
, vous devez vous assurer que php-fpm
utilisateur est identique à nginx
utilisateur.
Vérifiez /etc/php-fpm.d/www.conf
et définissez l'utilisateur et le groupe php sur nginx
si ce n'est pas le cas.
L'utilisateur php-fpm
a besoin d'une autorisation en écriture.
location ~* \.php$ {
...
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Changer par défaut
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
à
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
résolu mon problème.
changez le try_files
pour qu'il pointe vers le chemin index.php
, dans le "Laravel" que vous avez mentionné, cela devrait ressembler à ceci
location / {
try_files $uri $uri/ /public/index.php$request_uri;
}
Et dans le projet "codeigniter" essayez-le comme ça
location / {
try_files $uri $uri/ /public_web/index.php$request_uri;
}
Vous devez disposer d'une autorisation d'exécution sur votre répertoire de fichiers statiques. Ils doivent également être choqués par votre utilisateur et votre groupe nginx.
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"
J'utilisais Ubuntu 15.10 et j'ai rencontré l'erreur 403 Forbidden pour une raison simple… .. Dans le fichier nginx.conf (fichier de configuration pour nginx), l'utilisateur s'appelait «www-data» . [mon nom d'utilisateur], cela a bien fonctionné en supposant que les autorisations nécessaires ont été attribuées à mon nom d'utilisateur . Étapes suivies par moi:
chmod 755 /path/to/your/app
Mon fichier de configuration ressemble à ceci:
**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;
}
}
}
Pour résoudre ce problème, j'ai passé une nuit complète. Voici mes deux cents sur cette histoire,
Vérifiez si vous utilisez hhvm comme interpréteur php. Ensuite, il est possible qu'il écoute sur le port 9000, vous devrez donc modifier la configuration de votre serveur Web.
Ceci est une note complémentaire: Si vous utilisez mysql et que les connexions de hhvm à mysql deviennent impossibles, vérifiez si vous avez installé apparmor. le désactiver.
J'ai résolu mon problème, si je configure comme suit:
location = /login {
index login2.html;
}
Cela montrera l'erreur 403.
[error] 4212#2916: *2 directory index of "D:\path/to/login/" is forbidden
J'ai essayé autoindex on
, mais je ne travaille pas. Si je change ma configuration comme ça, ça marche.
location = /login/ {
index login2.html;
}
Je pense que la correspondance exacte, si c'est un chemin devrait être un répertoire.
lorsque vous souhaitez conserver l'option de répertoire, vous pouvez placer l'index.php devant $ uri comme ceci.
try_files /index.php $uri $uri/
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:
index index.php;
Plein chose:
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;
}
}
location / {
root fileLocation;
index index.html index.htm;
expires 0;
if_modified_since off;}
Ici, j'ai utilisé alias
au lieu de root
et c'est ce qui m'a causé l'erreur. Cette configuration fonctionne bien.