
Решил написать статью как в FreeBSD php-fpm nginx joomla запустить.
Пишу что бы не забыть мануал по настройке вэб сервера на системе 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
Запускаем на системе FreeBSD php-fpm nginx joomla.
Добрый день.
Спасибо за не плохую статью. Скажите планирую сейчас поднять на 10.2 — php 5.6 обязательно ли использовать как Вы виртуальный хост ?
Добрый.
нет.
виртуал хост больше для удобства.