Nginx e PHP em um subdiretório

4

Eu tenho um aplicativo por trás do nginx. Mas eu preciso de um caminho específico neste redirecionamento de aplicativo para um Blog Wordpress

Exemplo:

example.com/ ------- > Redirecionar para meu aplicativo

example.com/whatever/ ------- > Redirecionar para meu aplicativo também

example.com/blog/ ------- > Redirecionar para o meu blog Wordpress

Então, eu adiciono um local que corresponde a este sub-caminho

server {
        listen 80 default_server;

        index index.php;

        server_name _;

        location ^~ /blog {
                root /path/to/my/blog;
                index index.php index.html;

                location ^~ /blog/(.*\.php)$ {
                   fastcgi_pass   127.0.0.1:9000;
                   fastcgi_index index.php;
                   fastcgi_param  SCRIPT_FILENAME  /path/to/my/blog/$fastcgi_script_name;
                   include fastcgi_params;
                }
        }

        location ~* /(.*) {
                #here the conf for the rest of the website
        }
}

E quando eu tento acessar a página, eu tenho um 404 com esse erro nos logs:

2016/05/22 15:27:24 [error] 21759#0: *1 open() "/path/to/my/blog/blog/index.php" failed (2: No such file or directory), client: XX.XX.XX.XX, server: _, request: "GET /blog/index.php HTTP/1.1", host: "example.com"

Com / blog é duplicado.

Como posso consertar isso?

EDITAR:

Agora eu tenho isso (graças a Richard Smith):

location ^~ /blog {
                root /path/to/my/;
                index index.php;
                try_files $uri $uri/ /blog/index.php;

                location ~ \.php$ {
                        try_files $uri =404;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_pass   127.0.0.1:9000;
                }
        }

Mas agora, eu tenho o evento index.php se eu tentar ge outro arquivo (toto.html por exemplo)

Se eu substituir

            try_files $uri $uri/ /blog/index.php;

com

            try_files $uri $uri/;

Eu tenho um 404 com

2016/05/22 20:57:21 [error] 22621#0: *1 "/path/to/my/blog/toto.html/index.php" is not found (20: Not a directory), client: 84.98.248.33, server: _, request: "GET /blog/toto.html/ HTTP/1.1", host: "example.com"

nos logs

EDIT 2:

O arquivo existe e atualmente, e eu dou a ele direitos 777 (vou removê-los mais tarde antes de ir para a produção):

drwxrwxrwx  2 user group 4096 May 22 20:36 .
drwxr-xr-x 11 user group   4096 May 23 06:20 ..
-rwxrwxrwx  1 user group  126 May 22 13:30 index.php
-rwxrwxrwx  1 user group  102 May 22 10:25 old.index.html
-rwxrwxrwx  1 user group   12 May 22 12:24 toto.html

Obrigado pela sua paciência!

    
por Varkal 22.05.2016 / 17:34

1 resposta

4

Como /blog é o primeiro componente do URI, você precisa removê-lo do root . Use root /path/to/my quando dentro de location ^~ /blog .

Veja este documento para detalhes.

Além disso, o seu .php location é uma sintaxe inválida. Você pode usar algo assim:

location ^~ /blog {
    root /path/to/my;
    index index.php;
    try_files $uri $uri/ /blog/index.php;

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass   127.0.0.1:9000;
    }
}

Veja este documento para detalhes.

Por fim, o restante do site pode usar locais normais, como location / , pois o modificador ^~ no seu location ^~ /blog fornece precedência para qualquer URI que comece com /blog . Veja minha segunda referência para detalhes.

    
por 22.05.2016 / 18:22