나는 3 개의 도메인 이름을 가지고 있으며 Nginx를 사용하여 하나의 서버 (Digital Ocean droplet)에서 3 개의 사이트를 모두 호스팅하려고합니다.
mysite1.name mysite2.name mysite3.name
그들 중 하나만 작동합니다. 다른 두 결과는 같은 방법으로 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;
}
}
3 개 사이트 모두 구성 파일이 거의 동일합니다.
각 사이트의 파일은 /usr/share/nginx/mysite1.name/someFolder와 같은 폴더에 있으며 /usr/share/nginx/mysite1.name/live는 해당 심볼릭 링크입니다. (mysite2 및 mysite3과 동일합니다.)
Nginx 403이 모든 파일에 대해 금지되어있는 것을 보았지만 도움이되지 않았습니다.
무엇이 잘못되었을 지에 대한 아이디어가 있습니까?
답변
디렉토리 색인이 해제되어 있고이 문제점이 발생하는 경우, 사용중인 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 오류 : 디렉토리 폴더의 [폴더] 금지되어 있습니다. “
디렉토리 색인 생성은 https://nginx.org/en/docs/http/ngx_http_autoindex_module.htmlautoindex
옵션으로 제어됩니다 .
답변
작동하는 구성은 다음과 같습니다.
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
작동하고 더 안전합니다.
답변
단순히 디렉토리 내용을 나열하려는 경우 다음 autoindex on;
과 같이 사용하십시오 .
location /somedir {
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;
}
}
답변
/var/log/nginx/error.log의 오류 로그에서 비슷한 오류가 발생했습니다.
— 웹 페이지에서 “403 Forbidden”
— “13 : 권한이 거부되었습니다”
3 단계 미만이 나를 위해 일했습니다.
1 : 터미널을 열고 아래와 같은 것을 보았습니다.
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 -alt
-
폴더 상태를 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이고 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를 주었다.
답변
Nginx 정책 (예 : “거부”)으로 인해이 오류가 발생하거나 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가 명확하게 보여 주듯이 “alias”에서 “index”에 합류하는 것은 내가 예상 한 것이 아니며 항상 /로 디렉토리 이름을 추가하는 습관을들이는 것처럼 보입니다. 내 경우에는 다음이 효과가있었습니다.
location /kibana/3/ {
alias /var/www/html/kibana/;
index index.html;
}