我有3个域名,并试图使用Nginx在一台服务器上托管所有3个网站(一个数字海洋液滴)。
mysite1.name
mysite2.name
mysite3.name
只有1个有效。另外两个结果是403个错误(以同样的方式)。
在我的nginx错误日志中,我看到:[error] 13108#0: *1目录索引“/usr/share/nginx/mysite2.name/live/”被禁止。
我的站点启用配置是:
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禁止所有文件,但这没有帮助。
有什么问题吗?
下面是工作的配置:
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工作,更安全。
如果你关闭了目录索引,并且遇到了这个问题,这可能是因为你正在使用的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
我有同样的问题,日志文件显示我这个错误:
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错误。
问题是,nginx.conf没有正确定义。而不是
index index.html index.htm index.php
我只包括了
index index.php
我有一个index.php在我的根,我认为这就足够了,我错了;)
提示给了我NginxLibrary