The OpenNET Project / Index page

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



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

Исходное сообщение
"Выпуск сервера приложений NGINX Unit 1.11.0"
Отправлено Ilya Indigo, 16-Окт-19 13:18 
Добрый день, Валентин и все кто сейчас читает эту ветку!
Я наконец-то сегодня перевёл с Apache на nginx свои сервера, но мне снова понадобится Ваша помощь, так как некоторые моменты мне не ясны, а некоторые и вовсе не получаются.

0 При попытке регистрации на форуме https://forum.nginx.org мне постоянно пишут
Your registration request has been blocked because its suspected to come from a forum spammer!
Хотя я ни разу его до этого вообще не посещал его, так что продолжу общение здесь, в этой тёплой и ламповой, для меня, обстановке. :-)

1 С Вашего наставления я отказался от .htaccess и перевёл ЧПУ на Location-ы, но я не уверен оптимально ли я это сделал.
В apache у меня было коротко и ясно.


RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} \s/index\.php
RewriteRule ^index\.php/?$ /en/error
RedirectMatch 403 .*\/\..*
ErrorDocument 403 /en/error
ErrorDocument 404 /en/error

RewriteRule ^([a-z]{2})/?$ index.php?lang=$1 [END]

#https://gricargo.com/ru/payment?token=EC-9HP89464U39537617&P...
RewriteCond %{QUERY_STRING} ^token=([\w-]{20})&PayerID=([\w-]{13})$
RewriteRule ^([a-z]{2})/(payment)/?$ index.php?lang=$1&view=$2&token=%1&PayerID=%2 [END]

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

Но в nginx это развернулось вот в такую простыню.


error_page 404 /en/error;
error_page 500 502 503 504 /50x.html;

location = /50x.html
{
    root /srv/www/htdocs;
}
location = /favicon.ico
{
    log_not_found off;
    access_log off;
}
location = /
{
    fastcgi_pass unix:/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
location = /index.php
{
    return 404;
}
location ~ /\.
{
    return 404;
}
location /
{
    try_files $uri return 404;
}
location ~ ^/([a-z][a-z])/?$
{
    set $_query_string "lang=$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;
}
#/ru/payment?token=EC-9HP89464U39537617&PayerID=T94MQ4XMUXCWG
location ~ ^/([a-z][a-z])/(payment)$
{
    set $_query_string "lang=$1&view=$2";
    fastcgi_pass unix:/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $_query_string&$query_string;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
location ~ ^/([a-z][a-z])/([\w-]+)/?$
{
    set $_query_string "lang=$1&view=$2";
    fastcgi_pass unix:/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $_query_string;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
location ~ ^/([a-z][a-z])/([\w-]+)/([\d-]+)\.html/?$
{
    set $_query_string "lang=$1&view=$2&id=$3";
    fastcgi_pass unix:/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $_query_string;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
location ~ ^/([a-z][a-z])/([\w-]+)/([\w-]+)/([\d-]+)\.html/?$
{
    set $_query_string "lang=$1&view=$2&tab=$3&id=$4";
    fastcgi_pass unix:/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $_query_string;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
location ~ ^/([a-z][a-z])/([\w-]+)/([\w-]+)/?$
{
    set $_query_string "lang=$1&view=$2&tab=$3";
    fastcgi_pass unix:/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $_query_string;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
location ~ ^/([a-z][a-z])/(api)/([\w\s-]+)=\{1,3\}([\w\s-]+)=\{1,3\}\.html/?$
{
    set $_query_string "lang=$1&view=$2&data=$3&iv=$4";
    fastcgi_pass unix:/run/php-fpm.sock;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $_query_string;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}

Всё работает, как и ожидается, но каждое правило вместо 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;

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

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

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

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

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

5 Не получается указать ssl_ciphers и их порядок следования для TLS 1.3.
В апаче есть костыль, и можно указать так, и это работает:

SSLCipherSuite TLSv1.3 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384

В nginx, как и везде.

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.
Можно ли что-то с этим сделать?

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;
и даже
proxy_set_header Early-Data $ssl_early_data;
Но оно не работает и, видимо, последняя строчка должна быть другой, ведь у меня nginx никого не проксирует, он сам единственный web-сервер.

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

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

pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

P.S. Буду рад выслушаю конструктивные ответы от всех кто их может дать. :-)

 

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



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

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