РЕШИТЬ
Привет! Я развертываю свое первое приложение Laravel на DigitalOcean, и при попытке доступа к URL я получаю ошибку 500. Позвольте мне начать с того, что это мое первое развертывание Laravel и Nginx, и я впервые настраиваю веб-сервер, поэтому, если вы видите что-то не так, я буду рад обратной связи! Я знаю, что могу использовать Кузницу, но я пытаюсь научиться, так что терпите меня.
Сервер состоит из следующего:
- Ubuntu 18.04
- Nginx 1.14.0
- PHP 7.2.7
- Laravel 5.6
Вот мой конфигурационный файл Nginx (из соображений безопасности я изменил пути SSL на path_to и мой url на sub.domain.com):
server {
listen 80;
root /var/www/sub.domain.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
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;
listen 443 ssl; # managed by Certbot
ssl_certificate /path_to/sub.domain.com/fchain.pem$
ssl_certificate_key /path_to/sub.domain.com/pkey.p$
include /path_to/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /path_to/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.sub.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = sub.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name sub.domain.com www.sub.domain.com;
return 404; # managed by Certbot
}
У меня есть папка хранения с символической ссылкой на public / storage на моем локальном хосте. У меня есть несколько папок в хранилище / app / public, однако, когда я клонировал свой проект на сервер, ни одна из этих папок не была перенесена, и символическая ссылка, по-видимому, отсутствовала, поскольку в общей папке не было папки хранения. Поэтому я запустил php artisan storage:link
и теперь у меня есть public / storage. Я предполагаю, что мне просто нужно воссоздать каталоги в хранилище / app / public.
Когда я пытаюсь получить доступ к своему URL, я получаю ошибку 500, и это ошибка от Nginx:
*111 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught ErrorException: file_put_contents(/var/www/sub.domain.com/storage/framework/views/7315ddb3840f197f8140b159965a4ba4b98e33fe.php): failed to open stream: Permission denied in /var/www/sub.domain.com/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122
После небольшого исследования я нашел статью, в которой говорилось, что мне нужно изменить разрешения для папки хранения, поэтому я выполнил следующие две команды:
sudo chmod -R o+w storage/
sudo chmod -R 775 storage/
К сожалению, это не решило мою проблему. Также упоминалось об изменении разрешений для файла начальной загрузки, но я не уверен, к чему это относится. Я не уверен, является ли это проблемой с моим конфигурационным файлом Nginx (я менял его несколько раз) или это проблема с правами доступа. Я предполагаю, что это проблема разрешения из-за ошибки, которую я получаю.
Я ценю любую помощь! Спасибо!