Nginx 403은 모든 파일에 대해 금지됩니다.

cent에 PHP-FPM과 함께 nginx가 설치되어 있습니다.OS 5를 사용할 수 있지만, PHP를 사용하든 사용하지 않든 내 파일을 처리하기 위해 애쓰고 있습니다.

Nginx는 www-data:www-data로 실행되고 있으며 디폴트 “Welcome to nginx on EPEL” 사이트(root:root에 의해 소유되며 644개의 권한이 있음)는 정상적으로 로드됩니다.

nginx 컨피규레이션파일에는 /etc/nginx/include-enabled/*.conf에 대한 include 디렉티브가 있고, 설정 파일 example.com.conf가 있기 때문에 다음과 같습니다.

server {
listen 80;
Virtual Host Name
server_name www.example.com example.com;
location / {
root /home/demo/sites/example.com/public_html;
index index.php index.htm index.html;
}
location ~ .php$ {
fastcgi_pass
127.0.0.1:9000;
fastcgi_index
index.php;
fastcgi_param
PATH_INFO $fastcgi_script_name;
fastcgi_param
SCRIPT_FILENAME
/home/demo/sites/example.com/public_html$fastcgi_script_name;
include
fastcgi_params;
} } 

public_html이 ww-data:www-data에 의해 소유되고 있는데도 이 사이트는 어떤 콘텐츠도 제공하지 못합니다.

 [error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com" 

nginx에서 403s를 취득한 유저는 그 밖에도 수많은 투고를 볼 수 있었습니다만, 지금까지의 투고는, Ruby/Passenter와의 보다 복잡한 셋업(과거에는 실제로 성공한 적이 있습니다)이나 업스트림 PHP-FPM이 관련되었을 때만 에러가 발생하고 있기 때문에, 별로 도움이 되지 않는 것 같습니다.

내가 바보 같은 짓을 한 거야?



질문에 대한 답변



자주 간과되는 권한 요건은 사용자가 해당 파일에 액세스하기 위해 파일의 모든 상위 디렉터리에 x개의 권한이 필요하다는 것입니다./, /home, /home/demo 등의 www-data x 액세스 권한을 확인합니다.아마 /home은 770일 것이고 www data는 서브디어에 도달하기 위해 그것을 통과할 수 없을 것입니다.이 경우 chmod o+x /home(또는 요청을 거부하는 dir)을 시도합니다.

편집: 경로의 모든 권한을 쉽게 표시하려면namei -om /path/to/check




아직 보면permission denied상위 폴더의 권한을 확인한 후 SELinux가 액세스를 제한할 수 있습니다.

SELinux가 실행 중인지 확인하려면:

# getenforce 

다음 재부팅까지 SELinux를 비활성화하려면:

# setenforce Permissive 

Nginx 를 재기동해, 문제가 해소되지 않을지를 확인합니다.nginx가 www 디렉토리에 서비스를 제공할 수 있도록 하려면 (이것을 테스트하기 전에 SELinux를 다시 켜야 합니다.)setenforce Enforcing)

# chcon -Rt httpd_sys_content_t /path/to/www 

자세한 내용은 여기를 참조하십시오.




사용자 설정을 추가하여 이 문제를 해결했습니다.

nginx.conf로 설정합니다.

worker_processes 4; user username; 

linux 사용자 이름으로 ‘syslog’를 변경합니다.




이 에러가 발생하여 아래 명령으로 해결했습니다.

restorecon -r /var/www/html 

이 문제는 사용자가 어떤 장소에서 다른 곳으로 무언가를 이동시킬 때 발생합니다.이동 시 원본의 selinux 컨텍스트가 유지되기 때문에 /home 또는 /tmp에서 무언가를 언타링하면 해당 위치와 일치하는 selinux 컨텍스트가 제공됩니다.이제 /var/www/html로 이동합니다.이 콘텍스트는 /tmp 또는 /home에 속해 있으며 httpd는 정책에 의해 이러한 파일에 액세스할 수 없습니다.

mv 파일이 아닌 cp 파일을 사용하면 selinux 컨텍스트는 복사 위치에 따라 할당되며, 복사 위치에 따라 할당되지 않습니다.restorecon을 실행하면 컨텍스트가 기본 설정으로 되돌리고 수정됩니다.




여러 가지 사례를 시도했는데 소유자가 nginx로 설정되었을 때만 가능합니다.chown -R nginx:nginx "/var/www/myfolder") – 정상적으로 동작하기 시작했습니다.