LINUX.ORG.RU
ФорумAdmin

WooCommerce + nginx +php-fpm

 , , , ,


0

1

Намучались с настройкой данной связки.

Проблема в том,что при использовании сабжа, тема The7 при импорте xml-данных в магазин бекенд падает с ошибкой

upstream timed out (110: Connection timed out) while reading response header from upstream, client
Сама ошибка «стандартная», вроде бы нужно просто-напросто увеличить fastcgi_read_timeout ну и, может, еще парочку других. Но сколько я подобные параметры не крутил, все без толку. На «голом» Апаче эта хрень работает нормально.

Что можете подсказать?

★★★★★

Может взять что-то другое, не смотря, на то что WP можно превратить в статику, это все равно не очень хороший вариант для веб-магазина.

anonymous_sama ★★★★★ ()

Там скорее всего баг где-то в коде поглубже, надо читать логи и всё такое.

anonymous ()
Ответ на: комментарий от anonymous_sama

То, что вукомерц тормозное говнище, это я в курсе. Просто тут выбора нет.

Twissel ★★★★★ ()

На «голом» Апаче эта хрень работает нормально

Ты на одинаковых данных проверял? А то может ты на апаче суешь тестовый xml с 3 товарами, а в nginx пухлый список из 100500 наименований.

просто-напросто увеличить fastcgi_read_timeout

А сейчас какое значение?

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1 )
Ответ на: комментарий от anonymous

ок, спасибо. Да я уже и без вимдифа посмотрел, что на том сайте, где php-fpm на бекенде выставил все таймауты пределы по памяти и размеры загружаемых файлов в два раза больше, чем на той площадке, где все крутиться на Апаче. В крайнем случае просто попробуем заменить php-fpm на Апач. Или тут пусть расскажут как индейца научить шустро отдавать статику.

Twissel ★★★★★ ()
Ответ на: комментарий от Twissel

Скорей всего у тебя просто проблема с отсутствием rewrite какого-нибудь, а на apache c htaccess работает. Естественно ты предоставил стишком мало информации, чтобы тебе можно было помочь. Я бы конечно тебе посоветовал, разобраться с проблемой, и использовать nginx. Конечно в крайнем случае ты можешь заменить apache на openlitespeed, если не осилишь исправить работу с nginx.

anonymous_sama ★★★★★ ()
Ответ на: комментарий от anonymous_sama

а на apache c htaccess работает.

Ну тогда это просто, глянуть в .htaccess и все дела. Хотя в конфиге для WP с ГитХаба fastcgi_read_timeout установлен в 14400 :-D на всякий случай

https://github.com/perusio/wordpress-nginx

Twissel ★★★★★ ()
Последнее исправление: Twissel (всего исправлений: 1 )
Ответ на: комментарий от anonymous_sama

Да. Не угадал. В этот конфиг не использует .htaccess вообще в дефолтной поставке сайт+тема.

Twissel ★★★★★ ()

До ошибки запрос висит столько сколько заданно в fastcgi_read_timeout или вываливается раньше? Что задано в fastcgi_read_timeout? Вообще-то импорт может работать очень долго (много данных, тормозное железо, кривой софт).

MrClon ★★★★★ ()
Ответ на: комментарий от Twissel

Или тут пусть расскажут как индейца научить шустро отдавать статику.

Традиционную схему nginx+apache вроде никто не запрещал

MrClon ★★★★★ ()
Ответ на: комментарий от int13h
strace -f $(pidof php-fpm7.0 | sed 's/\([0-9]*\)/\-p \1/g') -o /home/user/php-fpm

Пойдет?

Twissel ★★★★★ ()
Ответ на: комментарий от Twissel

Если вываливается раньше назначенного таймаута значит таймаут не назначился. php-fpm не может заставить nginx дропнуть запрос по таймауту иначе как дождавшись этого таймаута (во всяком случае было-бы странно если-бы мог).
Показывай конфиг nginx.

MrClon ★★★★★ ()
Ответ на: комментарий от int13h

Висит на таком

29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\7\0\0\1\0\1\0\2\0\0\0", 22962, MSG_DONTWAIT, NULL, NULL) = 11
29000 sendto(6, "1\0\0\0\3SELECT * FROM wp_postmeta W"..., 53, MSG_DONTWAIT, NULL, 0) = 53
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\1\0\0\1\4B\0\0\2\3def\10admin_lp\vwp_postme"..., 22951, MSG_DONTWAIT, NULL, NULL) = 371
29000 sendto(6, "3\0\0\0\3DELETE FROM `wp_postmeta` W"..., 55, MSG_DONTWAIT, NULL, 0) = 55
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\7\0\0\1\0\1\0\2\0\0\0", 22580, MSG_DONTWAIT, NULL, NULL) = 11
29000 sendto(6, "1\0\0\0\3SELECT * FROM wp_postmeta W"..., 53, MSG_DONTWAIT, NULL, 0) = 53
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\1\0\0\1\4B\0\0\2\3def\10admin_lp\vwp_postme"..., 22569, MSG_DONTWAIT, NULL, NULL) = 371
29000 sendto(6, "3\0\0\0\3DELETE FROM `wp_postmeta` W"..., 55, MSG_DONTWAIT, NULL, 0) = 55
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\7\0\0\1\0\1\0\2\0\0\0", 22198, MSG_DONTWAIT, NULL, NULL) = 11
29000 sendto(6, "1\0\0\0\3SELECT * FROM wp_postmeta W"..., 53, MSG_DONTWAIT, NULL, 0) = 53
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\1\0\0\1\4B\0\0\2\3def\10admin_lp\vwp_postme"..., 22187, MSG_DONTWAIT, NULL, NULL) = 372
29000 sendto(6, "3\0\0\0\3DELETE FROM `wp_postmeta` W"..., 55, MSG_DONTWAIT, NULL, 0) = 55
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\7\0\0\1\0\1\0\2\0\0\0", 21815, MSG_DONTWAIT, NULL, NULL) = 11
29000 sendto(6, "1\0\0\0\3SELECT * FROM wp_postmeta W"..., 53, MSG_DONTWAIT, NULL, 0) = 53
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\1\0\0\1\4B\0\0\2\3def\10admin_lp\vwp_postme"..., 21804, MSG_DONTWAIT, NULL, NULL) = 364
29000 sendto(6, "3\0\0\0\3DELETE FROM `wp_postmeta` W"..., 55, MSG_DONTWAIT, NULL, 0) = 55
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\7\0\0\1\0\1\0\2\0\0\0", 21440, MSG_DONTWAIT, NULL, NULL) = 11
29000 sendto(6, "1\0\0\0\3SELECT * FROM wp_postmeta W"..., 53, MSG_DONTWAIT, NULL, 0) = 53
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\1\0\0\1\4B\0\0\2\3def\10admin_lp\vwp_postme"..., 21429, MSG_DONTWAIT, NULL, NULL) = 359
29000 sendto(6, "3\0\0\0\3DELETE FROM `wp_postmeta` W"..., 55, MSG_DONTWAIT, NULL, 0) = 55
29000 poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 1471228928) = 1 ([{fd=6, revents=POLLIN}])
29000 recvfrom(6, "\7\0\0\1\0\1\0\2\0\0\0", 21070, MSG_DONTWAIT, NULL, NULL) = 11
29000 sendto(6, "1\0\0\0\3SELECT * FROM wp_postmeta W"..., 53, MSG_DONTWAIT, NULL, 0) = 53

...точнее таки дергает БД, похоже...

Twissel ★★★★★ ()
Последнее исправление: Twissel (всего исправлений: 1 )
Ответ на: комментарий от MrClon

Пока не нужно, супер-таймаут помог. Теперь буду его уменьшать.

Короче, где-то наркоманский код, очень похоже.

Twissel ★★★★★ ()

Логи апстрима смотри сперва, в нжинксе 60 секунд идёт из коробки, если этого не хватает — значит у кого-то руки из особой жопы зада растут.

Goury ★★★★★ ()
Ответ на: комментарий от Goury

Логи апстрима

Уже не соображаю, ткни носом :-)

значит у кого-то руки из особой жопы зада растут.

Очевидно, что у разработчиков тем для WC-WP.

Twissel ★★★★★ ()
Ответ на: комментарий от Twissel

upstream timed out (110: Connection timed out) while reading response header from upstream, client

Открываешь конфиг того, кто вернул эту ошибку, смотришь куда оно там лезло, там и ищешь логи.
В твоём случае это, вестимо, php-fpm.

у разработчиков тем для WC-WP

Наверняка.
Я пока не видел ни одного пряморукого пыхера.
Я и сам, пока не начал слезать с этой дряни, былинный говнокод плодил.

Goury ★★★★★ ()
Ответ на: комментарий от Twissel

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

Goury ★★★★★ ()

Конфиг для желающих

# Server globals
user                    www-data;
worker_processes        auto;
worker_rlimit_nofile    65535;
error_log               /var/log/nginx/error.log crit;
pid                     /var/run/nginx.pid;


# Worker config
events {
        worker_connections  4096;
        use                 epoll;
        multi_accept        on;
}


http {
    # Main settings
    sendfile                        on;
    tcp_nopush                      on;
    tcp_nodelay                     on;
    client_header_timeout           1m;
    client_body_timeout             1m;
    client_header_buffer_size       2k;
    client_body_buffer_size         256k;
    client_max_body_size            256m;
    large_client_header_buffers     4   8k;
    send_timeout                    180;
    keepalive_timeout               120 120;
    reset_timedout_connection       on;
    server_tokens                   off;
    server_name_in_redirect         off;
    server_names_hash_max_size      512;
    server_names_hash_bucket_size   512;
    fastcgi_read_timeout            600s;

    # Log format
    log_format  main    '$remote_addr - $remote_user [$time_local] $request '
                        '"$status" $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
    log_format  bytes   '$body_bytes_sent';
    #access_log          /var/log/nginx/access.log main;
    access_log off;


    # Mime settings
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;


    # Compression
    gzip                on;
    gzip_comp_level     9;
    gzip_min_length     512;
    gzip_buffers        8 64k;
    gzip_types          text/plain text/css text/javascript text/js text/xml application/json application/javascript application/x-javascript application/xml application/xml+rss application/x-font-ttf image/svg+xml font/opentype;
    gzip_proxied        any;
    gzip_disable        "MSIE [1-6]\.";

    # Proxy settings
    proxy_redirect      off;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version	1.1;
    proxy_set_header	Connection "";
    proxy_pass_header   Set-Cookie;
    proxy_connect_timeout   180s;
    proxy_send_timeout  180s;
    proxy_read_timeout  180s;
    proxy_buffers       32 4k;


    # Cloudflare https://www.cloudflare.com/ips
    set_real_ip_from   199.27.128.0/21;
    set_real_ip_from   173.245.48.0/20;
    set_real_ip_from   103.21.244.0/22;
    set_real_ip_from   103.22.200.0/22;
    set_real_ip_from   103.31.4.0/22;
    set_real_ip_from   141.101.64.0/18;
    set_real_ip_from   108.162.192.0/18;
    set_real_ip_from   190.93.240.0/20;
    set_real_ip_from   188.114.96.0/20;  
    set_real_ip_from   197.234.240.0/22;
    set_real_ip_from   198.41.128.0/17;
    set_real_ip_from   162.158.0.0/15;
    set_real_ip_from   104.16.0.0/12;
    set_real_ip_from   172.64.0.0/13;
    #set_real_ip_from   2400:cb00::/32;
    #set_real_ip_from   2606:4700::/32;
    #set_real_ip_from   2803:f800::/32;
    #set_real_ip_from   2405:b500::/32;
    #set_real_ip_from   2405:8100::/32;
    real_ip_header     CF-Connecting-IP;


    # SSL PCI Compliance
    ssl_session_cache   shared:SSL:10m;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers        "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";


    # Error pages
    error_page          403          /error/403.html;
    error_page          404          /error/404.html;
    error_page          502 503 504  /error/50x.html;


    # Cache settings
    proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m max_size=1024m;
    proxy_cache_key "$host$request_uri $cookie_user";
    proxy_temp_path  /var/cache/nginx/temp;
    proxy_ignore_headers Expires Cache-Control;
    proxy_cache_use_stale error timeout invalid_header http_502;
    proxy_cache_valid any 1d;


    # Cache bypass
    map $http_cookie $no_cache {
        default 0;
        ~SESS 1;
        ~wordpress_logged_in 1;
    }


    # File cache settings
    open_file_cache          max=10000 inactive=30s;
    open_file_cache_valid    60s;
    open_file_cache_min_uses 2;
    open_file_cache_errors   off;


    # Wildcard include
    include             /etc/nginx/conf.d/*.conf;
}

Сейчас таймаут установил в 90s, т.к. это безобразие, мягко говоря.

Twissel ★★★★★ ()
Ответ на: комментарий от Goury

log_level = debug не работает, все падает :-(

Хотя все, понял в чем дело.

Twissel ★★★★★ ()
Последнее исправление: Twissel (всего исправлений: 1 )
Ответ на: комментарий от MrClon

Похоже, что оно просто в контексте внутри воркера php-fpm выполняет кучу запросов к БД.

Twissel ★★★★★ ()
Ответ на: комментарий от Twissel

Может апач на более быстром железе крутится? Или там кэши мускуля прогретые? Ну или действительно что-то очень волшебное в коде импорта

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Скорее последнее. Хрен с ним, будем ставить apache и nginx.

Twissel ★★★★★ ()
Ответ на: комментарий от Goury

Да ладно, спасибо за помощь. Я и так почти сутки считай на него убил.

Тему по ссылке в ОП посте, вроде как киевская контора клепает. Скажу заказчику пусть попробует другую тему, это раз.

А эту попробуем запустить на apache+nginx, это два. Все остальное, считаю, потеря времени.

Twissel ★★★★★ ()
Ответ на: комментарий от Goury

Сам понимаешь, что если код нормально отрабатывает кучу запросов к БД внутри воркера фпм только при таймауте в 1 час (sic!), то это говорит обо всем. Точка.

Twissel ★★★★★ ()
Ответ на: комментарий от Twissel

Я понимаю что в зависимости от ситуации надо или запускать в ентерпрайзной среде или кидаться какашками в саппорт или расчехлять профайлер или слать к лесным херам этот говнокод.

А вот что там у тебя за ситуация — понятия не имею.

Goury ★★★★★ ()
Ответ на: комментарий от Twissel

Нет, одна из причин моего ухода от пыхи — профайлить его можно только через жопу и очень неаккуратно.
Это было давно, а как там сейчас — вообще не знаю.

Goury ★★★★★ ()

Хотя может зря я ругаюсь. Дал побольше ресурсов мускулю, посмотрим, завтра потестим. Может будет быстрее ворочаться.

Twissel ★★★★★ ()
Ответ на: комментарий от int13h

На правах бреда

А возможно ли «победить» эту ошибку увеличив количество воркеров php-fpm?

Т.е. опять сделать pm = dynamic

Twissel ★★★★★ ()
Ответ на: комментарий от Twissel

Или тут пусть расскажут как индейца научить шустро отдавать статику.

использовать версию индейца — нормальную, а не старое говно из каменного века..

и движёк там в нём использовать event [идёт пумолчанию в современных версиях.. разумеется это не совместимо с mod_php (требует prefork). но не страшно так как запуск php через mod_php — это уже устарело давно]

user_id_68054 ★★★★★ ()
Последнее исправление: user_id_68054 (всего исправлений: 3 )
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.