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
.
- 설정
ProtectHome=false
/etc/systemd/system/multi-user.target.wants/php-fpm.service
systemctl daemon-reload
systemctl restart nginx.service
systemctl restart php-fpm.service
아이러니하게도 나는 처음에 코드를 홈 폴더에 넣는 것이 이상하다는 점을 개인적으로 지적했습니다. 예를 들어 코드 /var/www/html/
를 나 자신에게만 보관하기로 결정한 것이 관련성이 있다는 것이 밝혀졌습니다!