В данной статье, будет показано как поставить Nginx + php5-fpm на Debian Wheezy и настроить безопасную конфигурацию.
Скачиваем и распаковываем исходные файлы:
Устанавливаем библиотеки необходимые для сборки:
Создаем конфигурацию:
В конфигурации указывается какие модули использовать. Подробнее об опциях включения отключения модулей можно посмотреть в wiki.
Теперь собираем и устанавливаем:
Создаем необходимые для работы каталоги:
Скачиваем дополнительные скрипты:
Добавляем репозитарий dotdeb.org:
Устанавливаем:
Редактируем файл /etc/php5/fpm/php-fpm.conf
Создаем файл /etc/php5/fpm/pool.d/domain.ru.conf:
Стартуем сервис:
Редактируем файл /etc/nginx/nginx.conf
Создаем файл /etc/nginx/sites-available/domain.ru
В данном примере показана настройка сайта, работающего на фреймворке YII.
Включаем сайт
Создаем файл /home/domains/domain.ru/www/test.php с содержимым
Открываем в браузере http://domain.ru/test.php
Если все нормально настроено, то увидим
Установка NGINX.
Скачиваем и распаковываем исходные файлы:
cd /usr/src/ wget http://nginx.org/download/nginx-1.4.2.tar.gz tar zxf nginx-1.4.2.tar.gz rm -f nginx-1.4.2.tar.gz cd nginx-1.4.2
Устанавливаем библиотеки необходимые для сборки:
aptitude install libpcre3-dev make libssl-dev libgeoip-dev checkinstall
Создаем конфигурацию:
./configure \ --prefix=/usr \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=www-data \ --group=www-data \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-http_geoip_module \ --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --without-http_ssi_module \ --without-http_userid_module \ --without-http_uwsgi_module \ --without-http_scgi_module \ --without-http_memcached_module \ --without-http_limit_conn_module \ --without-http_limit_req_module \ --without-http_empty_gif_module \ --without-http_browser_module \ --without-http-cache \ --without-mail_pop3_module \ --without-mail_imap_module \ --without-mail_smtp_module \ --without-http_geo_module \ --with-pcre
В конфигурации указывается какие модули использовать. Подробнее об опциях включения отключения модулей можно посмотреть в wiki.
Теперь собираем и устанавливаем:
make checkinstall
Создаем необходимые для работы каталоги:
mkdir -p /var/tmp/nginx/client mkdir -p /etc/nginx/sites-available mkdir -p /etc/nginx/sites-enabled mkdir -p /var/log/nginx
Скачиваем дополнительные скрипты:
wget https://dl.dropboxusercontent.com/u/98786051/nginx/nginx -O /etc/init.d/nginx chmod +x /etc/init.d/nginx update-rc.d nginx defaults wget https://dl.dropboxusercontent.com/u/98786051/nginx/ngxdissite -O /usr/sbin/ngxdissite wget https://dl.dropboxusercontent.com/u/98786051/nginx/ngxensite -O /usr/sbin/ngxensite chmod +x /usr/sbin/ngx*
Установка php-fpm
Добавляем репозитарий dotdeb.org:
echo "" >> /etc/apt/sources.list echo "#php-fpm" >> /etc/apt/sources.list echo "deb http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list echo "deb-src http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list wget http://www.dotdeb.org/dotdeb.gpg cat dotdeb.gpg | apt-key add -
Устанавливаем:
aptitude update aptitude install php5-fpm mkdir -p /var/log/php5-fpm
Настройка php-fpm
Редактируем файл /etc/php5/fpm/php-fpm.conf
;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] pid = /var/run/php5-fpm.pid error_log = /var/log/php5-fpm/error.log log_level = warning emergency_restart_threshold = 10 emergency_restart_interval = 1m process_control_timeout = 5s daemonize = yes ;;;;;;;;;;;;;;;;;;;; ; Pool Definitions ; ;;;;;;;;;;;;;;;;;;;; include=/etc/php5/fpm/pool.d/*.conf
Создаем файл /etc/php5/fpm/pool.d/domain.ru.conf:
[domain.ru] listen = /tmp/domain.ru.sock listen.backlog = -1 listen.owner = www-data listen.group = www-data listen.mode = 0666 user = www-data group = www-data pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 request_slowlog_timeout = 20 slowlog = /var/log/php5-fpm/www-slow.log chdir = / php_admin_value[open_basedir] = /usr/share/php5:/tmp:/home/domains/domain.ru/www php_admin_value[disable_functions] = dl,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
Стартуем сервис:
service php5-fpm start
Настройка nginx
Редактируем файл /etc/nginx/nginx.conf
user www-data; worker_processes 8; # Ставим число по количеству ядер timer_resolution 100ms; worker_rlimit_nofile 8192; worker_priority -5; error_log /var/log/nginx/error.log; pid /var/run/nginx/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; server_tokens off; #Отключаем вывод версии сервера sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1100; gzip_disable "msie6"; gzip_buffers 64 8k; gzip_comp_level 4; gzip_http_version 1.1; gzip_proxied any; gzip_types text/plain application/xml application/x-javascript text/css text/xml text/javascript; gzip_vary on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Создаем файл /etc/nginx/sites-available/domain.ru
server { listen 200.200.200.200:80; server_name domain.ru; set $host_path "/home/domains/domain.ru"; root $host_path/www; set $yii_bootstrap "index.php"; charset utf-8; client_max_body_size 20m; error_log /var/log/nginx/domain.ru/error.log; access_log /var/log/nginx/domain.ru/access.log main; #На ститческий контент устанавливаем кеширование и отключаем запись в лог location /static{ expires max; access_log off; } location /assets{ expires max; access_log off; } #Перенаправление всех запросов в Yii location / { index index.html $yii_bootstrap; try_files $uri $uri/ /$yii_bootstrap?$args; } #Защищаем папки location ~ ^/(protected|framework|themes/\w+/views) { deny all; } #отключаем обработку запросов фреймворком к несуществующим статичным файлам location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { access_log off; expires max; try_files $uri $uri/ /$yii_bootstrap?$args; } #Блокируем прямой доступ к следующим типам файлов location ~* ^.+\.(inc|sql|dat|ini|conf|cfg|log)$ { deny all; } location ~ .php$ { fastcgi_split_path_info ^(.+\.php)(.*)$; #позволяем yii перехватывать запросы к несуществующим PHP-файлам set $fsn /$yii_bootstrap; if (-f $document_root$fastcgi_script_name){ set $fsn $fastcgi_script_name; } fastcgi_pass unix:/tmp/domain.ru.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fsn; #PATH_INFO и PATH_TRANSLATED могут быть опущены, но стандарт RFC 3875 определяет для CGI fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fsn; fastcgi_intercept_errors on; fastcgi_ignore_client_abort on; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } ## Disable viewing .htaccess & .htpassword location ~ /\.ht { deny all; } #Блокируем доступ к папкам SVN location ~ /.svn/ { deny all; } location ~ /.cvs/ { deny all; } }
В данном примере показана настройка сайта, работающего на фреймворке YII.
Включаем сайт
ngxensite domain.ru service nginx reload
Проверяем
Создаем файл /home/domains/domain.ru/www/test.php с содержимым
<?php phpinfo(); ?>
Открываем в браузере http://domain.ru/test.php
Если все нормально настроено, то увидим
к nginx-1.6.2 будет ли актуальна эта статья?
ОтветитьУдалитьДа будет работать
ОтветитьУдалить