Колко RAM да заделя за MySQL

cyberpower

New Member
Здравейте,

Тези дни един от сървърите взе често да забива, имах съмнения че проблема се дължи на MySQL и май от това се оказа, но още не се знае промените които направих са от тази вечер. Ще видим през деня като скочи натоварването какъв ефект ще имат.

Инсталирах си един скрипт mysqltuner и се оказа че Max Memory Limit за MySQL е два пъти повече от реалната памет на сървъра. Като се поразрових се оказа че нищо не е както трябва в конфигурацията и направих промени почти по всички настройки.

В момента my.cnf настройките изглеждат по следния начин:
table_cache=2200
table_definition_cache=2200
query_cache_size=80M
query_cache_limit=8M
sort_buffer_size=8M
read_rnd_buffer_size=8M
open_files_limit=4800
max_heap_table_size=60M
tmp_table_size=60M
read_buffer_size=2M
innodb_buffer_pool_size=250M
thread_cache_size=25
join_buffer_size=15M
key_buffer=100M
max_connections=22
max_connect_errors=10
max_user_connections=22
wait_timeout=6000
interactive_timeout=6000
max_allowed_packet=4M
myisam_sort_buffer_size=16M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
thread_concurrency=4

Apacehe-то е worker fastcgi с включени следните модули:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
LoadModule fcgid_module /usr/lib/httpd/modules/mod_fcgid.so

Сървъра е със следните параметри:
Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 4 cores
Real memory:1.63GB(Реално са 1.70GB но явно част отиват за системни ресурси и толкова ми засича total)
Virtual memory:1GB


В момента mysqltuner ми показва че Max Memory Limit за MySQL е 1.13GB. Това добре ли е или трябва да го намаля или увелича. Коментари за самите настройки също са добре дошли, че сървърите не са ми силна страна. Притеснява ме най вече max_connections дали не е малко че преди беше 50, а mysqltuner ми показваше че max е достигало до 45 и ме съветваше да го увелича, но като го увелича скача и Max Memory Limit за MySQL


Ето и някои допълнителни данни:

>>top
6527 apache 20 0 62244 26m 6932 S 18.9 1.6 0:03.12 php-cgi
6315 apache 20 0 74908 39m 7396 S 17.3 2.3 0:29.32 php-cgi
6427 apache 20 0 73104 37m 7520 S 7.0 2.2 0:25.79 php-cgi
1116 mysql 20 0 603m 421m 5024 S 3.0 25.2 3:21.91 mysqld

mysqltuner
Total buffers: 492.0M global + 33.2M per thread (22 max threads)

Като бази данни имам:
Една с големина 1.2GB на InnoDB към която са по-голяма част от заявките над 50%
Една с големина около 400MB MyISAM
И други 10-тина около 100MB пак на MyISAM
 
От: Колко RAM да заделя за MySQL

http://www.mysqlcalculator.com/ :)

Общо взето никой не може да ти каже. Зависи от приложението, зависи от трафика, хардуера, софтуера, от страшно много неща.

Просто експериментирай с различни настройки и следи сървъра. mysqltuner е добро начало. Няма кой знае какво да счупиш. Целта е да не се стига до oom (да почнат да крашват различните сервизи поради недостиг на памет) и същевременно да се използва колкото може повече рам. Защо да седи празна? Ако е отделен сървър аз по принцип го правя да използва 90-95% от паметта. Ако има и други неща като web сървър и т.н. съответно си правиш сметките. Естествено имаш едно наум и за пикове. Колкото по-голяма част от паметта се използва, толкова по-добре. Ядрото само ще освободи памет за критични неща при нужда. Но за services като Apache и Mysql трябва ти да се грижиш за настройките и се правят според случая, като се променят според трафика. За разлика от някои други като php-fpm където задаваш и забравяш (почти).
 
Последно редактирано:
От: От: Колко RAM да заделя за MySQL

http://www.mysqlcalculator.com/ - Тези неща ми ги калкулира mysqltuner.

За съжаление не е отделен сървър а е заедно с web и точно това се чудя колко да оставя за apache то.

В момента Max Memory Limit за MySQL е 1.13GB тоест в най-лошия случай ще изразходва толкова и за apacheto и linux ще останат 500MB.

Притеснява ме само max_connections вече на няколко пъти удари максимума и даже ми изведе контент мениджмънт системата съобщение че не е успяла да се свърже със mysql, а нямам толкова много конкурентни заявки.

Мисля си вече че нещо не ги затваря заявките както трябва или другото което ми идва на ум е да не би Apacehe worker fastcgi да отваря отделна връзка за всеки thread. Мисля тази вечер да го обърна на apache prefork mod_php да видим дали ще има някакъв ефект.
 
От: Колко RAM да заделя за MySQL

Линка го дадох за майтапа :D

Ами, стига да не влизаш в суапа, няма никакъв проблем рамта да е 90-95%. Рамта е за да е използва, кеш, меш каквото се сетиш.

Не си спомням за Apache как се смяташе рамта. Има формули за prefork и за worker mpm. Ако ти се занимава можеш да опиташ и с php-fpm вместо mod_php, с него ще имаш доста по-добър контрол над използваните и евентуално нужните ресурси при пик. Може също да сложиш едно Nginx прокси отпред, което да играе ролята на lb. Може и изцяло да зарежеш Apache и да преминеш на Nginx. [ 10,000 idle connections will use only 2.5 MB of memory ].

Има доста решения и неща, с които да си поиграеш :)

За заявките вече не знам, виж си логовете кое точно ги прави. Ако нещо оставя отворени заявки просто задай на сървъра да ги реже след определено време. Аз така реших един проблем наскоро с един наглец.

Код:
set-variable = interactive_timeout=3600
set-variable = wait_timeout=3600

В phpmyadmin има статистики ако нямаш някакъв мониторинг и прегледай slowlog.

Струва си да опиташ и MariaDB 5.5/MariaDB10 или поне mySQL 5.5

http://dev.mysql.com/tech-resources/articles/introduction-to-mysql-55.html

mod_php е боза, поне в default варианта.
 
От: Колко RAM да заделя за MySQL

За този swap ми препоръчаха да смъкна виртуалната памет под 100MB, че сега при мен е 1GB как мислиш дали е добра идея.

Имам ги аз формулите някъде, но проблема е по скоро че не знам как да сметна колко памет да оставя за общо всички Apache процеси. Иначе за Nginx и аз съм си мислил да го пробвам, но както споменах по-горе не съм много на ти със сървъри и т.н. знам някои основни неща и това е. Като има проблем гледам да го оправя някак за това не искам да се хвърлям с непознати технологии на продукшън сървър. Но ако всичко друго не помогне май ще се наложи.

Това с wait_timeout и interactive_timeout го пробвах вече даже с много по ниски стойности от 300, после го качих на 6000 и при двата варианта нямаше ефект. Но може би трябваше още повече да го смъкна на 10 примерно. Ако за 10 секунди не успее да извърши заявката то значи че нещо не е наред без това.

Довечера ще пробвам още няколко работи и ако не се оправи вече ще мисля за Nginx и mySQL 5.5
 
От: Колко RAM да заделя за MySQL

Някъде имам whitepaper защо е добре да е поне 1-2-гб swap, дето се вика за черни дни. Всичко може да стане, от бъг до злосторник. Ядрото също кешира различни глупости там. Чрез swappiness се контролира агресивността. Преди се говореше, че трябва да е колкото рам паметта или х2 (това за десктопи де, където ти трябва за хибернация). Не знам дали има луд да задели 100гб за swap (примерно при 60гб рам).... Аз обикновено оставям 2гб.

Ако често влизаш във виртуалната памет обаче, това е признак за проблем. Или просто трябва повече рам, достатъчно евтина е вече.

Не го сваляй на 100мб. Нищо, че дисковете са бавни, ако ще SSD-та да са. Може да са бавни, но е по-добре от колкото да гледаш OOM в dmesg и всичко да крашва, нали?

А колко трябва да заделиш за различните services ще разбереш само след като тестваш и го оставиш да върви известно време. Не го мисли толкова.

П.П. - за заявките съм пас. Не ме бива в програмирането. :D В логовете ще пише кои са проблемните.
 
Последно редактирано:
От: Колко RAM да заделя за MySQL

Ами мерси за отговорите и идеите от тук нататък остава да направя тестовете и да видя кое ще свърши работа.
 
това е впс нали (от амазон ли е заради нестандартното количество рам 1.7 гб питам не съм го срещал на много места ) заради рама предположих защото Intel® Xeon® Processor E5-2630 е 6 ядра 12 Threads http://ark.intel.com/products/64593/

първото което ми се наби на очи е max_connections=22 не че има лошо да ги държиш ниска бройка въпроса е да не са ти малко и да реже клиентите затова да дава ерори (то зависи от какво върви)
thread_concurrency= по принцип знам че вървяло само при соларис при другите дистрибуции присъства само за да пълни съдържание в конф файла и нямаш нужда от него...

кой ги е нагласял тези настроики че ми изглеждат доста нестандартни спрямо какво начално се вижда във файла на повечето рпм базираните дистрибуции и са доста раздути (в което лошо няма) стига да имаш рам...

аз по принцип като ровя в г по някоя тема първо си търся настроики който го е тествал някой друг

мога да постна някакви който открих точно за 1.7 гб сървър ... (ама не съм ги тествал лично)

иначе относно nginx за тазви вече за забвление ще си вдигна едно безплатно впсче от амазон точно с него за тестови цели :)
 
От: Колко RAM да заделя за MySQL

Сървъра е от българска фирма просто е на cloud, преди беше на 1.5 RAM но му добавих още малко да има в излишък. При cloud а поне това го има може да ги променяш в движение.

За max_connections и мен ме притесняваше и както писах по-горе наистина реже клиенти когато е малко. Но когато е много пък има вероятност да изразходва много RAM и да влезе в swap и да забие. Пробвах различно варианти за max_connections 30, 40, 50 от това което виждам през mysqltuner макс е достигало до 45. Но при горните настройки виж какво се получава за RAM-та Total buffers: 492.0M global + 33.2M per thread (22 max threads). Всяка връзка може да използва до 33.2M RAM и като сметнеш и глобалните буфери 492.0M отива на 1.13GB RAM.

Горните настройките съм ги правил аз, но ги направих точно защото с тези по default забива. Правих ги като следвах инструкции от скриптове за оптимизиране на MySQL. Не изцяло разбира се защото ако ще ги спазваш точно то трябва доста да си вдигнеш доста RAM та.

https://launchpadlibrarian.net/78745738/tuning-primer.sh
https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl

Инсталират се по стандартния начин:

wget https://launchpadlibrarian.net/78745738/tuning-primer.sh
chmod 755 tuning-primer.sh
yum install bc
./tuning-primer.sh

wget https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl
chmod 755 mysqltuner.pl
./mysqltuner.pl

Форума нещо реже част от линковете и трябва wget да сочи към пълния линк.

Вадят статистика какво ползваш в момента, съвети какво трябва да промениш и т.н. Мисля че е много по-добър вариант от това да ползваш настройките на някой друг чиято система може да няма нищо общо с твоята. Препоръча ги човек който точно с бази данни се занимава в едно видео на една конференция.


В момента върнах старите настройки и качих значително ресурсите до като не измисля решение.

За nginx май и аз няма вече на къде да отлагам и ще трябва да го по науча.
 
От: Колко RAM да заделя за MySQL

Не се ползват чужди настройки. Правиш си твои, според ситуацията. За пример ще ти дам малкият instance от Амазон, където си само с 600 рам. Дори тези скриптове да казват, че трябва да сложиш еди какво си, ти можеш да прецениш друго. Можеш например да увеличиш броя на connections, но да намалиш кеширането за да се вмъкнеш в наличната рам. Разлика в зареждането на сайта почти няма да има. За това и казах, че mysqltuner е добро начало, но само за начало.

А след като си с cloud услуга, нямаш ли on demand или burst? Т.е. имаш примерно 2гб рам, но ако потрябва повече се заделя автоматично и плащаш за това само, когато е нужно и се използва? Аз за първи път чувам за такива ограничения и oоm (out of memory) при cloud хостинг.
 
От: Колко RAM да заделя за MySQL

Ами аз точно това направих, не съм следвал съветите на скриптовете на 100%, защото ако ги следвам трябва да кача доста RAM та. А и самите скриптове май приемат че на машината имаш само MySQL сървър.

Има Auto Scalling, но изисква рестарт и после ресурсите остават с новите параметри, тоест не се връщат автоматично към старите параметри а ти сам трябва да ги върнеш и после пак да рестартираш. Лошото е че през по голяма част от деня даже сегашните ресурси са в много в повече. Проблемите обикновено възникват между 12-17 часа. И гледам да ги настроя нещата така че да се вмъкна някак в сегашните настройки така че да не се налагат рестартирания постоянно и да си играя да качвам да смъквам.

За сайтове разработвам в момента новата им версия, която ще ползва Varnish и от CMS та ще се пращат заявки за обновяване на кеша когато е необходимо, но ще бъдат готови чак след няколко месеца. За сегашния вариант на сайтовете няма такава възможност, а хората които ги обновяват не искат да има никакво забавяне в кеша. А и аз тепърва ще почна да навлизам в Varnish така че този вариант не е опция в момента.
 
От: Колко RAM да заделя за MySQL

В момента имам един сървър който ползвам за тестове ще опитам да подкарам Nginx + php-fpm и може би да сменя MySQL с нещо от предложените по-горе
 
От: Колко RAM да заделя за MySQL

Ако съм на твое място най-напред ще оптимизирам самите заявки за mysql, кода. В slowlog можеш да видиш проблемните, тези които отнемат повече време.

И после вече ще си играя да видя какво друго решение има. След като имаш тестов сървър, това което бих направил аз е да сложа Nginx отпред и чрез него да пренасочвам трафика към тестовия сървър за тестове. Може и друго прокси да е, все тая. Така няма нужда да се занимаваш с DNS.

mySQL има доста подобрения в 5.5 Ако процесора е с няколко ядра можеш да го конфигурираш да се възползва от тях. MariaDB пък има всичко от mySQL, даже enterprise функциите + още много. С Mongo не съм работил.

Ако сайта си струва инвестицията и мислите да го развивате може и да отделиш базите на отделен сървър и да сложиш web-a на по-малък (според нуждите). Така ще можете да оптимизирате сървърите според ролята им (примерно mysql да е с raid10 масив). Или пък добавете loadbalancer на mysql-a.

Знам ли, има сигурно поне 50 решения на проблема. На мен ми доставя удоволствие да ровя, на теб сигурно ще ти писне на първата седмица :D

П.П. - https://tools.percona.com/wizard
 
От: Колко RAM да заделя за MySQL

Преди 1-2 дена го изтрих slow-query.log и създадох нов файл че в стария имаше информация за много много време назад. От тогава насам обаче седи празен, името е същото, мястото е същото, има необходимите права, в my.conf е зададено същото място, slow_query_log = 1, long_query_time = 2. От тогава насам обаче седи празен или нямам бавни заявки или не ще да пише. Преди това обаче създадох и едни indexes на join-овете които правя може това да е подобрило доста нещата.

Те и самите заявки се правят повечето от CMS или са създадени от query builder-а вграден в нея. Ако почна да ги пипам ще си създам проблеми с updates. Другото което е правени са от хора много по навътре в нещата от мен така че може и да се влоши положението :)

Той тестовия сървър е с много малко ресурси. По скоро ще го ползвам само да тествам nginx и да видя дали всичко по сайтовете върви с него.

Ще пробвам и MariaDB по някое време.

Сайта си струва инвестицията, но както писах по-горе в момента подготвяме новата версия и като е готова тя ще мислим как точно да ги организираме нещата.

То от сега ми писна :), но поне научавам нови неща в процеса на тестове които в бъдеще ще ми бъдат много полезни.
 
Re: От: Колко RAM да заделя за MySQL

Ами аз точно това направих, не съм следвал съветите на скриптовете на 100%, защото ако ги следвам трябва да кача доста RAM та. А и самите скриптове май приемат че на машината имаш само MySQL сървър.

Има Auto Scalling, но изисква рестарт и после ресурсите остават с новите параметри, тоест не се връщат автоматично към старите параметри а ти сам трябва да ги върнеш и после пак да рестартираш. Лошото е че през по голяма част от деня даже сегашните ресурси са в много в повече. Проблемите обикновено възникват между 12-17 часа. И гледам да ги настроя нещата така че да се вмъкна някак в сегашните настройки така че да не се налагат рестартирания постоянно и да си играя да качвам да смъквам.

За сайтове разработвам в момента новата им версия, която ще ползва Varnish и от CMS та ще се пращат заявки за обновяване на кеша когато е необходимо, но ще бъдат готови чак след няколко месеца. За сегашния вариант на сайтовете няма такава възможност, а хората които ги обновяват не искат да има никакво забавяне в кеша. А и аз тепърва ще почна да навлизам в Varnish така че този вариант не е опция в момента.

по принцип от клауд до клауд има разлик и някой са замислени точно с опция за вертикален скалинг нагоре и надолу без да рестртираш като On App базираните клаудоеве

като има лимита е на самия нод
http://www.webhostingtalk.com/showthread.php?t=1046865

1) Scale UP
Basically adds resources to the single as needed. OnApp keeps a tally of the usage and ensures your clients are charged for the extra resourced utilised during scaling. Scaling is typically without reboots (windows does not like this).

2) Scale OUT
When scaling out is enabled OnApp will keep an eye on your VM and grow it as much as possible within the confinement of a single physical server. And then add another physical server based on a clone of the first one or a defined template. OnApp's integrated Loadbalancer will take care of the distribution of traffic.


http://onapp.com/cloud/features/cloud-vm-management/

Resize without reboot: where a VM's OS supports it, you can resize VMs without taking them offline
 
Последно редактирано от модератор:
Re: От: Колко RAM да заделя за MySQL

Не се ползват чужди настройки. Правиш си твои, според ситуацията. За пример ще ти дам малкият instance от Амазон, където си само с 600 рам. Дори тези скриптове да казват, че трябва да сложиш еди какво си, ти можеш да прецениш друго. Можеш например да увеличиш броя на connections, но да намалиш кеширането за да се вмъкнеш в наличната рам. Разлика в зареждането на сайта почти няма да има. За това и казах, че mysqltuner е добро начало, но само за начало.

А след като си с cloud услуга, нямаш ли on demand или burst? Т.е. имаш примерно 2гб рам, но ако потрябва повече се заделя автоматично и плащаш за това само, когато е нужно и се използва? Аз за първи път чувам за такива ограничения и oоm (out of memory) при cloud хостинг.

По принцп и си прав и не си напълно прав :) има хора който са правили тестова и са дали някакви данни от който да се започне (точно както ти си пишеш в блога :rolleyes: :roll: ) не съм ги дал за пример защото и аз не съм сигурен че ще са добри а и всеки си предценява та идеята ми е да тръгне от такива данни за 1.7гб съръвр и след това с mysqltuner a да си ги донагласи... защото тези настроики са отклонени от стандартното което съм виждал с много (без да се пиша голям специалист)... със сигурност не бих свалил максималните конекшъни до 22 ако е повече от един сайта който хоствам... щото при пикови посещения може да не му стигат

пп аз съм с малко над 4 гигабатита бази общо и mysql ла ми заема 870 мб рам при пиик.... и харчи около 5% цпу.... в пиковите времена (много рядко малко провече) от 4 ядра на i7 процесор.... с дефултните настоики на центоса конвертиран до клауд линукс харчеше устоичиви 15% и заемаше макс 450 или някад там не помня цифрата съвсем точно но да кажем че е била 463 например (не съм изпълнил на 100% изискванията на mysql tuner-a) ама тествам да съм консервативен...
 
От: Re: От: Колко RAM да заделя за MySQL

По принцп и си прав и не си напълно прав :) има хора който са правили тестова и са дали някакви данни от който да се започне (точно както ти си пишеш в блога :rolleyes: :roll: ) не съм ги дал за пример защото и аз не съм сигурен че ще са добри а и всеки си предценява та идеята ми е да тръгне от такива данни за 1.7гб съръвр и след това с mysqltuner a да си ги донагласи... защото тези настроики са отклонени от стандартното което съм виждал с много (без да се пиша голям специалист)... със сигурност не бих свалил максималните конекшъни до 22 ако е повече от един сайта който хоствам... щото при пикови посещения може да не му стигат

пп аз съм с малко над 4 гигабатита бази общо и mysql ла ми заема 870 мб рам при пиик.... и харчи около 5% цпу.... в пиковите времена (много рядко малко провече) от 4 ядра на i7 процесор.... с дефултните настоики на центоса конвертиран до клауд линукс харчеше устоичиви 15% и заемаше макс 450 или някад там не помня цифрата съвсем точно но да кажем че е била 463 например (не съм изпълнил на 100% изискванията на mysql tuner-a) ама тествам да съм консервативен...

Напротив. Именно за това не съм давал нищо за mysql, защото е според случая. Не като php-fpm където мога да задам нещо и да го забравя, защото знам горе-долу поне колко rps е максимума.

Ако на човек му трябват "примерни" конфигурационни файлове винаги може да използва тези от /usr/share/mysql Те за това са там...

ls /usr/share/mysql/ | grep .cnf

Код:
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf

Пробвай с твоят конфигурационен файл. Сложи го на коренно различен сървър: хардуер (примерно вместо raid10 с bbwc или fbwc, сложи raid5 без bbwc [battery backed write cache]) и софтуер (вместо mysql 5.5, mysql 5.0) и качи там форума. Че то само bbwc ще ти даде разлика от порядъка на 5-10 пъти. Не съм сигурен дали форума прави достатъчно i/o за да видиш голяма разлика де, но би трябвало. Аз съм си играл и за това го казвам, не е наизуст.

П.П. - поне от както махна проклетия CF вече няма 502.
 
От: Колко RAM да заделя за MySQL

Успях да подкарам nginx + php-fpm и първоначалните ми впечатления са добри. За сега успях да заредя само началната страница, но зарежда доста по-бързо.

Нещо се омотах обаче с тези виртуални сървъри успявам да заредя само началната страница и като се опитам да вляза в някоя от вътрешните ми връща грешка 404.

Настройките ми за etc/nginx/confd/virtual.conf са следните:
server {
listen 80;
server_name mydomain.com;


location / {
root /home/testserv/public_html;
index index.php index.html index.htm;
}

error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /home/testserv/public_html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Като вместо mydomain.com съм си задал моя. Като отворя домейна всичко е наред зарежда си началната страница, но като тръгна да отварям някоя от вътрешните грешка 404. page not found.
 
От: Колко RAM да заделя за MySQL

Скрипта разчита ли на htaccess?

И пробвай за php нещо такова:

location ~ \.php$ {
include fastcgi.conf;
try_files $uri =404;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
}

П.П. - като го подкараш замени tcp порта с unix socket.
 
От: Колко RAM да заделя за MySQL

Така директно ми върна грешка 404.

Ами аз качих цялата система направо на тестовия и разчита на htaccess. Nginx не чете ли htaccess файлове.

На clean url също.
 

Горе