6 заметок с тегом

nginx

Запуск сайтов от разных пользователей nginx + php-fpm

25 мая, 12:51

По умолчанию, все сайты запускаться от пользователя (www-data), указанного в настройках php-fpm.


Внимание: Использую версию PHP 7.2, для других версий пути могут отличаться.

Чтобы запускать сайты от разных пользователей, необходимо:


  1. Создать несколько пользователей.
  2. Создать отдельные конфигурационные файлы и настроить php-fpm.
  3. Создать отдельные конфигурационные файлы и настроить nginx.
  4. Перезапустить сервисы и создать контент.

Пользователи


Создаем пользователя site с домашним каталогом, оболочкой /bin/bash и пароль.


useradd -g www-data -m -d /var/www/site/ -s /bin/bash site
passwd site


Настройка php-fpm


Создать отдельные конфигурационные файлы в директории /etc/php/7.2/fpm/pool.d,
убедившись при этом, что в файле /etc/php/7.2/fpm/php-fpm.conf указана строчка

include=/etc/php/7.2/fpm/pool.d/*.conf

Создать файл site.conf и пишем содержимое:


[site.ru]
pm = dynamic
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_children = 5
pm.max_spare_servers = 5
listen = /run/php/php7.2-fpm-site.sock
listen.mode = 0660
listen.owner = site
listen.group = www-data
user = site
group = www-data
chdir = /
php_admin_value[upload_tmp_dir] = /var/www/site/tmp
php_admin_value[session.save_path] = /var/www/site/tmp


Создать папку /var/www/site/tmp

Настройка nginx


Создать отдельные конфигурационные файлы в директории /etc/nginx/sites-available/
Создать файл site.conf и пишем содержимое:


upstream site.ru {server unix:/run/php/php7.2-fpm-site.sock;}
server {
	listen 80;
	root /var/www/site/html;
	index index.php index.html index.htm;
	server_name site.ru;
	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}
	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php7.2-fpm-site.sock;
		include fastcgi_params;
		include snippets/fastcgi-php.conf;
		fastcgi_keep_conn on;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f noreply@site.ru";
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
	}
	location ~ /\.ht {
		deny all;
	}
}


По умолчанию, в Debian все файлы настройки виртуальных доменов создаются в каталоге /etc/nginx/sites-available,
а на все активные сайты создаются символические ссылки на этот файл в каталоге /etc/nginx/sites-enable


ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.ru


Готово. Теперь перезапустить сервисы и проверить.


service nginx restart
service php7.2-fpm restart

Содержимое файла index.php для проверки
<?php
// Показывать всю информацию, по умолчанию INFO_ALL
phpinfo();

// Показывать информацию только о загруженных модулях.
phpinfo(INFO_MODULES);
?>
Debian   Linux   nginx   PHP-FPM

Установка и настройка LEMP (nginx,mysql,php-fpm)

23 мая, 15:03

Минимальная настройка LEMP в Debian/Ubuntu


Первое, это обновим индекс пакетов.


sudo apt-get update


Установим nginx


sudo apt-get install nginx


Теперь проверим, что nginx доступен по URL, откроем в браузере наш IP адрес.
Приветствие от NGINX.


Далее, установим MySQL


sudo apt-get install mysql-server


Проверим работу и доступ к MySQL


mysql -u root -p


Установим PHP-FPM и модуль для работы с MySQL


sudo apt-get install php-fpm php-mysql


На текущий момент установилась версия 7.2


Отредактируем конфиг PHP-FPM


sudo nano /etc/php/7.2/fpm/php.ini


Устанавливаем cgi.fix_pathinfo в 0 (устранение уязвимости исполнения файлов)


cgi.fix_pathinfo=0


Перезапустим обработчик PHP-FPM


sudo service php7.2-fpm restart


Отредактируем default config файл nginx


sudo nano /etc/nginx/sites-available/default
// Редактируем:
        index index.php index.html index.htm;

	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php7.2-fpm.sock;
		include fastcgi_params;
		include snippets/fastcgi-php.conf;
	}
	location ~ /\.ht {
		deny all;
	}
// Тестируем на ошибки
sudo nginx -t
// Перезапуск
sudo service nginx restart


Готово.


Финальный тест.
Создадим файл для проверки PHP в корневой директории сайта


sudo nano /var/www/html/index.php


Установить дополнительные модули
К примеру, mbstring, xml и тд:


apt-get install php7.2-mbstring php7.2-xml php7.2-curl php7.2-zip php7.2-gd


Настроем ЧПУ


sudo nano /etc/nginx/sites-available/default

	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}


Оф. руководство Nginx + PHP-FPM + MySQL для Ubuntu


http://help.ubuntu.ru/wiki/nginx-phpfpm
http://help.ubuntu.ru/wiki/mysql

Отключение функций PHP

4 мая 2018, 11:29

Настройка PHP.ini

Отключить функцию отправки email — mail()

disable_functions = mail


закрыть доступ ко всем не существующим файлам *.php

cgi.fix_pathinfo=0

или в nginx.conf

location ~ \.php$ {
        try_files $fastcgi_script_name =404;
	fastcgi_index			index.php;
	fastcgi_param			script_FILENAME /scripts$fastcgi_script_name;
	include				fastcgi_params;
}


Закрыть отправку писем в nginx.conf, данные о попытках отправить сохраняются в лог

// на попытку отправить будет возвращаться "FALSE"
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /bin/false";
// или
// на попытку отправить будет возвращаться "FALSE"
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /bin/true";


Корректная отправка писем настройка в nginx.conf

no@mail.ru — вместо этого указать ваш Email

fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f no@mail.ru";
Linux   mail   nginx   PHP   php.ini   sendmail_path

Redirect http to https

26 октября 2016, 10:54

Создаем redirect с http на https на сервере nginx.
Переходим в нужный файл конфигурации к примеру nginx.conf путь: /etc/nginx/ и открываем на редактирование

server {
...
listen 80;	
Вставить строчку:
return 301 https://$host:443$request_uri;
}



Сохраняем изменения и делаем перезапуск nginx

nginx -s reload



Создаем redirect с http на https на сервере apache.
Добавляем правило в файл .htaccess:

RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]



или вот такое правило:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]



Готово. При попытке зайти на ваш сайт по http будет автоматически открываться сайт с https.

.htaccess   Apache   https   nginx   Redirect

Обновление NGINX до последней версии Debian

6 мая 2016, 14:51

Обновляем NGINX до последней версии на сервере с Debian.
Всё просто, но есть нюансы.
Итак, приступим.


Скачать и установить сертификат

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key


Открываем репозиторий

sudo nano /etc/apt/sources.list


Дописать, если нет, следующие строки
Проверьте пакеты для вашей системы на оф сайте: nginx.org/ru/linux_packages.html

deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx


Сохраняем и обновляем

sudo apt-get update
sudo apt-get dist-upgrade


И если у нас уже установлен Nginx получаем ошибку

При обработке следующих пакетов произошли ошибки:
/var/cache/apt/archives/nginx_1.10.0-1~wheezy_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)


Перед обновлением, сначала нужно удалить старую версию nginx.

Комментируем строки в репозитории

sudo nano /etc/apt/sources.list

# deb http://nginx.org/packages/debian/ wheezy nginx
# deb-src http://nginx.org/packages/debian/ wheezy nginx


Сохраняем и обновляем

sudo apt-get update


Проверяем, что установлено в системе nginx

dpkg-query -W --showformat='${Package}\n' | grep nginx

Результат примерно следующий:
nginx
nginx-common
nginx-full


Удаляем

sudo apt-get remove nginx nginx-common nginx-full


Теперь снова идем /etc/apt/sources.list и уберем # где мы закомментировали, сохраняем и обновляем.

sudo apt-get update
sudo apt-get install nginx


Вот и всё.

Ctrl + ↓ Ранее