Pokazywanie postów oznaczonych etykietą nginx. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą nginx. Pokaż wszystkie posty

wtorek, 26 marca 2013

Nginx + php + userdir

W Nginx nie zaimplementowano mechanizmu userdir, znanego z serwera Apache, który w prosty sposób umożliwia uruchamianie skryptów php w katalogach użytkowników. Uczyniono tak ze względów bezpieczeństwa. Niemniej jednak czasami przydaje się taka funkcjonalność, np. do celów testowych, a więc nauki programowania w php. Poniżej konfiguracja działająca na Debianie/Ubuntu i Archu/Bridge'u:

server {
  listen   80;
  access_log  /var/log/nginx/localhost.access.log;
  index index.php index.html index.htm;

  server_name localhost;
  autoindex on;

  location ~ ^/~([^/]+)/(.+\.php)$ {
    include fastcgi_params;
    alias /home/$1/public_html/$2;
    fastcgi_pass unix:/var/run/php5-fpm.sock; # dla Debiana, Ubuntu
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock; # dla Bridge'a
    fastcgi_index index.php;
  }

  location ~ ^/~(.+?)(/.*)?$ {
    alias /home/$1/public_html$2;
  }

  location ~ /\.ht { deny all; }
  location ~ /\. { deny all; }
}

W Debianie/Ubuntu powyższa konfiguracja powinna zostać zapisana w jakimś pliku (np. userdir) w katalogu /etc/nginx/sites-available, a następnie dowiązana w katalogu /etc/nginx/sites-enabled. W Archu/Bridge'u dopisujemy to w pliku /etc/nginx/nginx.conf.
Uwaga: powyższa konfiguracja nie jest bezpieczna, nadaje się wyłącznie do celów testowych. Jeśli chcesz więcej wiedzieć, zajrzyj na stronę wiki projektu Nginx.

poniedziałek, 9 lipca 2012

Nginx + php5 + php5-fpm

Instalacja na Debianie (testing)/Ubuntu

sudo apt-get install nginx php5 php5-gd php5-sqlite php5-fpm

Instalacja na Bridge Linux/Archlinux

sudo pacman -S nginx php php-gd php-sqlite php-fpm

W /etc/php5/fpm/php.ini ustawiamy opcje dla php, np. włączamy wyświetlanie błędów itp. W Bridge Linux edytujemy plik /etc/php/php.ini i wyłączamy jedną opcję, aby otrzymać: #open_basedir = /srv/http/...

W /etc/php5/fpm/pool.d/www.conf:
listen = /var/run/php5-fpm.sock
- w Ubuntu 12.04 jest domyślnie listen = 127.0.0.1:9000, czyli ustawienie dla php5-cgi, a nie php5-fpm, dlatego trzeba zmienić. W Ubuntu 13.04 nic nie trzeba zmieniać. W Bridge'u/Archu cała konfiguracja zawarta jest w /etc/php/php-fpm.conf i nic nie trzeba zmieniać, ale ścieżka gniazda ma inną postać: listen = /run/php-fpm/php-fpm.sock.

W /etc/nginx/sites-available tworzymy plik (wpis) definiujący nasz serwer i zapisujemy go (w Debianie, Ubuntu) pod dowolną nazwą, np. local.org. W Bridge'u/Archu edytujemy plik /etc/nginx/nginx.conf. Przykładowa zawartość:
server {
   listen 80;
   server_name localhost;
   charset utf-8;
   access_log off;
   root /home/lolek/public_html;
   index index.php;

   location / {
      try_files       $uri $uri/ /index.php;
#lub: try_files       $uri $uri/ /index.php?id=$uri&$args
   }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    location ~ /\.ht { deny all; }
    location ~ /\. { deny all; }
}
- przy czym najważniejszy jest parametr root, który zawiera ścieżkę do katalogu z plikami serwisu, oraz sekcja location ~.\.php$ definiująca sposób przetwarzania wywołań php.
W przypadku Bridge'a/Archa pamiętamy o wprowadzeniu poprawnej ścieżki do gniazda (!), czyli unix:/run/php-fpm/php-fpm.sock. Zmieniamy też fastcgi_params na fastcgi.conf.

Usuwamy dowiązanie /etc/nginx/sites-enabled/default i tworzymy nowe:
ln -s /etc/nginx/sites-available/lolcal.org /etc/nginx/sites-enabled/default

Na koniec restartujemy usługi:
invoke-rc.d php5-fpm restart; invoke-rc.d nginx restart - w Debianie
service php5-fpm restart; service nginx restart - w Ubuntu
rc.d restart php-fpm; rc.d restart nginx - w Bridge Linux

Uwaga: powyższa konfiguracja jest bardzo podstawowa i służyć ma do lokalnych testów, nie uwzględnia więc zagadnień bezpieczeństwa, zwłaszcza związanych z możliwością wykonywania skryptów php.
Ponieważ sporo sieciowych tutoriali zawiera błędy i/lub uproszczenia, poprawnych (czyt. bezpiecznych) konfiguracji trzeba szukać u źródła, czyli na stronie wiki projektu Nginx.