새로 설치 시 Nginx가 404를 반환함

새로 설치 시 Nginx가 404를 반환함

Linux Mint 20.3에서는 웹사이트의 로컬 개발을 위한 작업 설정이 있었습니다.

server {
    listen 80;
    listen [::]:80;

    server_name cbp.local;

    root /home/gacek/html/cbp/public;

    index           index.php;

    location / {
        try_files   $uri $uri/ /index.php?$query_string;
    }

    if (!-d $request_filename) {
            rewrite     ^/(.+)/$ /$1 permanent;
    }

    location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        }
}

/home/gacek/html/cbp이것은 디렉터리 에 위치한 Laravel 애플리케이션이며 index.php진입점은 하위 폴더에 있습니다 /public.

Linux Mint 21.1을 새로 설치한 후 동일한 nginx 구성으로 인해 404를 찾을 수 없습니다.

404 찾을 수 없음 nginx/1.18.0(우분투)

나는 시도했다:

  • 디렉토리 소유권 조정: sudo chown -R gacek:www-data /home/gacek/html/cbp

  • 권한 확대:sudo chmod -R 776 /home/gacek/html/cbp

  • 심볼릭 링크 생성 및 nginx 구성 파일 조정sudo ln -s /home/gacek/html/cbp /var/www/

다음 구성이 완벽하게 작동하기 때문에 마지막으로 시도한 것입니다.

server {
    listen 80;
    listen [::]:80;

    server_name example.local;

    root /var/www/test;
    index index.php;

    location / {
        try_files   $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}

이 nginx 사이트 구성이 작동하지 않는 이유는 무엇입니까? 둘 사이의 차이점은 무엇입니까?

편집하다

나는 다음을 사용하여 구성을 변경했습니다.Laravel 문서의 가이드:

server {
    listen 80;
    listen [::]:80;
    server_name cbp.local;
    root /home/gacek/html/cbp/public;
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME /home/gacek/html/cbp/public$fastcgi_script_name;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

이 변경 후 페이지에 표시되는 오류는 다음과 같이 변경되었습니다.

File not found.

이제 nginx의 오류 로그에 다음과 같은 오류가 표시됩니다.

여기에 이미지 설명을 입력하세요

답변1

내 생각에는 당신이 거의 거기에 있는 것 같습니다. 콘텐츠를 호스팅하기 위해 특정 디렉토리를 설정하고 디렉토리에 적절한 권한을 적용했지만 nginx가 어떤 사용자로 실행되고 있는지, 해당 사용자가 www-data호스트 그룹 의 구성원입니다 .

nginx가 실행 중인 사용자를 그룹에 추가 www-data하고 해당 그룹에 적절한 권한이 있는지 확인하는 것이 좋습니다.

저는 실제로 특별한 이유가 없는 한 이전처럼 콘텐츠 디렉터리를 기본적으로 쓰기 가능으로 설정하지 말 것을 권장합니다. 그렇게 해야 할 특별한 이유가 있는 경우 아마도 전용 하위 디렉터리를 만들 것입니다. 루트는 쓸 수 없지만 쓸 수 있습니다.

요약하면 아마도 다음과 같습니다.

usermod -aG nginx www-data
chmod -R 755 /home/gacek/html/cbp

위의 내용을 디렉터리/하위 디렉터리에만 적용하고 chmod 644모든 파일에 적용하면 디렉터리 권한을 강화하기 위해 실제로 한 단계 더 나아갈 수 있습니다.

편집하다:귀하를 대신하여 온라인으로 검색한 결과다른 곳에서ProtectHome=true, 이는 잠재적인 문제에 대한 좋은 후보인 것 같습니다. 에 대한 systemd init 파일에 있을 수 있습니다 php-fpm.service.

  1. 설정ProtectHome=false/etc/systemd/system/multi-user.target.wants/php-fpm.service
  2. systemctl daemon-reload
  3. systemctl restart nginx.service
  4. systemctl restart php-fpm.service

아이러니하게도 나는 처음에 코드를 홈 폴더에 넣는 것이 이상하다는 점을 개인적으로 지적했습니다. 예를 들어 코드 /var/www/html/를 나 자신에게만 보관하기로 결정한 것이 관련성이 있다는 것이 밝혀졌습니다!

관련 정보