Nginx 403错误:[folder]的目录索引被禁止

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

< p > mysite1.name mysite2.name mysite3.name < / p >

只有1个有效。另外两个结果是403个错误(以同样的方式)。

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

我的站点启用配置是:

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

这三个站点都有几乎相同的配置文件。

每个站点的文件都在/usr/share/nginx/mysite1.name/someFolder这样的文件夹中,然后/usr/share/nginx/mysite1.name/live是指向该文件夹的符号链接。(mysite2和mysite3也是如此。)

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

有什么问题吗?

670498 次浏览

看起来像是权限问题。

尝试像在mysite1中那样设置其他站点的所有权限。

默认文件权限应该是644和dirs 755。 还要检查运行nginx的用户是否有权限读取这些文件和dirs

改变try_files指向index.php路径,在你提到的“Laravel”中,它应该是这样的

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

在“codeigniter”项目中试试这样做

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

下面是工作的配置:

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 (请注意)。让某些东西在全世界都可写是很糟糕的安全性。

chmod -R 755 app/storage工作,更安全。

您需要对静态文件目录执行权限。此外,它们需要被你的nginx用户和组咀嚼。

如果你只是想列出目录内容,使用autoindex on;:

location /somedir {
autoindex on;
}

server {
listen   80;
server_name  example.com www.example.com;
access_log  /var/...........................;
root   /path/to/root;
location / {
index  index.php index.html index.htm;
}
location /somedir {
autoindex on;
}
}
事实上,有几件事你需要检查。 1. 检查nginx的运行状态

ps -ef|grep nginx


ps aux|grep nginx|grep -v grep

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

  1. 检查文件夹访问状态

    ls alt < / p >

  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

查找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

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

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;

解决了我的问题。

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

.log

以下3个步骤对我很有效:

1:开放式终端,看到如下内容

user1@comp1:/home/www/

因此,我的用户名是“user1”(从上面)

2:修改/etc/nginx/nginx.conf中的user

# user www-data;
user user1;

3:重新加载nginx

sudo nginx -s reload

此外,我已经应用了文件/文件夹权限(在我做以上3步之前)
(755到我的目录,输入/dir1/) &(644对于该目录下的文件):
(我不确定,如果这额外的步骤是真的需要,只是以上3个步骤可能就足够了):

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

希望这能帮助到一些人。祝你好运。

你可能会得到这个,因为Nginx政策(例如。"deny"),或者你可能得到这个是因为Nginx错误配置,或者你可能得到这个是因为文件系统限制。

你可以确定是否是后者(并可能通过使用strace看到错误配置的证据(除非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在运行测试时所做的文件系统活动(我有和你一样的错误)。

这是我当时配置的一部分

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

在我的情况下,正如strace非常清楚地显示,在“别名”到“索引”的连接不是我所期望的,似乎我需要养成总是用/追加目录名的习惯,因此在我的情况下,以下工作:

    location /kibana/3/ {
alias /var/www/html/kibana/;
index index.html;
}
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的配置文件)中,用户是'www-data'。 一旦我将用户名更改为[我的用户名],假设必要的权限被赋予我的用户名,它就能正常工作。 我遵循的步骤:

chmod 755 /path/to/your/app

我的配置文件是这样的:

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

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

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

我有一个索引。php在我的根,我认为这就足够了,我错了;) 提示给了我NginxLibrary

如果你关闭了目录索引,并且遇到了这个问题,这可能是因为你正在使用的try_files有一个目录选项:

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

去掉它,它应该工作:

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

为什么会这样

TL;DR:这是因为nginx将尝试索引目录,并被自己阻塞。抛出OP提到的错误。

try_files $uri $uri/意味着,从根目录尝试uri指向的文件,如果不存在,则尝试另一个目录(因此是/)。当nginx访问一个目录时,它会尝试索引它,并将其中的文件列表返回给浏览器/客户端,然而默认情况下目录索引是禁用的,因此它返回错误“nginx 403错误:目录索引的[文件夹]是禁止的”。

目录索引由autoindex选项控制:https://nginx.org/en/docs/http/ngx_http_autoindex_module.html

因为你正在使用php-fpm,你应该确保php-fpm用户与nginx用户相同。

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

php-fpm用户需要写权限。

对我来说,问题是除了基本路线以外的任何路线都可以工作,添加这条线解决了我的问题:

index           index.php;

全部的事情:

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 = /login {
index  login2.html;
}

它会显示403错误。

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

我已经尝试了autoindex on,但不工作。 如果我改变我的配置像这样,它工作

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

我认为精确匹配,如果是路径,就应该是目录。

当你想保留目录选项时,你可以像这样把index.php放在$uri前面。

try_files /index.php $uri $uri/

在我的情况下,我使用hhvm监听端口9000和nginx配置中的fastcgi_pass行是不正确的。

此外,如果你正在使用mysql,从hhvm到数据库的连接不工作,检查你是否安装了apparmor对

  1. 检查index.html或index.php是否在目录中丢失

  2. 查看/var/log/nginx目录下的错误日志文件,然后打开

    vim error.log

在我的例子中,它与CentOS 7中的SELinux有关:

使用如下命令查看是否已启用。

cat /etc/selinux/config

示例输出:

SELINUX=enforcing
SELINUXTYPE=targeted

永久禁用SELinux 编辑/etc/selinux/config文件,执行:

sudo vi /etc/selinux/config

将SELINUX设置为disabled:

SELINUX=disabled

在vi/vim中保存并关闭文件。重新启动Linux系统:

sudo reboot

在我的例子中,我没有运行这个命令

sudo apt-get install php7.4-fpm

以下是我如何在我的Kali机器上修复它:

  • 定位目录:

    cd /etc/nginx/sites-enabled/

  • 编辑默认配置文件:

    sudo nano default

  • location块中添加以下行:

    location /yourdirectory {
    autoindex on;
    autoindex_exact_size off;
    }
    
  • 注意,我已经在特定的目录中激活了自动索引 /yourdirectory。否则,它将为您计算机上的所有文件夹启用,您不想要它

  • 现在重新启动你的服务器,它现在应该工作了:

    sudo service nginx restart