Konfiguracja CakePHP 2.5.x na serwerze Nginx

CakePHP na Nginx – konfiguracja

Zauważyłem, że wiele osób ma problemy z uruchomieniem CakePHP na Nginx. Kluczem jest poprawne skonfigurowanie współpracy Nginx z interpreterem PHP. Poniżej przedstawiam tutorial na konfigurację, która z powodzeniem u mnie pracuje.

Moja spec.:

  • Debian 7.6 (wheezy)
  • CakePHP 2.5.3
  • PHP 5.4.4-14
  • Nginx 1.2.1

Komendy wykonujemy z uprawnieniami roota. W Ubuntopodobnych systemach możemy uruchamiać je przy użyciu sudo <komenda>.
Sprawdźcie, czy przypadkiem nie jest już zainstalowany serwer Apache. Jeśli jest, to należy go odinstalować!

1.instalujemy Nginx

apt-get install nginx

Jeśli nie mamy zainstalowanej bazy MySQL, to instalujemy

apt-get install mysql-server

2. Startuejmy serwer

service nginx start

3. Tworzymy plik konfiguracyjny. Możemy również zastąpić istniejący „default”

nano /etc/nginx/sites-available/konfig_cake

4. konfiguracja hosta i ustawienia dla interpretera PHP

server {
        listen   80;
     
	  # podajemy pełną ściezkę do katalogu z nasza aplikacja. Domyślnie dla nginx jest to /usr/share/nginx/www , ale nasza apka może być wszędzie, gdzie chcemy.  
        root /usr/share/nginx/www/app/webroot;
        index index.php index.html index.htm;

        server_name cakeapp.local;

        location / {
                try_files $uri $uri/ /index.html;
        }

	  # mozemy wykluczyc dostęp do plikow .htaccess, których Nginx i tak nie obsluguje lub usunac je.

        error_page 404 /404.html;
	
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }

        # pass PHP scripts do FastCGI nasluchujacego w /var/run/php5-fpm.sock
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                
        }

}

Po utworzeniu pliku konfiguracyjnego należy wykonać jego dowiązanie (ln)do katalogu

/etc/nginx/sites-enabled/

5. Instalujemy PHP

apt-get install php5-fpm php5-mysql

6. Zmiany w konfiguracji w php.ini

nano /etc/php5/fpm/php.ini

odnajdujemy linię cgi.fix_pathinfo=1 i zmieniamy 1 na 0.

cgi.fix_pathinfo=0

7. Edytujemy

nano /etc/php5/fpm/pool.d/www.conf

Odnajdujemy linię:

listen = 127.0.0.1:9000 i zmieniamy 127.0.0.1:9000 na /var/run/php5-fpm.sock

czyli powinno wyglądać tak:

listen = /var/run/php5-fpm.sock

8. Edytujemy plik hosts

nano /etc/hosts

i dodajemy

127.0.0.1 cakeapp.local
cakeapp.local to nazwa serwera server_name w pliku konf. nginxa,

9. Restartujemy usługi

service php5-fpm restart
service nginx restart

Jeśli usługa nginx wstaje z błędami, to najprawdopodobniej popełniliśmy błąd w pliku konfiguracyjnym. Jeśli utworzyliście własny plik konf., który leży w katalogu sites-enabled razem z plikiem default i nie została zmieniona nazwa serwera server_name (np. localhost), to być może istnieje kolizja nazw serwera. Błędy serwera nginx można odnaleźć w logach:

/var/log/nginx/error.log

Jeśli po wpisaniu w przeglądarce adresu cakeapp.local:

  • nie widzimy strony (pusta biała), znaczy to, że ustawione są niepoprawne uprawnienia dla plików naszej aplikacji www,
  • pojawia się error 404, to prawdopodobnie źle podana została ścieżka root,
  • po wpisaniu cakeapp.local/index.php ściąga się plik, to niepoprawne został ustawiony php5-fpm.

Uprawnienia.

Bardzo ważną kwestią są uprawnienia dla plików naszej aplikacji, których właściciel powinien być w grupie www-data. Uprawnienia zmieniamy np. chown -R mchyra:www-data /usr/share/nginx/www/app gdzie mchyra to nazwa mojego użytkownika w systemie.Nie zapomnijmy podnieść uprawnień dla katalogu app/tmp na możliwość zapisu chmod -R 777 /usr/share/nginx/www/app/tmp