The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск сервера приложений NGINX Unit 1.11.0"
Отправлено Valentin V. Bartenev, 20-Окт-19 13:55 
> 0 При попытке регистрации на форуме https://forum.nginx.org мне постоянно пишут
> Your registration request has been blocked because its suspected to come from
> a forum spammer!
> Хотя я ни разу его до этого вообще не посещал его, так
> что продолжу общение здесь, в этой тёплой и ламповой, для меня,
> обстановке. :-)

А и не надо на нем регистрироваться. Этот форум - всего лишь веб-интерфейс (причем страшно кривой) к обычному списку рассылки, который когда-то давно приделал один из пользователей.  С тех пор он так и живет.  Мы на него убрали вроде ссылки, но каким-то образом пользователи всё равно его находят.

Есть списки рассылки, ими и нужно пользоваться: https://mailman.nginx.org/mailman/listinfo/nginx-ru


> try_files $uri return 404;

Тут что-то странное написано.

В таком виде директива try_files проверит сначала существование запрашиваемого файла, а затем, если его нет, проверит существование файла с названием "return" и если такого файла тоже нет, то сделает редирект на страницу с именем 404.

Вы наверное пытались написать:

try_files $uri =404; 

Но в такой конструкции нет никакого смысла. Нужно просто оставить location пустым:

location / { }


> Всё работает, как и ожидается, но каждое правило вместо 1-ой строчки, превратилось
> в блок, в котором почти в каждом повторяется 1 и тот
> же блок
>
> fastcgi_pass unix:/run/php-fpm.sock;
> include fastcgi_params;
> fastcgi_param QUERY_STRING $_query_string
> fastcgi_param SCRIPT_FILENAME $document_root/index.php;
>

А и не надо так писать.  То же самое:

rewrite ^/([a-z][a-z])/?$ /?lang=$1? last;
rewrite ^/([a-z][a-z])/(payment)$ /?lang=$1&view=$2 last;
rewrite ^/([a-z][a-z])/([\w-]+)/?$ /?lang=$1&view=$2? last;
rewrite ^/([a-z][a-z])/([\w-]+)/([\d-]+)\.html/?$ /?lang=$1&view=$2&id=$3? last;
rewrite ^/([a-z][a-z])/([\w-]+)/([\w-]+)/([\d-]+)\.html/?$ /?lang=$1&view=$2&tab=$3&id=$4? last;
rewrite ^/([a-z][a-z])/([\w-]+)/([\w-]+)/?$ /?lang=$1&view=$2&tab=$3? last;
rewrite ^/([a-z][a-z])/(api)/([\w\s-]+)=\{1,3\}([\w\s-]+)=\{1,3\}\.html/?$ /?lang=$1&view=$2&data=$3&iv=$4? last;


> Можно ли это как-то оптимизировать?
> Например, выноести этот блок, а потом вызывать это блок (читал про именованные
> location но не понял как их использовать и помогут ли они
> мне тут вообще.)

Не помогут.  Именованные location нужны для перенаправлений без изменения URI. У вас URI требуется менять.


> 2 При написании правил, я использовал только Location-ы игнорировал if-ы и rewrite-ы,
> возможно что-то ещё, так как прочитал, что Location-ы работают лучше и
> быстрее.
> Правильно ли я сделал и почему (почему Location производительнее чем rewrite если
> это так, и почему именно не стоит использовать if-ы если это
> так)?

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

Все проблемы, увы, PHP программисты создают себе сами. Хотите чтобы было просто и быстро - разбирайте URI в index.php. Будете вы разбирать URI в PHP с помощью той же регулярки или с помощью каких-то более эффективных функций - не так важно.

Сейчас же вы занимаетесь лишней работой. Сначала заставили веб-сервер с помощью регулярных выражений парсить URI и преобразовывать его в аргументы. А затем этот URI с аргументами отправляете PHP-интерпретатору, чтобы тот опять парсил ваш URI, но уже с аргументами, вычленял эти аргументы и запихивал в хэш.  Зачем такое усложнение? Зачем этот лишний этап преобразования URI из одной формы в другую? Почему нельзя его парсить сразу в index.php?


> 2.1 Отдельно прошу обратить внимание на правило с payment, где в apache
> можно было задействовать для разбора не только URI, но и QUERY_STRING.
> В nginx, если я правильно понял, можно использовать только URI.
> Конкретную задачу по маршрутизации я вроде решил конкатенацией нового и старого QUERY_STRING,
> но хотелось бы знать можно ли было это сделать иначе?

Можно проверять аргументы с помощью if.


> 3 Стоит ли мне включить опцию в nginx pcre_jit on;?
> Сделает ли она обработку моих Location-ов более производительной?

Возможно чуть ускорит.


> 4 Socket vs Port на локалхосте.
> Правильно ли я поступаю, что использую сокеты на локалхосте вместо портов с
> точки зрения производительности? Какие там нюансы?

Правильно. Особых нюансов нет.


> ssl_ciphers TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384;
>
> Это работает только для TLSv1.2 сиферов, а сиферы для TLSv1.3 выводятся те
> и только в таком порядке, в котором они зашиты в openssl
> ciphers.
> Можно ли что-то с этим сделать?

Сейчас алгоритмы для TLS 1.3 в nginx можно задать через openssl.conf, подробности в: https://trac.nginx.org/nginx/ticket/1529#comment:12


> 6 Не получается включить 0-RTT (SSL Labs показывает 0-RTT enabled No)
> https://nginx.org/ru/docs/http/ngx_http_ssl_module.html#ssl_...
> Тут нет конкретного примера.
> Я в http указал
> ssl_early_data on;

Ещё сам TLS 1.3 нужно включить с помощью ssl_protocols, а больше ничего и не нужно.  Но следует убедиться, что, во-первых, в системе стоит свежая версия OpenSSL 1.1.1+, а, во-вторых, сам nginx был именно с ней собран.


> 7 Каким и можно ли вообще изменять параметр максимального времени жизни запроса
> для каждого виртуального хоста?
> В apache это делалось так: FcgidIOTimeout 300

fastcgi_read_timeout


> 8 И вопрос по php-fpm, по каким правилам, критериям или стратегиям выбирается
> оптимальное число процессов в этих, возможно и других опциях для pm
> = dynamic.
> pm.max_children = 5
> pm.start_servers = 2
> pm.min_spare_servers = 1
> pm.max_spare_servers = 3

Параметры подбираются исходя из возможностей вашей системы, сколько в ней памяти и процессора доступно, и исходя из особенностей вашего приложения, сколько каждый процесс ест памяти, сколько ждет на I/O, а сколько работает. Пять процессов - это либо какой-нибудь Raspberry Pi, виртуалка, либо приложение на десяток активных пользователей. На нормальном сервере под средние нагрузки будет что-нибудь вроде:

pm.max_children = 300
pm.start_servers = 50
pm.min_spare_servers = 25
pm.max_spare_servers = 75

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру