Flarum em um subdiretório junto com o Laravel (Nginx)

2

Eu tenho tentado colocar o Flarum em um subdiretório com o Laravel no diretório raiz. Eu tentei uma série de coisas e a única resposta que recebo do servidor é um 404 ou o laravel index.php baixado (quando eu visito / forum).

Pelo que me lembro, tentei:

  • Ter um indivíduo location ~\.php para cada subdiretório.
  • Colocando o local do php no local do subdiretório.
  • Tentando usar raiz e alias no local.

Minha configuração é a seguinte:

  • Arquivos do Laravel em / var / www / laravel / public /
  • Arquivos Flarum em / var / www / forum /
  • PHP5-FPM em /var/run/php5-fpm.sock

O Laravel está trabalhando em todo o processo, mas não consigo fazer o flarum funcionar.

server {
    listen       80;
    server_name  website.web
    return         301 https://website.web$request_uri;
}

server {
    listen         443 ssl;
    server_name    website.web
    access_log /var/www/logs/access.log;
    error_log /var/www/logs/error.log warn;
    ssl_certificate /var/www/ssl/website.chained.crt;
    ssl_certificate_key /var/www/ssl/website.key;
    root /var/www/laravel/public/;
    index index.php;

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

    location /forum/ {
            root /var/www/;
            try_files $uri $uri/ /index.php?$query_string;
    }

    location /forum/admin/ {
            root /var/www/;
            try_files $uri $uri/ /admin.php?$query_string;
    }

    location /forum/api/ {
            root /var/www/;
            try_files $uri $uri/ /api.php?$query_string;
    }

    location /flarum {
        deny all;
        return 404;
    }

    location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_split_path_info ^(.+.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME     $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}

Se a configuração não funcionar por algum motivo, aqui está um link pastebin com ela

    
por Axel Nilsson 16.02.2016 / 20:58

1 resposta

2

Você tem dois aplicativos com raízes de documentos diferentes que precisam de suporte ao PHP. Se você mantiver a configuração do Laravel inalterada, poderá usar blocos de localização aninhados para implementar a configuração do Flarum.

Algo parecido com isso pode funcionar:

location ^~ /forum {
    root /var/www;
    try_files $uri $uri/ /forum/index.php?$query_string;

    location ~ \.php$ {
        try_files $uri /forum/index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

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

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

Observe o seguinte:

location ^~ /forum é um local de prefixo que tem precedência sobre o nível superior location ~ \.php$ , o que permite que o local aninhado processe scripts PHP para o Flarum.

O /forum/index.php é um URI e o /forum/ é necessário para selecionar o arquivo index.php correto. Você não precisa de um URI padrão e =404 na diretiva try_files (um ou outro por favor). Eu removi fastcgi linhas que não fazem nada. E include fastcgi_params antes de outras diretivas fastcgi_param para evitar efeitos colaterais não intencionais.

Esta é uma solução genérica e eu não testei com Laravel ou Flarum.

Veja a documentação aqui para saber mais.

    
por 16.02.2016 / 22:02

Tags