programing

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

sourcetip 2023. 1. 30. 22:48
반응형

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을 실행하면 컨텍스트가 기본 설정으로 되돌리고 수정됩니다.

는 여러 만 시도했다.chown -R nginx:nginx "/var/www/myfolder" - 하기 시작했습니다 - 작동하다. - 작동하다.

SELinux 를 사용하고 있는 경우는, 다음과 같이 입력합니다.

sudo chcon -v -R --type=httpd_sys_content_t /path/to/www/

이렇게 하면 권한 문제가 해결됩니다.

오래된 질문이지만, 저도 같은 문제가 있었습니다.위의 모든 답을 시도해봤지만 소용이 없었어요.하지만 제가 수정한 것은 도메인을 삭제하고 다시 추가하는 것이었습니다.저는 Plesk를 사용하고 있으며, 도메인이 이미 있는 후에 Nginx를 설치했습니다.

처음에 /var/www/backups 로컬 백업을 실행.그래서 나는 파일을 쉽게 다시 복사할 수 있었다.

이상한 문제...

Plesk Onyx 17을 사용했을 때도 같은 문제가 있었습니다.권한 등을 망치는 대신 nginx 사용자를 psacln 그룹에 추가하는 것이 해결책이었습니다.이 그룹에서 다른 도메인 소유자(사용자)는 다음과 같습니다.

usermod -aG psacln nginx

이제 nginx는 .htaccess 또는 콘텐츠를 올바르게 표시하기 위해 필요한 다른 파일에 액세스할 수 있는 권한을 갖게 되었습니다.

한편 Apache가 psaserv 그룹에 속해 있는지 확인하여 정적 콘텐츠를 처리합니다.

usermod -aG psaserv apache

그 후 Plesk에서 Apache와 Nginx를 모두 재시작하는 것을 잊지 마십시오(Ctrl+F5를 사용하여 페이지를 새로고침).

저도 같은 문제에 직면해 있었지만 위의 해결방법은 도움이 되지 않았습니다.

많은 노력 끝에 sestatus가 모든 포트를 차단하고 허용으로 설정하면 모든 문제가 해결된다는 것을 알게 되었습니다.

sudo setenforce 0

이게 나 같은 사람에게 도움이 됐으면 좋겠어.

는, 「」를 해 버려서, .setfacl명령어를 입력합니다.

sudo setfacl -m user:nginx:r /home/foo/bar

했습니다.「 」를 하기 .nginxfoo그러나 그 커스텀 ACL이 nginx의 파일 접근 시도를 방해하고 있었습니다.이치노

sudo setfacl -b /home/foo/bar

그리고 nginx는 파일에 접근할 수 있었다.

를 하고 있는 는, PHP 를 .indexNGINX index.php pphphp 。

index index.php index.html;

자세한 내용은 공식 문서의 색인 지시문을 참조하십시오.

언급URL : https://stackoverflow.com/questions/6795350/nginx-403-forbidden-for-all-files

반응형