Arm1.ru

Tag: «nginx»

Заметка про HTTPS и приложения для ВК

Однажды почуяв, что сайт может открываться по https, браузеры (по крайней мере, Firefox и Chrome) уже не хотят открывать его по https. Например, ВКонтакте. А раз сайт открывается через https, то некоторые ресурсы страницы могут всё ещё подгружаться по http, но только не Javascript-скрипты. Они блокируются и должны загружаться только по https.

Сегодня делал простенькое iframe-приложение для ВК. По сути у меня слегка оформленнся php-страница, в которую я просто ставил php-код системы бронирования и покупки билетов. Вставив в приложении в ВК адрес, обнаружил, что ВК у меня работает через HTTPS и страница моя тоже пытается по нему же загрузиться. А т.к. сервер мой https не поддерживает, пришлось настраивать.

Сертификат я получил через StartSSL бесплатно. Настроил всё, всё заработало (теперь мой бложек можно открывать и так: https://arm1.ru отключил, оставил только http пока, т.к. все комменты от Disqus и лайки соц. сетей слетели :) да и нет нужды мне в https на этом домене), алилуя, скрипт стал грузиться. Только вот PHP-код системы билетов возвращает по сути свой HTML, в котором подгружается по http разный js-код. А так как он блокируется, ничего опять не работает :) Адская, конечно, связка получается. ВК -> iframe -> мой сервер -> сервер билетов. Теперь жду, пока они у себя на сервере https настроят и по нему будут весь js-код отдавать.

Но пара полезных уроков извлечена.

  1. По возможности внешний js-код подгружать не "http://site.com/code.js", а "//site.com/code.js". // - говорит о том, чтобы использовать текущий протокол соединения. Проверка возлагается на плечи браузера и не нужно самому в коде проверять протокол.
  2. Экспириенс по поднятию и настройке https на своём сервере. 2 инструкции, чтобы не потерялись:
    1. Получаем бесплатный SSL сертификат (через StartSSL).
    2. Настраиваем HTTPS-сервер на nginx.

Теперь главное не забыть, что через год SSL сертификат надо будет продлить.

comment comments

Шпаргалка при настройке nginx+php-fpm из homebrew

Если после настройки nginx и php-fpm для работы через php5-fpm.sock выдаётся ошибка у Nginx: 502 bad gateaway и в логе пишется что-то вроде:

*20 connect() to unix:/usr/local/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream

То проблема с правами решается:

cd /usr/local/var/run
sudo chmod 666 php5-fpm.sock

Если это помогло, но в /usr/local/etc/php/5.5/php-fpm.conf надо раскоментить строчку:

listen.mode = 0666

comment comments

Ошибка Nginx Too many open files

Про ускорение. Пара полезностей.

Как известно, у браузеров ограничено число одновременных соединений на домен во время загрузки сайта. Таким образом элементы сайта грузятся последовательно. Каждая картинка/js/css-файл - отдельное соединение. Если таких элементов много на страницах сайта - то ускорить его загрузку можно, если вынести статику на поддомены. Например s1.domain.com, s2.domain.com и т.д. Таким образом, если в браузере у нас, скажем, лимит на 5 соединений на каждый домен - то теперь у нас будет по 5 соединений на каждый поддомен. Если грамотно всё раскидать, то теоретически скорость загрузки может вырости чуть ли не в 5 раз. 

Обратная сторона. Количество одновременных соединений с сервером также растёт. При той же посещаемости сайта - число соединений растёт примерно в 5 раз (при наличии 5 поддоменов). Если фронт-ендом стоит Nginx - то у него есть ограничение на число соединений в конфиге. А, поскольку соединений теперь в 5 раз больше, то и работы ему приходится одновременно проделывать больше, чем ранее. Таким образом с нашим ускорением мы также и приближаем Nginx к ограничению одновременных соединений, в результате у пользователя может не открываться сайт или какие-то файлы просто не отдаваться во время загрузки. 

В логах Nginx будет ошибка:

"...socket() failed (24: Too many open files) while connecting to upstream..."
Посмотреть текущее ограничение из консоли: 
ulimit -n
Посмотреть красиво в виде:
nginx: worker process
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 1048576              files
Currently open files: 945

nginx: master process /usr/sbin/nginx
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 1048576              files 

можно, выполнив в консоли:
for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done 

Изменить ограничение:

  • в /etc/security/limits.conf добавить строки:
    * soft nofile 16384
    * hard nofile 16384
  • от рута выполнить:
    ulimit -n 16384
  • рестарт Nginx, на всякий случай. 
     

Пишут ещё, что можно просто прописать в конфиге Nginx:
worker_rlimit_nofile 16384
и перезапустить его.

comment comments