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。 请记住用户和组
-
检查文件夹的访问状态
ls – 盐
-
与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.php
path,在你提到的“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;
解决了我的问题。