User Tools

Site Tools


ru:nginx

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ru:nginx [2014/01/29 18:19]
127.0.0.1 external edit
ru:nginx [2018/09/04 13:08] (current)
admin [Ошибка 2]
Line 1: Line 1:
 +====== Nginx ======
 +
 +Nginx - это HTTP-сервер, обычно более быстрый чем Apache. Его особенность в том, как он обрабатывает запросы и отсутствии каких-либо тяжелых "довесок". Обычно nginx используеют на доменах\серверах, с которых идет раздача статики.
 +
 +Сейчас становится все более распространенной схема front\back - nginx\Apache.
 +
 +Смысл этой связки в том, что все входящие конекты принимает nginx (базово более быстрый) и раздает статику, а все запросы к скриптам nginx форвардит апачу. Это заметно ускоряет работу, если у вас и скрипты и контент раздаются с одного и того же сервака.
 +
 +===== Ошибка 1 =====
 +
 +Однако тут есть ньюанс: все трейд скрипты логят ИП адреса, а при передаче запроса от nginx к апачу последний по умолчанию видит один и тот же ИП - 127.0.0.1, тк запрос приходит от nginx, который фактически работает на том же серваке.
 +
 +Другой вариант настройки: апач видит все запросы от ИП сервера (а не реального ИП юзера), и соответственно все запросы скрипт будет видить от одного и того же ИП, из-за чего может сработать защита по ип (все хиты с одного ИП и их перестанет учитывать). Обычно этот вариант можно распознать когда скрипт видит что ИП сервака и ваш ИП совпадают. В home при этом будет надпись "Nginx <-> Apache ERROR $_SERVER[SERVER_ADDR] == $_SERVER[REMOTE_ADDR], please, contact admin.". Надо отписать админу и показать эту страницу.
 +
 +Что бы восстановить нормальную ситуацию и дать трейдскрипту работать надо попросить ваш суппорт поставить для apache модуль mod_realip, а в конфиге nginx прописать, что бы он писал настоящий ИП в X_REAL_IP.
 +
 +Итого: если открыть /scj/admin/test.php то в поле REMOTE_ADDR должен быть Ваш ИП, а не ИП сервака или 127.0.0.1 
 +
 +===== Ошибка 2 =====
 +
 +Другая распространенная ошибка в том, что ИП серфера передается не только в REAL_IP, но еще в и HTTP_FORWARED_FOR.
 +
 +Определить это так же просто - если открыть /scj/admin/test.php то в поле HTTP_FORWARED_FOR увидите свой ИП.
 +
 +Смарт определяет прокси в том числе по полю HTTP_FORWARED_FOR и ему начинается казаться что все хиты идут через прокси.
 +
 +Как пофиксить: отписать админу, что б ИП передавался только в REAL_IP. Проверить, что пофикшено: если открыть /scj/admin/test.php то поля HTTP_FORWARED_FOR быть не должно.
 +
 +Результат должен быть такой: REMOTE_ADDR и REAL_IP - ваш реальный ИП, SERVER_ADDR - IP сервака (и логично что ваш ип и ип сервака не совпадают), HTTP_FORWARED_FOR отсутсвует.
 +
 +
 +
 +
 +
 +Итого: если открыть /scj/admin/test.php то должно быть 
 +  * REMOTE_ADDR - ваш IP
 +  * SERVER_ADDR (SERVER_IP) - IP сервера
 +  * HTTP_FORWARDED_FOR (или HTTP_X_FORWARDED_FOR) быть не должно
 +
 +
 +
 +===== Admin password =====
 +
 +По дефолту авторизация в админку - это базовая технология апача (.htaccess), но nginx по деофлту эти файлы не читает, поэтому варианта 2
 +
 +**Вариант 1 ** 
 +
 +В админке переключаетесь на "Switch to multiaccess", админка будет спрашивать пароль, однако каталоги с backups например будут все так же доступны с веба и кто угодно может утянуть ваш бекап. Поэтому лучше вариант 2.
 +
 +**Вариант 2**
 +
 +Попросить админа прописать в nginx что-то вроде
 +
 +<code>
 +
 +location /scj/admin/files/ {
 +    deny all;
 +}
 +
 +location /scj/logs/ {
 +    deny all;
 +}
 +
 +location /scj/data/ {
 +    deny all;
 +}
 +
 +location /scj/backup/ {
 +    deny all;
 +}
 +
 +location /scj/admin/ {
 +    auth_basic "Admin Zone";
 +    auth_basic_user_file /home/user/www/$domain/scj/admin/.htpasswd;
 +}
 +
 +location ~* /scj/admin/(.*)\.php$ {
 +    index index.php;
 +    auth_basic "Admin Zone";
 +    auth_basic_user_file /home/user/www/$domain/scj/admin/.htpasswd;
 +}
 +
 +</code>
 +
 +===== Nginx password error =====
 +
 +Есть несоклько вариантов задать пароль
 +
 +  - .htaccess - это конфиг файл для апача, если вы запрашиваете любой файл из каталога где лежит .htaccess - апач сначала читает его. В дефолтном варианте админка закрыта базовой авторизацией апача - в htaccess написано грубо говоря "пароль для админки в .htpasswd"
 +  - Вариант 2 - пароль спрашивает сам скрипт scj/admin/index.php - этот вариант работает при использовании мультиавторизации. 
 +  - пароль может спрашивать nginx. Как было сказано выше он не умеет читать .htaccess но в конфиге nginx  можно указать что пароль опять же в .htpasswd (как в примере выше)
 +
 +Возможна следующая ошибка:
 +стоит авторизация в варианте 3, те nginx (например пароль1) и вы в то же время включаете авторизацию 2 - когда спрашивает пароль скрипт (условно пароль2). Но поскольку у браузера поле ввода пароля одно то туда можно ввести только 1 пароль и получается что либо одна либо другая авторизация не пройдет тк разные пароли.
 +
 +Что делать: использовать какой-то один вариант.
  
ru/nginx.txt · Last modified: 2018/09/04 13:08 by admin