Решил написать статью как в 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 обязательно ли использовать как Вы виртуальный хост ?
Добрый.
нет.
виртуал хост больше для удобства.