Laravel 5.7 Ошибка Nginx 500 при доступе к страницам, возможные проблемы с разрешением хранилища? - PullRequest
0 голосов
/ 31 августа 2018

РЕШИТЬ Привет! Я развертываю свое первое приложение 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 (я менял его несколько раз) или это проблема с правами доступа. Я предполагаю, что это проблема разрешения из-за ошибки, которую я получаю.

Я ценю любую помощь! Спасибо!

1 Ответ

0 голосов
/ 31 августа 2018

Я выполнил следующие команды и проверил после каждой, наконец, она работала после последней команды. Я не знаю, было ли это сочетание некоторых, всех или только последней сработавшей команды.

sudo chmod -R o+w storage/
sudo chmod -R 775 storage/
sudo chmod -R o+w bootstrap/cache
sudo chmod -R 775 bootstrap/cache
chown -Rf www-data.www-data /var/www/sub.domain.com
php artisan cache:clear
composer dump-autoload
sudo chown -R www-data:www-data storage
...