Nginx + php5-fpm — установка и конфигурация

В этом посте будет рассказано как установить nginx в связке с php-fpm в операционной системе Debian. Мы попытаемся настроить безопасную конфигурацию, которая улучшит работоспособность нашего сервера, а также защитит его от различных (но не от всех) атак. Приступим.

Установить Nginx с php-fpm в Debian:



Подключим необходимые репы и скачаем их ключи:

в nano /etc/apt/sources.list добавим это
deb http://backports.debian.org/debian-backports lenny-backports main
deb http://php53.dotdeb.org stable all


и загрузим ключ
gpg --keyserver keys.gnupg.net --recv-key 89DF5277 && gpg -a --export 89DF5277 | apt-key add -

теперь просто обновляемся и устанавливаем nginx с php5-fpm
apt-get updatea
aptitude install -t lenny-backports «nginx»
apt-get install php5-cli php5-common php5-suhosin php5-fpm php5-cgi


переходим к редактированию конфигурации nginx
nano /etc/nginx/nginx.conf

user www-data;
worker_processes  1; # Ставим число по количеству ядер

timer_resolution 100ms;
worker_rlimit_nofile 8192;
worker_priority -5; #Увеличитвваем приоритет

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    access_log	/var/log/nginx/access.log;

    sendfile        on;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip	on;
    gzip_min_length	1100;
    #gzip_disable	"msie6"; 
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_proxied	any;
    gzip_comp_level	4;
    gzip_types 		text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary		on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


а теперь перейдем к созданию сайта alushta.us (за место alushta.us вы можете использовать любое название вашего сайта) и его конфига:
nano /etc/nginx/sites-enabled/alushta.us
и вставим в данный конфиг такой код (адаптированно под cms wordpress)

server {
	listen  80;
	server_name  alushta.us;
	rewrite ^ http://alushta.us$request_uri? permanent; #301 redirect
}
server {
    listen  80;
	server_name  alushta.us; 
	root   /var/www/alushta.us;
	index  index.php;

	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}
	location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico)$ {
		access_log        off;
		expires           max;
	}
	location ~ .php$ {
		# fastcgi_split_path_info ^(.+\.php)(.*)$;
		fastcgi_pass   127.0.0.1:9000;
		fastcgi_index  index.php;

		fastcgi_param  DOCUMENT_ROOT    /alushta.us;
		fastcgi_param  SCRIPT_FILENAME  /alushta.us$fastcgi_script_name;
		fastcgi_param  PATH_TRANSLATED  /alushta.us$fastcgi_script_name;

		include fastcgi_params;
		fastcgi_param  QUERY_STRING     $query_string;
		fastcgi_param  REQUEST_METHOD   $request_method;
		fastcgi_param  CONTENT_TYPE     $content_type;
		fastcgi_param  CONTENT_LENGTH   $content_length;
		fastcgi_intercept_errors        on;
		fastcgi_ignore_client_abort     off;
		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;
	}
}


и создадим директорию, в которой будут располагаться наши .php или .html файлы сайта alushta.us
mkdir /var/www/alushta.us
и добавим для теста index.php
nano /var/www/alushta.us/index.php с таким кодом
<?php phpinfo(); ?>


сайт готов, осталось установить базу данных (на будущее)
apt-get install mysql-server mysql-client php5-mysql

перезапускам наш веб-сервер nginx и fpm
/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart


Вот и все, теперь наш веб-сайт готов к работе и его работоспособность вы сможете проверить зайдя по адресу, который вы указали в конфиге, у меня же это был alushta.us/. Зайдя на сайт, вы должны увидеть вывод phpinfo — информация о модулях и прочего.

А теперь пройдемся по безопасности нашего веб-сервера:

установим права на веб-директории сайта
chown -R www-data /var/www/alushta.us && chmod -R 750 /var/www/alushta.us

пофиксим уязвимость в php.ini
nano /etc/php5/cgi/php.ini
cgi.fix_pathinfo=0


ограничим PHP в доступе к системе
nano /etc/php5/fpm/php5-fpm.conf
chroot = /var/www
chdir = /


и фиксим проблему ресолва адреса php
mkdir /var/www/{etc,lib};
cp /etc/hosts /var/www/etc/hosts;
cp /etc/resolv.conf /var/www/etc/resolv.conf;
cp /lib/libnss_dns.so.2 /var/www/lib/libnss_dns.so.2 //ваша система 32 битная
cp /lib64/libnss_dns.so.2 /var/www/lib64/libnss_dns.so.2 //ваша система 64 битная


перезапуск и огонь
/etc/init.d/php5-fpm restart

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.