nginx php5-fpm path_info URLs e localização raiz

1

Olá a todos os nginx & gurus do php

Estou instalando o dotclear (um software de blogging escrito em PHP) no meu debian, e tenho dificuldade em configurar nginx, php5-fpm e php para que:

  1. Eu posso usar reescrita de url de PATH_INFO já que estou seguindo o conselho de Tim Berneer de que urls não devem expor a tecnologia que você usa agora link
  2. arquivos satic não são não analisados pelo PHP, pois é terrivelmente inseguro deixar example.org/uploads/image.jpg/index.php ser enviado para o PHP
  3. tem um local de raiz que apenas funciona example.com deve ser reescrito para algo como example.com/index.php?start

Parece que até agora, eu tenho que escolher 2, é por isso que estou pedindo ajuda aqui.

Então aqui está o meu atual /etc/nginx/nginx.conf

%pr_e%

server {
   server_name articles.eloge-de-la-folie.fr;
   root /srv/data1/articles.eloge-de-la-folie.fr  ;

# URLs bonitas em dotclear    # ativar URLs de PATH_INFO em /admin/blog_pref.php    localização @pathinfo {         reescreva ^ /index.php$uri?$args last;    }    location = / {         reescreva ^ /index.php?start por último;    }    localização ~ ^ (. +. php) (/.*)? $ {             inclua fastcgi_params_pathinfo;     }

}

Eu coloquei tudo relacionado ao fastcgi em um arquivo /etc/fastcgi_params_pathinfo config separado

index index.php?start ;
location / {
         try_files $uri $uri/ @pathinfo ;
         #try_files $uri $uri/ /index.php$uri?$args;
}

Também em /etc/php5/fpm/pool.d/www.conf , certifiquei-me de remover o comentário desta

fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;

#fastcgi_param  SCRIPT_FILENAME     $request_filename;
fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   PATH_INFO               $fastcgi_path_info;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
fastcgi_param   SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;

fastcgi_param   HTTPS           $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;


# this is what I changed
fastcgi_pass    127.0.0.1:9000;
fastcgi_index   index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

O que acontece atualmente? - example.com/index.php e example.com/post/test são passados para o interpretador php e funcionam - example.com/css/style.css não são passados para php e funciona - mas quando eu vou para example.com, o index.php é apenas baixado, não interpretado.

Meu location = / { configuration here } aparentemente nunca corresponde: (

Obrigado antecipadamente,

Jean-Michel

    
por jmfayard 03.11.2013 / 11:02

2 respostas

0

Aqui você encontrará ajuda: link E mantenha isso também: fastcgi_param SCRIPT_FILENAME $ request_filename;

Não é muito elegante, mas eu não tenho melhor para fornecer :( Uma nota, no entanto: Ao configurar o dotclear para usar PATH_INFO, você ainda tem index.php dentro, assim como no URL acima (que é hospedado por dotclear). Pode haver uma maneira de contornar isso com o URL reescreve ...

    
por 22.11.2013 / 16:53
0

Tenho certeza que esse é o problema

index index.php?start ;
location / {
         try_files $uri $uri/ @pathinfo ;
         #try_files $uri $uri/ /index.php$uri?$args;
}

O Nginx nunca encontrará um arquivo com o nome de arquivo "index.php? start" no disco rígido. Na sua localização / bloco que você está dizendo, tente encontrar o URI, que é apenas /, que é apenas o diretório raiz, e descobre isso.

My location = / { configuration here } is apparently never matched :(

É correspondido, apenas o primeiro é correspondido e não o segundo. Remova o primeiro local / bloco e o índice index.php? Start (porque acho que o último nunca funcionará).

    
por 01.11.2015 / 17:07