Nginx的403错误:的目录索引是被禁止的

我有3个域名,并试图使用Nginx在一台服务器(数字海洋液滴)上托pipe所有3个站点。

mysite1.name mysite2.name mysite3.name

其中只有一个工作。 另外两个导致403错误(以相同的方式)。

在我的nginx错误日志中,我看到: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden

我的网站启用configuration是:

 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; } } 

所有3个站点都有几乎相同的configuration文件。

每个站点的文件都位于/usr/share/nginx/mysite1.name/someFolder文件夹中,然后/usr/share/nginx/mysite1.name/live是符号链接。 (mysite2和mysite3也一样)

我看过Nginx 403禁止所有文件,但是没有帮助。

任何想法可能是错的?

我在这里find了一个很好的例子: https : //github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf

这configuration为我工作:

 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; } } 

然后,浏览器中唯一的输出是一个Laravel错误:“哎呀,看起来有什么问题。”

一个不良的想法可以解决这个问题将是chmod -R 777 app/storage (我在这里find: https : //stackoverflow.com/a/18624752/470749 )。 但是使世界可写的东西是不安全的。

我认为chmod -R 755 app/storage工作,并更安全。

如果目录索引已closures,并且出现此问题,则可能是因为您正在使用的try_files具有目录选项:

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

删除它,它应该工作:

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

从我可以看到,这是由于nginx将尝试索引目录,并被自己封锁。 抛出OP提到的错误。

如果您只是试图列出目录内容,请使用autoindex on; 喜欢:

 location /somedir { autoindex on; } 

我遇到了类似的错误
—网页中的“403禁止”
—“13:Permission denied”在/var/log/nginx/error.log错误日志中

3步以下为我工作:

1:打开terminal,看到下面的东西

 user1@comp1:/home/www/ 

所以,我的用户名是“user1”(从上面)

2:更改/etc/nginx/nginx.conf中的用户

 # user www-data; user user1; 

3:重装了nginx

 sudo nginx -s reload 

此外,我已经申请文件/文件夹的权限(之前我做了3个步骤)
(755到我的目录中,说/ dir1 /)&(644在该目录下的文件):
(我不确定,如果真的需要这个额外的步骤,只需要3个步骤就足够了):

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

希望这有助于快速的人。 祝你好运。

事实上有几件事情你需要检查。 1.检查你的nginx的运行状态

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

在这里我们需要检查谁在运行nginx。 请记住用户和组

  1. 检查文件夹的访问状态

    ls – 盐

  2. 与nginx的文件夹状态进行比较

(1)文件夹的访问状态不正确

 sudo chmod 755 /your_folder_path 

(2)如果文件夹的用户和组与nginx的运行不相同

 sudo chown your_user_name:your_group_name /your_folder_path 

并更改nginx的运行用户名和组

 nginx -h 

findnginxconfiguration文件的位置

 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 

因为nginx默认运行的用户是nobody,而group是nobody。 如果我们没有注意到这个用户和组,403会被引入。

我有同样的问题,日志文件告诉我这个错误:

 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" 

我正在主持一个codeignitor框架的PHP应用程序。 当我想查看上传的文件,我收到了403 Error

问题是, nginx.conf没有正确定义。 代替

 index index.html index.htm index.php 

我只包括在内

 index index.php 

我有一个index.php在我的根,我认为这就够了,我错了;)提示给了我NginxLibrary

如果您只是试图列出目录内容,请使用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; } } 

您需要执行您的静态文件目录的权限。 他们也需要被你的nginx用户和组播放。

你可能会因为Nginx策略(例如“拒绝”)而得到这个,或者你可能会因为Nginx的configuration错误而得到这个,或者你可能会因为文件系统的限制而得到这个。

您可以确定它是否在后面(可能会看到通过使用strace错误configuration的证据(除OP之外无法访问):

 # 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 

在这里,我正在检查由nginx完成的文件系统活动,同时运行一个testing(我和你有同样的错误)。

这是我当时configuration的一部分

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

就我而言,正如strace很清楚地表明的那样,“别名”与“索引”的连接并不是我所期望的,似乎我需要养成用/来附加目录名的习惯。在我的情况下,以下工作:

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

因为你使用的是php-fpm ,所以你应该确保php-fpm用户和nginx用户是一样的。

检查/etc/php-fpm.d/www.conf ,如果不是,则将php用户和组设置为nginx

php-fpm用户需要写入权限。

它看起来像一些权限问题。

尝试设置所有permisions像你在mysite1到其他网站。

默认情况下,文件权限应该是644和dirs 755.还要检查运行nginx的用户是否有权读取文件和目录。

更改try_files指向index.phppath,在你提到的“Laravel”应该是这样的东西

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

在“codeigniter”项目中试试这个

 location / { try_files $uri $uri/ /public_web/index.php$request_uri; } 
 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" 

我正在运行Ubuntu 15.10,由于一个简单的原因,遇到了403 Forbidden错误。 在nginx.conf(nginx的configuration文件)中,用户是'www-data'。 一旦我将用户名更改为[我的用户名],假设将必要的权限授予了我的用户名,它就可以正常工作。 我之后的步骤是:

 chmod 755 /path/to/your/app 

我的configuration文件如下所示:

 **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; } } } 
 location ~* \.php$ { ... fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } 

更改默认值

 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

解决了我的问题。