Vagrant 上的 Bolt CMS 不解析 PHP

Bolt CMS on Vagrant does not parse PHP

我的 vagrant box 不解析 PHP-Bolt CMS 的文件。

我从事开发多年,在 Vagrant 工作了大约 5 年,从未遇到过严重问题。

我想尝试一下 Bolt CMS,但是当我将浏览器打开到正确的 url (http://sallys.local:8000) 时,它总是想要下载索引文件(或任何其他文件)而不是解析它。

我的vagrant-box更新到了最新的8.10版本,我用的是Nginx,但是好像没有调用Nginx。我激活了访问日志,但它没有显示任何条目。对于我的其他项目,同样的盒子,它确实如此。

这个的 Nginx 配置是:

server {
    listen 80;
    listen 443 ssl;
    server_name sallys.local;
    root "/home/vagrant/sallys/public";

    index index.html index.htm index.php app.php;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

#    access_log off;
    access_log  /var/log/nginx/sallys.local-ssl-acces.log;
    error_log  /var/log/nginx/sallys.local-ssl-error.log error;

    sendfile off;

    client_max_body_size 100m;

    # DEV
    location ~ ^/(app_dev|config)\.php(/|$) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }

    # PROD
    location ~ ^/app\.php(/|$) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        # Prevents URIs that include the front controller. This will 404:
        # http://domain.tld/app.php/some-path
        # Remove the internal directive to allow URIs like this
        internal;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate     /etc/nginx/ssl/sallys.local.crt;
    ssl_certificate_key /etc/nginx/ssl/sallys.local.key;
}

我的其他项目也有类似的设置,它们都在端口 8000 上响应。并正确解析 PHP 文件。这似乎是一个菜鸟问题。但是我在这里找不到问题。

当我使用内置服务器时,它确实有效。所以一定是Nginx有问题

有人知道吗?

谢谢

蒂姆

看起来这是一个用于 Symfony 2/3 设置的 Nginx 站点配置(Symfony 4 更简单 FWIW),所以它不会工作 "out of the box",可以这么说。

我的猜测是 location / {},因为它引用 app.php,默认情况下,Bolt 安装将使用 index.php 作为 webroot 中的索引文件。

Bolt 的文档中有一个 specific documentation page 涵盖了专门针对 Bolt 安装的 Nginx 配置,我想这对您的用例来说已经足够了。

谢谢你指点我,高文。我尝试了您的解决方案,但没有奏效。我删除了我的宅基地文件中的条目,重新配置了 vagrant,......并且它有效......

生成了一个新配置:

server {
    listen 80;
    listen 443 ssl http2;
    server_name sallys.local;
    root "/home/vagrant/sallys/public";

    index index.html index.htm 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; }

    access_log off;
    error_log  /var/log/nginx/sallys.local-error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate     /etc/nginx/ssl/sallys.local.crt;
    ssl_certificate_key /etc/nginx/ssl/sallys.local.key;
}