Jak skonfigurować PHP z Nginx, APC i PostgreSQL?

9

Używam Ubuntu Server 10.10 i chciałbym skonfigurować środowisko serwera WWW z NginX , PHP 5.3.3, PostgreSQL, a najlepiej APC i PHP Suhosin.

Już skonfigurowałem PostgreSQL z apt-get install postgresqli Nginx z apt-get install nginx.

Ale jak skonfigurować dla nich PHP? Czy mogę to zrobić za pomocą, apt-get installczy muszę pobrać źródła i skompilować? Wolałbym to zrobić za pomocą apt-get.

Chciałbym użyć PHP-FPM dla Nginx. Większość samouczków, które znalazłem w Internecie, są stare i kompilują PHP, ale nie jest to zalecane dla serwerów produkcyjnych.

Jak najłatwiej skonfigurować PHP z Nginx, APC i PostgreSQL? a przynajmniej PHP-FPM + Nginx?


AKTUALIZACJA

Zainstalowałem teraz nowy Ubuntu Server 10.10 i wykonałem polecenie, które Peterphp5-suhosin dodał z dodanym. Po tym Nginx działa dobrze, a następnie edytuję wygenerowany plik konfiguracji tak, jak poniżej. Po przeładowaniu nowego pliku konfiguracyjnego Nginx nadal działa poprawnie przy użyciu index.htmlpliku, ale kiedy dodam index.phpplik, przestaje działać. Myślę, że ma to związek z PHP-FPM, APC lub czymś związanym z PHP. Ale może to być również plik konfiguracyjny dla PHP-FPM.

Oto plik konfiguracyjny dla Nginx, którego używam, większość z nich jest generowana domyślnie. Pominąłem komentarze.

server {

    listen 80;
    listen [::]:80 default ipv6only=on;

    server_name localhost;

    access_log /var/log/nginx/localhost.access.log;

    location /favicon.ico {
        empty_gif;
    }

    location / {
        root     /var/www;
        index    index.php index.html index.htm;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

}
Jonas
źródło
Proszę, odpowiedzcie na to pytanie, a następnie zaakceptujcie, w ten sposób będziemy mogli głosować na oba z nich jako na połączone rozwiązanie.
Jorge Castro,
@Jorge: To nie jest odpowiedź, po prostu pokazuję mój plik konfiguracyjny, który nie działa . Peter Smit opublikował prawidłowe rozwiązanie w połączeniu z komentarzami i zaakceptowałem je jako odpowiedź.
Jonas,
Ach mój błąd, daj spokój!
Jorge Castro,

Odpowiedzi:

8

Począwszy od Ubuntu 10.10, jest to banalne w przypadku nowego pakietu php5-fpm

Następujące pakiety robią wszystko, czego potrzebujesz

  • nginx - serwer WWW
  • php5-fpm - Serwer php Fast-CGI
  • php-apc - Pakiet APC dla php
  • php5-pgsql - Moduł PostgreSQL dla PHP
  • postgresql - Serwer bazy danych PostgreSQL

Wszyscy razem sudo apt-get install nginx php5-fpm php-apc php5-pgsql postgresql

Sugeruję również sprawdzenie, czy apache2 jest zainstalowany. Jeśli tak, usuń go, sudo apt-get remove apache2aby uniknąć rywalizacji Apache i Nginx o port 80.

Zauważ też, że standard xdebug również chce używać portu 9000, podobnie jak php5-fpm. Więc jeśli używasz xdebug, zmień ten port na przykład na 9001

Jako bonus przykładowa konfiguracja nginx (umieść ją w / etc / nginx / sites-available i dowiązaj symbolicznie do / etc / nginx / sites-enabled)

server {
  listen 80;
  server_name site.com;
  access_log /data/log/www/site.com/access.log;
  error_log /data/log/www/site.com/error.log;

  root /data/www_data/site.com/public;
  index index.php;

  location = /favicon.ico {
    empty_gif;
    #return 204;
  }

  location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass 127.0.0.1:9000;
  }
}
Peter Smit
źródło
Zrobiłem to teraz i utworzyłem prosty test.phpplik, ale to nie działa. Moja przeglądarka mówi „uszkodzony link”, aw dzienniku błędów Nginx jest tylko wpis o „favicon.ico”. Wydaje mi się, że coś jest z moim plikiem konfiguracyjnym, ale tak naprawdę nie mam pojęcia i bardzo trudno jest znaleźć błąd.
Jonas
@Jonas Możliwe, że nginx i php5-fpm nie zostały jeszcze uruchomione. W takim przypadku sudo service nginx starti sudo service php5-fpm startpowinien wykonać pracę. Oczywiście, uważaj na wszelkie błędy, jakie mogą popełnić.
Peter Smit,
@Jonas Twój dziennik błędów nie powinien zawierać favicon.ico, a przynajmniej nie, jeśli skopiowałeś część empty_gif z mojego rozwiązania. Nie zapomnij także restartować zawsze po zmianie (the sudo service nginx reload). Jeśli wszystko inne zawiedzie, być może możesz dodać plik konfiguracyjny do pytania.
Peter Smit
Zaktualizowałem pytanie w moim pliku konfiguracyjnym dla Nginx, wydaje się, że coś jest nie tak z konfiguracją PHP. Po dodaniu wierszy o favicon do mojego pliku konfiguracyjnego nie otrzymuję już żadnych błędów w dzienniku błędów Nginx. Nginx działa z .htmlplikami, ale nie działa z .phpplikami.
Jonas
1
@Jonas Stroną, która pomogła mi stworzyć „czyste” pliki konfiguracyjne, jest wiki.nginx.org/Pitfalls , ale nie ignoruj ​​ostrzeżenia o wdrażaniu zmian, których nie rozumiesz.
Peter Smit