Установка и настройка NGINX и php-fpm на FreeBsd

Сначала ставим из портов php
cd /usr/ports/lang/php5
make install clean
rehash

При установке вылезет окно, в нем выбираем FPM (да, этот модуль к счатью включен в базовую поставку и уже не надо качать патч как раньше).
Когда php установится ставим рассширения для него (врядли вам нужен голый php)
cd /usr/ports/lang/php5-extensions
make install clean
rehash

Выбираем нужные вам (если что потом можно легко доставить).

Отлично, у нас уставновлен php и рассширения к нему.
Пропишем php-fpm в автозагрузку
echo 'php_fpm_enable="YES"' >> /etc/rc.conf


Теперь самое время поставить веб-сервер nginx
cd /usr/ports/www/nginx
make install clean
rehash

Можно выбрать что-то из дополнительных модулей, но обычно это не надо, хотя в любом случаи можно потом будет пересобрать с ними за пять минут.
Когда nginx установился необходимо тоже прописать его в автозагрузку
echo 'nginx_enable="YES"' >> /etc/rc.conf


Теперь когда у нас есть установленные php и веб сервер можно заняться конфигурацией всего этого добра.
В файле /usr/local/etc/php-fpm.conf заставляем php-fpm работать через unix сокет, а не по tcp, это даст небольшой прирост производительности
;listen = 127.0.0.1:9000
listen = /tmp/php-fpm.sock

Больше в этом файле можно ничего не править

Далее идем в конфигурацию nginx (/usr/local/etc/nginx/nginx.conf)
#user  nobody;
#это число выставляется по количеству ядер вашего процессора
worker_processes  1;

#тут можно настроить логи
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
    #для FreeBsd включайте это
    use kqueue;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #обозначим, что php-fpm у нас работает через юникс сокет
    #лучше задавать именно так, потому что в будущем можно легко будет сменить этот параметр сразу для всех сайтов 
    upstream fpm {
	server unix:/tmp/php-fpm.sock;
    }

    server {
        listen 80;
        server_name  _; 

        charset utf-8;
        root   /home/www/site;

        location / {
            index  index.php;
        }

        error_page   500 502 503 504  /50x.html;
        
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

        location ~ \.php$ {
            #здесь задается путь к обработчику php, который мы задали выше в upstream
	    fastcgi_pass fpm;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
            include        fastcgi_params;			
        }

        #ну и на всякий случай, отдавая дань апаче, скроем его .htaccess
        location ~ /\.ht {
            deny  all;
        }
    }
}


Параметр server_name _ задан так, чтобы nginx обрабатывал любой домен.
Если у вас несколько доменов делайте несколько секций server{} и в server_name указывайте домены и алиасы через пробел.
Параметр root /home/www/site; это аналог DOCUMENT_ROOT, именно в этой директории будет находиться ваш сайт.

Теперь запускаем nginx и php-fpm
service nginx start
service php-fpm start

В /home/www/site создаем index.php со стандартным и пробуем зайти через браузер.
Вопросы засылайте в коментах.