Настраиваем сервер для LiveStreet. Часть VII. NGINX.
Предыдущие части:
Общие замечания:
Ставим:
Общий конфигурационный файл /etc/nginx/nginx.conf делаем таким:
Создаем каталоги для конфигураций сайтов, по аналогии с Apache (мне это кажется удобным стилем):
Сoздаём .htpasswd. Такие файлы изначально придуманы для Apache-а, содержат хэшированные аккаунты для доступа к ресурсу. Используется, в частности, для закрытия доступа к сайту (или какой-то его части) с помощью HTTP Auth. nginx тоже умеет с этим работать, и именно таким образом мы закроем доступ к паре «административных» страниц которые нам понадобятся в будущем. Создается просто:
Создаём конфигурационный файл для нашего сайта /etc/nginx/sites-available/superls.ru:
В самом начале обеспечивается HTTP 301 с домена с WWW на домен без WWW. Если оно не надо — просто удалить весь первый блок «server».
«Активируем» сайт:
Ре-стартуем:
Нужно протестировать. Предполагается, что доменное имя уже публично видно. Просто вызываем наш сайт из браузера:
Теперь нужно протестировать правильно ли работает mod-rpaf (модуль апача который обеспечивает сохранение оригинального клинского IP при проксировании). Для этого создаем простенький файл /var/www/superls.ru/public/ip.php следующего содержания:
Вызываем:
Вдогонку: обращаю внимание на очень полезную ветку комментариев: livestreet.ru/blog/dev_documentation/14894.html#comment240202
Продолжение в следующей части:
Часть VIII. APC, Memcached & Sphinx.
- Часть I. Введение, хостинг и PuTTY.
- Часть II. Vim, файловая система, hostname.
- Часть III. Некоторые настройки ядра, репозитории и базовые утилиты.
- Часть IV. MySQL.
- Часть V. Apache.
- Часть VI. PHP.
Общие замечания:
- Для продвинутых: рекомендуется не ставить nginx из бинарников, а пересобрать его из исходного кода только с нужными модулями. В бинарной сборке «по умолчанию», действительно, очень много для LiveStreet лишнего. Однако, я не считаю это простой задачей и поэтому описывать не буду. Кроме того, хотя эта идея, без сомнений, хорошая, драматического эффекта она не даст.
- Частично конфигурация снова взята из поста господина xyz
- Обращаю особое внимание на использование специального раздела для временных файлов, который, следуя советам господина Orhideous , мы создали во второй части
Ставим:
apt-get install nginx
Общий конфигурационный файл /etc/nginx/nginx.conf делаем таким:
user www-data; worker_processes 4; pid /var/run/nginx.pid; timer_resolution 100ms; worker_rlimit_nofile 8192; worker_priority -5; error_log /var/log/nginx/error.log; events { worker_connections 1024; # multi_accept on; } http { ## # Basic Settings ## client_body_temp_path /var/spool/nginx/client_temp 1 2; proxy_temp_path /var/spool/nginx/proxy_temp 1 2; charset utf-8; autoindex off; sendfile on; # tcp_nopush on; # tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; reset_timedout_connection on; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## ## Log Format log_format main '$remote_addr $host $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $ssl_cipher $request_time'; access_log /var/log/nginx/access.log main buffer=32k; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/css application/x-javascript application/xml application/xml+rss application/rss+xml text/javascript; ## # Virtual Host Configs ## # Default by nginx guideline client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; client_max_body_size 100m; client_body_buffer_size 128k; # Hash Table server_names_hash_bucket_size 64; # Proxy proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; server { listen 80 default_server; return 444; } include /etc/nginx/sites-enabled/*; }
- В случае VPS, настоятельно рекомендую уменьшить количество worker_processes. 4, imho, в этом случае много. Можно даже поставить 1.
- мелкое замечание — LiveStreet использует не совсем стандартный MIME для RSS: application/rss+xml, поэтому gzip_types им расширен.
Создаем каталоги для конфигураций сайтов, по аналогии с Apache (мне это кажется удобным стилем):
mkdir /etc/nginx/sites-available mkdir /etc/nginx/sites-enabled
Сoздаём .htpasswd. Такие файлы изначально придуманы для Apache-а, содержат хэшированные аккаунты для доступа к ресурсу. Используется, в частности, для закрытия доступа к сайту (или какой-то его части) с помощью HTTP Auth. nginx тоже умеет с этим работать, и именно таким образом мы закроем доступ к паре «административных» страниц которые нам понадобятся в будущем. Создается просто:
htpasswd -bc /etc/nginx/sites-enabled/.htpasswd USERNAME PASSWORDЭта команда сразу создаст нужный нам файл .htpasswd в нужном месте.
Создаём конфигурационный файл для нашего сайта /etc/nginx/sites-available/superls.ru:
server { listen 80; server_name www.superls.ru; return 301 $scheme://superls.ru$request_uri; } server { listen 80; server_name superls.ru; access_log /var/www/superls.ru/logs/nginx.access.log; error_log /var/www/superls.ru/logs/nginx.error.log; root /var/www/superls.ru/public/; # Static Contents location ~* ^.+.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires 1y; } # CSS and JS location ~* ^.+.(css|js)$ { access_log off; log_not_found off; } # this will prevent files like .htaccess .htpassword .secret etc from being served # You can remove the log directives if you wish to # log any attempts at a client trying to access a hidden file location ~ /\. { deny all; access_log off; log_not_found off; } location ~ \.(tpl|log)$ {deny all; access_log off; log_not_found off; } location = /apc.php { auth_basic "Super LS"; auth_basic_user_file /etc/nginx/sites-enabled/.htpasswd; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location = /memcache.php { auth_basic "Super LS"; auth_basic_user_file /etc/nginx/sites-enabled/.htpasswd; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } # Dydamic Content forward to Apache location / { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } }
В самом начале обеспечивается HTTP 301 с домена с WWW на домен без WWW. Если оно не надо — просто удалить весь первый блок «server».
«Активируем» сайт:
ln -s /etc/nginx/sites-available/superls.ru /etc/nginx/sites-enabled/superls.ru
Ре-стартуем:
/etc/init.d/nginx restart
Нужно протестировать. Предполагается, что доменное имя уже публично видно. Просто вызываем наш сайт из браузера:
http://superls.ru/info.php
Теперь нужно протестировать правильно ли работает mod-rpaf (модуль апача который обеспечивает сохранение оригинального клинского IP при проксировании). Для этого создаем простенький файл /var/www/superls.ru/public/ip.php следующего содержания:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
Вызываем:
http://superls.ru/ip.phpи смотрим на IP. Если там НЕ 127.0.0.1, то всё в порядке.
Вдогонку: обращаю внимание на очень полезную ветку комментариев: livestreet.ru/blog/dev_documentation/14894.html#comment240202
Продолжение в следующей части:
Часть VIII. APC, Memcached & Sphinx.
61 комментарий
Такс. А что с дефолт сервером будем делать? Ок, будем как и положено думать, что это у нас первый виртуал хост, который будет активирован.
Придёт к нам запрос на айпишку, или на значение заголовка Host, которое не определёно не в одном сервере директивой server_name. Что будем делать? Отправим юзера на этот самый наш виртуалхост с LS? А апач это одобрит или энжиниксу придётся отдать ответ какой нить 502?
Там правда рекомендуют возвращать 444, но я принципиально стараюсь поступать более дружелюбно, ставлю страничку заглушку с надписью «Сайт не найден или заблокирован».
И ещё, рекомендуется в принципе reset_timedout_connection on, и настройка модулей limit_reg, limit_conn, иначе пачка апача с fpm скажет нам привет как нибудь багодаря студенту, которому скучно.
чтобы добавлять конечный слеш для всех страниц в URL которых нет точки и нет конечного слеша — убирает возможные дубли. Но это дело вкуса.
чтобы ajax POST запросы не редиректились.
зы. В 7-ом дебиане fpm ожидается в официальных репозиториях.
Поставил, пропали все картинки
Архив с конфигом энжиникса и самими страничками.
Раскидать всё так, как лежит в архиве. Странички ошибок в /usr/share/nginx/error_pages
Конфиг определяющий что отдавать в /etc/nginx/conf.d/error_pages.conf.
В каждый server существующий добавить
Пример странички 404.
mmozg.net/engine/ Это мне напоминает уже дефолтный ответ апача. Не так-ли?
Как это настроить?
То, что я привёл, щас — это конфиг для апача.
Апач сам должен будет от туда заинклюдить, если в /etc/apache2/apache2.conf ничего не меняли.
Все папки и файлы на нужных местах, но эффекта нет (
Само собой перезапускал
И у nginx и у apache директива работает отталкиваясь от document-root. Так что ничего больше и не надо пробивать. Более того так даже Imho правильнее потому что можно придать этим страницам специфический дизайн соответствующий именно этому сайту. И иметь уникальный набор таких страниц для каждого сайта на сервере.
На сайтах конторы где работаю, там тоже, все странички ошибок имеют просто дизайн приближённый к дизайну основного сайта компании.
Вообще, мой вам совет, не читайте советских газет до обеда.
Это всё даст очень сильное ложное чувство защищённости.
Второй выдавал PHP: time load modules: 0,33 full time: 1,5
Сначала я думал, что какой то плагин (плагины) на втором сайте влияют на показатели. Сделал плагины один в один с первым — результаты не изменились. Потом полез в конфиг nginx — оказывается для первого домена была такая запись
Для второго было так:
Сделал все как в первом — показатели выровнялись. Более глубоко не копал, но может быть кому то будет полезно. Также интересует какой здесь оптимальный список расширений должен быть.
Не ругайте сильно), просто пытаюсь разобраться и понять
mod-fastcgi нужен чтобы подключить php-fpm используя опцию FastCGIExternalServer
почитайте внимательно предыдущую часть.
include /etc/nginx/sites-enabled/*;
А конфиг для виртуального хоста создаем почему то в /etc/nginx/sites-available/superls.ru:
Автор поясни пожалуйста где создавать конфиги для всех сайтов… а то я уже не могу портянку для кучи сайтов нормально редактировать:)
ln -s /etc/nginx/sites-available/superls.ru /etc/nginx/sites-enabled/superls.ru