как именно Nginx оперирует потоками?
пришёл запрос, его Nginx принял в поток, передал в FastCGI, а что дальше?
он будет держать поток, пока FastCGI не вернёт ответ, а Nginx его передаст
источнику
или сам FastCGI передаст ответ источнику?
сам FastCGI тоже на каждый запрос выделяет поток...
короче, потоки для FastCGI надо урезать в половину или как это работает?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,292726,292726#msg-292726
Здравствуйте.
Собрал nginx с библиотекой QuicTLS - https://github.com/quictls/openssl
При активации протокола HTTP3 на нескольких хостах в лог начинаются сыпаться такие ошибки:
```
2021/11/24 22:52:45 [error] 40152#40152: *51 SSL_do_handshake() failed (SSL: error:0A0C0101:SSL routines::called a function you should not call) while handling frames, client: 91...., server: 0.0.0.0:443
2021/11/24 22:52:45 [error] 40151#40151: *52 SSL_do_handshake() failed (SSL: error:0A0C0101:SSL routines::called a function you should not call) while handling frames, client: 91...., server: 0.0.0.0:443
2021/11/24 22:52:45 [error] 40153#40153: *53 SSL_do_handshake() failed (SSL: error:0A0C0101:SSL routines::called a function you should not call) while handling frames, client: 91...., server: 0.0.0.0:443
```
Если использовать BoringSSL с аналогичной конфигурацией, то такой ошибки нету.
--
С уважением,
Izorkin mailto:izorkin@gmail.com
Здравствуйте, All!
Можно ли настроить nginx + njs таким образом, чтобы некоторые
get-параметры он вырезал из запроса перед передачей их на backend?
например,
?utm_source=instagram&utm_medium=hipolink&utm_campaign=slidebutton
?gclid=CjwKCAiAqIKNBhAIEiwAu_ZLDrzAZL_PrmbGRP-cyi5liGx-lMu3oapGZ
?fbclid=PAAaYJCb3hTyRmuCIZaobrn3WTbdwhYZq2c6oXVoHCqB1fcRj18jJCqS
и т.п.
backend - это php-fpm, доступ через сокет:
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
видел как это программируют на конфигах nginx с помощью директивы map:
https://serverfault.com/a/1062189
- но это наверное есть не самый оптимальный способ?
может быть кто-то это уже делал с помощью njs
и может поделиться примером кода?
С другой стороны - feature эта полезная будет всем,
кто пользуется nginx cache, поэтому может быть имеет смысл
запрограммировать эту feature прямо на C и сделать доступной
конфигурированию с помощью директив в конфиге, например,
fastcgi_cache_ignore_args utm_* gclid fbclid;
эти utm_* gclid fbclid и им подобные
ощутимо уменьшают эффективность кеша nginx.
MISS /pagination/collection/sale?fbclid=PAAabJiB...
MISS /collection/sale?gclid=CjwKCAiAqIKNBhAEiwAu...
--
Best regards,
Gena
Привет!
использую fastcgi_cache в nginx.
появилась необходимость кешировать разные запросы на разное время
столкнулся с тем что в директиву fastcgi_cache_valid нельзя передать
переменную
if ($request_uri ~* "/(api/1|api/2)")
{
set $no_cache 0;
set $cache_valid 5m;
}
...
fastcgi_cache_valid 200 $cache_valid; // так будет ошибка
fastcgi_cache_valid 200 1m; // так сраблотает
Подскажите какие может есть варианты реализации разного времени жизни кэша?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,292932,292932#msg-292932
Добрый день
У сайта есть Публичка и Админка на одном домене
/ - публичка
/admin/ - админка
Вот это правило apache2 прекрасно работает для админки, но на nginx никак не
получается это сделать
Тут все запросы кроме статики проходят через /admin/index.php в котором
проверяются авторизация и все такое
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^admin/(.*)$ admin/index.php?_route_=/$1 [L,QSA]
Пример, я открываю php-файл по адресу
/admin/test/1.php
На апаче этот запрос как-то проходит через /admin/index.php в котором я
проверяю авторизацию и все такое и если пользователь не авторизован при
открытии любого php-файла в админке увидит форму входа
На nginx это не работает и php-файл открывается напрямую, просто как
отдельный файл
Все возможные примеры в гугле не работают, вот мой пример, он тоже не
выполняет данную задачу.
#location / {
# try_files $uri $uri/ @frontend;
#}
location !/admin {
try_files $uri $uri/ @frontend;
}
location /admin {
try_files $uri $uri/ @backend;
}
location ~ \.php$ {
try_files $uri @frontend @backend;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass $php_sock;
}
location @frontend {
rewrite ^/(.*)$ /index.php?_route_=$1? last;
}
location @backend {
rewrite ^/admin/(.*)$ /admin/index.php?_route_=/$1? last;
}
Как заставить nginx обрабатывать все запросы (php-файлы) кроме статики через
/admin/index.php?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,292890,292890#msg-292890
Изменения в nginx 1.20.2 16.11.2021
*) Добавление: совместимость с OpenSSL 3.0.
*) Исправление: SSL-переменные могли быть пустыми при записи в лог;
ошибка появилась в 1.19.5.
*) Исправление: keepalive-соединения с gRPC-бэкендами могли не
закрываться после получения GOAWAY-фрейма.
*) Исправление: SSL-соединения к бэкендам в модуле stream могли зависать
после SSL handshake.
*) Исправление: SSL-соединения с gRPC-бэкендами могли зависать, если
использовались методы select, poll или /dev/poll.
*) Исправление: в переменной $content_length при использовании chunked
transfer encoding.
*) Исправление: при использовании HTTP/2 и директивы aio_write запросы
могли зависать.
--
Maxim Dounin
http://nginx.org/
Изменения в nginx 1.21.4 02.11.2021
*) Изменение: поддержка NPN вместо ALPN для установления
HTTP/2-соединений упразднена.
*) Изменение: теперь nginx закрывает SSL соединение, если клиент
использует ALPN, но nginx не поддерживает ни один из присланных
клиентом протоколов.
*) Изменение: в директиве sendfile_max_chunk значение по умолчанию
изменено на 2 мегабайта.
*) Добавление: директива proxy_half_close в модуле stream.
*) Добавление: директива ssl_alpn в модуле stream.
*) Добавление: переменная $ssl_alpn_protocol.
*) Добавление: поддержка SSL_sendfile() при использовании OpenSSL 3.0.
*) Добавление: директива mp4_start_key_frame в модуле
ngx_http_mp4_module.
Спасибо Tracey Jaquith.
*) Исправление: в переменной $content_length при использовании chunked
transfer encoding.
*) Исправление: при получении ответа некорректной длины от проксируемого
бэкенда nginx мог тем не менее закэшировать соединение.
Спасибо Awdhesh Mathpal.
*) Исправление: некорректные заголовки от бэкендов логгировались на
уровне info вместо error; ошибка появилась в 1.21.1.
*) Исправление: при использовании HTTP/2 и директивы aio_write запросы
могли зависать.
--
Maxim Dounin
http://nginx.org/