FreeBSD 10 php-fpm nginx joomla 3

Дата | 22.07.2015

Пишу что бы не забыть мануал по настройке вэб сервера на системе FreeBSD 10.
Нагрузка на проект солидная примерно 300тыс. посетителей в сутки и потихоньку растет.
Сервис по транслированию видео с другого сайта.

Что есть?:
Сервер 12 ядерный.
ссд диск 240 гиг.
Оперативная память 112 Гиг.

Движок сайта joomla 3.4.
Будим все это подымать на системе FreeBSD, обработку статики и php будит у нас делать nginx+php-fpm .
php я выбрал версии 5.5, он собран с функцией fpm.
Приступим.
Система у нас настроена и оптимизирована.
Ставим nginx

# cd /usr/ports/www/nginx && make install clean
Настроим вэб сервер nginx.
# cat /usr/local/etc/nginx/nginx.conf | egrep -v '^$|^#'
user www www;
worker_processes  12;
timer_resolution  100ms;
worker_rlimit_nofile  8192;
worker_priority -5;
    error_log /mnt/logs/nginx/all_error.log error;
    pid        /var/run/nginx.pid;
events {
    worker_connections  3048;
    use kqueue;
    multi_accept on;
}
http {
    include       /usr/local/etc/nginx/mime.types;
    default_type application/octet-stream;
    access_log off;
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    server_tokens off;
    client_body_timeout 10;
    send_timeout 2;
    client_max_body_size 60m;
    keepalive_timeout  50;
    keepalive_requests 100;
    reset_timedout_connection on;
    fastcgi_buffer_size 156k;
    fastcgi_buffers 8 156k;
    gzip  on;
    gzip_disable "MSIE [1-6]\.";
    gzip_min_length 1100;
    gzip_buffers 4 8k;
    gzip_comp_level 6;
    gzip_http_version 1.1;
    gzip_proxied any;
    gzip_types text/plain application/xhtml+xml text/css application/xml application/xml+rss text/javascript application/javascript application/x-javascript
    include /usr/local/etc/nginx/conf.d/*.conf;
    include /usr/local/etc/nginx/sites-enabled/*;
# В этом коде мы отключаем опасный выполняемый функционал сервера.
    add_header X-Frame-Options SAMEORIGIN;
    add_header Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block;";
    add_header X-Content-Security-Policy "allow 'self';";
    add_header X-WebKit-CSP "allow 'self';";
    add_header X-Content-Type-Options nosniff;
}

Логирование запросов верных лучше отключить, логировать только ошибки.
Настройка виртуального хоста для движка joomla 3 .

# cat /usr/local/etc/nginx/sites-enabled/Мой сайт | egrep -v '^$|^#'
server {
 	listen 1.1.1.1:80;
	server_name  Мой сайт;
# тут мы реализовываем 301 редирект с не www, на www.
 	return       301 http://www.Мой сайт$request_uri;
}
server {
        listen 1.1.1.1:80;
        server_name www.Мой сайт;
        error_log /mnt/backLOG/log/nginx/error_log info;
        root /usr/local/www/Мой сайт;
        index index.php index.html index.htm;
# Включаем кэш от nginx.
	open_file_cache max=15024 inactive=60s;
 	open_file_cache_valid 300s;
	open_file_cache_min_uses 2;
	open_file_cache_errors on;
location / {
        try_files $uri $uri/ /index.php?$args;
}
location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
        return 403;
        error_page 403 /403_error.html;
}
location ~ \.php$ {
	fastcgi_pass unix:/tmp/site_www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(ico|pdf|flv)$ {
        expires 1y;
}
location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
        expires 30d;
}
location ~* ^/modules/mod_videopages/helper.php {
        fastcgi_pass unix:/tmp/site_www.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Решил отключить акселиратор php для этого функционала сайта.
        fastcgi_param PHP_ADMIN_VALUE "xcache.cacher=Off";
        fastcgi_param PHP_ADMIN_VALUE "xcache.stat=Off";
        fastcgi_param PHP_ADMIN_VALUE "xcache.optimizer=Off";
}
location /administrator/ {
        index index.php;
        auth_basic           "enter password";
        auth_basic_user_file /usr/local/htpasswd;
location ~ \.php$ {
        fastcgi_pass unix:/tmp/site_www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_ignore_client_abort off;
# Решил отключить акселиратор php для этого функционала сайта.
        fastcgi_param PHP_ADMIN_VALUE "xcache.cacher=Off";
        fastcgi_param PHP_ADMIN_VALUE "xcache.stat=Off";
        fastcgi_param PHP_ADMIN_VALUE "xcache.optimizer=Off";
   }
location /pma/ {
	alias /usr/local/www/phpMyAdmin/;
 	index index.php;
 	auth_basic           "enter password";
    	auth_basic_user_file /usr/local/htpasswd;
location ~ \.php$ {
 	fastcgi_pass unix:/tmp/site_www.sock;
 	fastcgi_index index.php;
	include fastcgi_params;
	fastcgi_param SCRIPT_FILENAME $request_filename;
	fastcgi_ignore_client_abort off;
# Решил отключить акселиратор php для этого функционала сайта.
        fastcgi_param PHP_ADMIN_VALUE "xcache.cacher=Off";
        fastcgi_param PHP_ADMIN_VALUE "xcache.stat=Off";
        fastcgi_param PHP_ADMIN_VALUE "xcache.optimizer=Off";
   }
}
location ~ /\.ht {
        deny  all;
}
}

Если есть или планируется сильная, сетевая нагрузка у вэб сервера, то лучьше обработку php реализовать через сокеты (fastcgi_pass unix:/tmp/www.sock;).
Тем самым мы снизим нагрузку с сетевого стека, сокет лежит в директории tmp, а эта директория у нас находится в tmpfs.

Перейдем к настройки php-fpm.
В нем я несколько пунктов изменил.

# nano /usr/local/etc/php-fpm.conf
# переводим на сокеты.
;listen = 127.0.0.1:9000
listen = /tmp/site_www.sock
# Права на сокет.
listen.owner = www
listen.group = www
# разрешение на online народу на сервере.
pm.max_children = 1255
# Все время запущенных сервисов.
pm.start_servers = 11
# Минимально простаивающих сервисов.
pm.min_spare_servers = 11
# Максимально простаивающих.
pm.max_spare_servers = 19
# Очередь.
pm.max_requests = 7500
Категории: web Метки:

2 thoughts on “FreeBSD 10 php-fpm nginx joomla 3

  1. Влад

    Добрый день.
    Спасибо за не плохую статью. Скажите планирую сейчас поднять на 10.2 — php 5.6 обязательно ли использовать как Вы виртуальный хост ?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *