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