Re: nginx и смена симлинков
Здравствуйте! В письме от вторник, 28 ноября 2017 г. 21:34:02 MSK пользователь Илья Шипицин написал: > > сделайте тут проксирование на апстрим (в котором перечислены несколько > бекендов) > fastcgi_connect_timeout сделайте минимальным > > > достаточно будет запустить тот или иной бекенд > > (не уверен, что с unix-сокетами получится, в крайнем случае можно на tcp > проксировать) > Мне в итоге помог предложенный чуть ранее и дополненный тут: https:// stackoverflow.com/questions/23737627/php-opcache-reset-symlink-style-deployment/ 23904770#23904770 совет сделать fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; Меня теперь волнует не выполняет ли nginx тот самый "тяжелый" (как описано, например, https://habrahabr.ru/post/266909/) realpath при использовании $realpath_root. По непосредственно вашему способу вопрос только один, учитывая исторически багнутый reload в php-fpm не понятно как запускать\останавливать один пул php, не трогая другие. С уважением, Иван. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx и смена симлинков
Приветствую. 1) Закомментируйте в файле fastcgi_params параметр SCRIPT_FILENAME , если еще не сделали этого 2) fastcgi_param SCRIPT_FILENAME $document_root/index.php; замените $document_root на $realpath_root fastcgi_param SCRIPT_FILENAME $realpath_root/index.php; Почитать про переменную можно тут http://nginx.org/ru/docs/http/ngx_http_core_module.html И как выше советовали почитайте про php realpath cache чтобы было понимание. 3) > # /var/www/html указывает на /var/www/stable , переключаемся на current >rm /var/www/html; ln -s /var/www/current/ /var/www/html Я бы переделал чуть по другому. ln -s path_to_latest_release /var/www/html_tmp mv -Tf /var/www/html_tmp /var/www/html 28 ноября 2017 г., 20:34 пользователь Илья Шипициннаписал: > > > 28 ноября 2017 г., 20:52 пользователь Иван > написал: > >> Здравствуйте! >> >> >> >> nginx 1.12.2, debian 8, php-fpm (5.6) >> >> # nginx -V >> nginx version: nginx/1.12.2 >> built by gcc 4.9.2 (Debian 4.9.2-10) >> built with OpenSSL 1.0.1t 3 May 2016 >> TLS SNI support enabled >> configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx >> --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf >> --error-log-path=/va >> r/log/nginx/error.log --http-log-path=/var/log/nginx/access.log >> --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock >> --http-client-body-temp-path=/var/c >> ache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp >> --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp >> --http-uwsgi-temp-path=/var/cach >> e/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp >> --user=nginx --group=nginx --with-compat --with-file-aio --with-threads >> --with-http_addition_ >> module --with-http_auth_request_module --with-http_dav_module >> --with-http_flv_module --with-http_gunzip_module >> --with-http_gzip_static_module --with-http_mp4_mod >> ule --with-http_random_index_module --with-http_realip_module >> --with-http_secure_link_module --with-http_slice_module >> --with-http_ssl_module --with-http_stub_sta >> tus_module --with-http_sub_module --with-http_v2_module --with-mail >> --with-mail_ssl_module --with-stream --with-stream_realip_module >> --with-stream_ssl_module --w >> ith-stream_ssl_preread_module --with-cc-opt='-g -O2 >> -fstack-protector-strong -Wformat -Werror=format-security >> -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,- >> z,relro -Wl,-z,now -Wl,--as-needed -pie' >> >> >> >> Есть самописное приложение на php. У него есть две версии: stable и >> current. Для быстрой смены используется следующая схема: >> >> /var/www/stable/ - тут лежит stable >> >> /var/www/current/ - тут лежит current >> >> /var/www/html - симлинк на на /var/www/stable или /var/www/current >> >> >> >> В nginx пыха сконфигурирована как >> >> >> >> root /var/www/html; >> >> location / { >> >> fastcgi_pass unix:/run/php-fpm.socket; >> > > сделайте тут проксирование на апстрим (в котором перечислены несколько > бекендов) > fastcgi_connect_timeout сделайте минимальным > > > >> include fastcgi_params; >> >> fastcgi_param SCRIPT_FILENAME $document_root/index.php; >> >> } >> >> >> >> Проблема в том. что при переключение stable->current (и наоборот), >> > > достаточно будет запустить тот или иной бекенд > > (не уверен, что с unix-сокетами получится, в крайнем случае можно на tcp > проксировать) > > > >> которая происходит примерно так: >> >> # /var/www/html указывает на /var/www/stable , переключаемся на current >> >> rm /var/www/html; ln -s /var/www/current/ /var/www/html >> >> >> >> до упора используются файлы из старой директории (stable в примере выше). >> Не помогает ни очистка opcache, ни рестарт пыхи. Только restart (возможно >> reload, не уверен) nginx. >> >> Хотелось бы >> >> 1) понять почему так. nginx где-то как-то кеширует куда указывает симлинк? >> >> 2) избежать этого ("троганья" nginx (в идеале и рестарта php-fpm), в >> принципе готовы поменять воркфлоу, но пока не понимаем как. >> >> >> >> С уважением, Иван. >> >> ___ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru >> > > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx и смена симлинков
28 ноября 2017 г., 20:52 пользователь Иваннаписал: > Здравствуйте! > > > > nginx 1.12.2, debian 8, php-fpm (5.6) > > # nginx -V > nginx version: nginx/1.12.2 > built by gcc 4.9.2 (Debian 4.9.2-10) > built with OpenSSL 1.0.1t 3 May 2016 > TLS SNI support enabled > configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx > --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf > --error-log-path=/va > r/log/nginx/error.log --http-log-path=/var/log/nginx/access.log > --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock > --http-client-body-temp-path=/var/c > ache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp > --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp > --http-uwsgi-temp-path=/var/cach > e/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp > --user=nginx --group=nginx --with-compat --with-file-aio --with-threads > --with-http_addition_ > module --with-http_auth_request_module --with-http_dav_module > --with-http_flv_module --with-http_gunzip_module > --with-http_gzip_static_module --with-http_mp4_mod > ule --with-http_random_index_module --with-http_realip_module > --with-http_secure_link_module --with-http_slice_module > --with-http_ssl_module --with-http_stub_sta > tus_module --with-http_sub_module --with-http_v2_module --with-mail > --with-mail_ssl_module --with-stream --with-stream_realip_module > --with-stream_ssl_module --w > ith-stream_ssl_preread_module --with-cc-opt='-g -O2 > -fstack-protector-strong -Wformat -Werror=format-security > -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,- > z,relro -Wl,-z,now -Wl,--as-needed -pie' > > > > Есть самописное приложение на php. У него есть две версии: stable и > current. Для быстрой смены используется следующая схема: > > /var/www/stable/ - тут лежит stable > > /var/www/current/ - тут лежит current > > /var/www/html - симлинк на на /var/www/stable или /var/www/current > > > > В nginx пыха сконфигурирована как > > > > root /var/www/html; > > location / { > > fastcgi_pass unix:/run/php-fpm.socket; > сделайте тут проксирование на апстрим (в котором перечислены несколько бекендов) fastcgi_connect_timeout сделайте минимальным > include fastcgi_params; > > fastcgi_param SCRIPT_FILENAME $document_root/index.php; > > } > > > > Проблема в том. что при переключение stable->current (и наоборот), > достаточно будет запустить тот или иной бекенд (не уверен, что с unix-сокетами получится, в крайнем случае можно на tcp проксировать) > которая происходит примерно так: > > # /var/www/html указывает на /var/www/stable , переключаемся на current > > rm /var/www/html; ln -s /var/www/current/ /var/www/html > > > > до упора используются файлы из старой директории (stable в примере выше). > Не помогает ни очистка opcache, ни рестарт пыхи. Только restart (возможно > reload, не уверен) nginx. > > Хотелось бы > > 1) понять почему так. nginx где-то как-то кеширует куда указывает симлинк? > > 2) избежать этого ("троганья" nginx (в идеале и рестарта php-fpm), в > принципе готовы поменять воркфлоу, но пока не понимаем как. > > > > С уважением, Иван. > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx и смена симлинков
28 ноября 2017 г., 18:52 пользователь Иваннаписал: > Здравствуйте! > > > > nginx 1.12.2, debian 8, php-fpm (5.6) > > > /var/www/html - симлинк на на /var/www/stable или /var/www/current > > > ... > Хотелось бы > > 1) понять почему так. nginx где-то как-то кеширует куда указывает симлинк? > > 2) избежать этого ("троганья" nginx (в идеале и рестарта php-fpm), в > принципе готовы поменять воркфлоу, но пока не понимаем как. > > Nginx тут не причем. Смотрите в сторону настроек вашего php-бекенда, в частности кеша realpath. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
nginx и смена симлинков
Здравствуйте! nginx 1.12.2, debian 8, php-fpm (5.6) *# *nginx -V Есть самописное приложение на php. У него есть две версии: stable и current. Для быстрой смены используется следующая схема: /var/www/stable/ - тут лежит stable /var/www/current/ - тут лежит current /var/www/html - симлинк на на /var/www/stable или /var/www/current В nginx пыха сконфигурирована как root /var/www/html; location / { fastcgi_pass unix:/run/php-fpm.socket; includefastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/index.php; } Проблема в том. что при переключение stable->current (и наоборот), которая происходит примерно так: # /var/www/html указывает на /var/www/stable , переключаемся на current rm /var/www/html; ln -s /var/www/current/ /var/www/html до упора используются файлы из старой директории (stable в примере выше). Не помогает ни очистка opcache, ни рестарт пыхи. Только restart (возможно reload, не уверен) nginx. Хотелось бы 1) понять почему так. nginx где-то как-то кеширует куда указывает симлинк? 2) избежать этого ("троганья" nginx (в идеале и рестарта php-fpm), в принципе готовы поменять воркфлоу, но пока не понимаем как. С уважением, Иван. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru