nginx php-fpm переписывает headers?
Небольшой легаси php проект (mvc) переехал на с апача на nginx+php-fpm. Вроде работает. Однако в некоторых ajax запросах передается header, примерно вот так
...
$.ajax({
//cache: false,
url: url_request,
method: 'post',
dataType: 'json',
headers: {
token: _token
},
...
в данном случае token
со значением _token
(значение берется из скрытого поля, генерируется постоянно, не суть). В общем когда был apache, то php функция getallheaders() возвращает заголовок в виде массива, среди элементов массива есть этот самый token, вот так
...
[Accept] => application/json, text/javascript, */*; q=0.01
[Accept-Language] => ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
[Accept-Encoding] => gzip, deflate
[token] => $2y$10$pW/C1Hxr0pKcUE/UvELNne.GIQlfuH1wm2nrggVKSXPgLeOjFWKdi
...
ну и далее приложение проверяет на валидность этот токен.
Когда этот же запрос выполняется в связке nginx+php-fpm вырисовывается вот такая картина:
...
[X-Requested-With] => XMLHttpRequest
[Token] => $2y$10$BrCwThyR8BPCxMCIxmWlXu04hQwsVInOnhv7G0yfyPcfMRDMcV24C
[Content-Type] => application/x-www-form-urlencoded; charset=UTF-8
[Accept-Encoding] => gzip, deflate
[Accept-Language] => ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
[Accept] => application/json, text/javascript, */*; q=0.01
...
Как видно ключ массива Token
написан с большой буквы, соответственно приложение его не находит при валидации. Вопрос: почему так просходит? Кто его переписывает с большой буквы?
Мозилла заголовок от ajax формирует правильный, с маленькой буквы, а бэкенд видит его с большой.
XHRPOST
[HTTP/1.1 200 OK 24ms]
POST http://blabla-site/request/value
Состояние 200 OK
Версия HTTP/1.1
Передано887 б (размер 868 б)
Referrer policystrict-origin-when-cross-origin
Приоритет запроса Highest
Поиск в DNS Система
Cache-Control no-store, no-cache, must-revalidate
Connection keep-alive
Content-Encoding gzip
Content-Type text/html; charset=UTF-8
Date Mon, 22 Apr 2024 09:52:30 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Pragma no-cache
Server nginx
Transfer-Encoding chunked
Vary Accept-Encoding
X-Powered-By PHP/8.1.24
POST /request/value HTTP/1.1
Host: blabla-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
token: $2y$10$zGoQO4qSgcQlkn4Dy7pF9.7hUDXGDEqA5qVqvg/lv3f3gPWbcRz4u
X-Requested-With: XMLHttpRequest
Content-Length: 12
Origin: http://blabla-site
Connection: keep-alive
Referer: http://blabla-site
Cookie: PHPSESSID=k43o0v1kr7gt5jv2iubvugs922
Может приложение неверной функцией считывает заголовки и php-fpm не их так выводит? на всякий случай фрагмент конфига nginx.conf
...
sendfile on;
tcp_nopush on;
tcp_nodelay on;
reset_timedout_connection on;
keepalive_timeout 120;
keepalive_requests 1000;
types_hash_max_size 4096;
server_tokens off;
send_timeout 30;
client_body_timeout 30;
client_header_timeout 30;
server_names_hash_max_size 4096;
client_max_body_size 10m;
client_body_buffer_size 128k;
large_client_header_buffers 8 64k;
client_body_temp_path /var/cache/nginx/client_temp;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /var/cache/nginx/proxy_temp;
include /etc/nginx/mime.types;
default_type application/octet-stream;
...
и фрагмент конфига server:
...
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param HTTPS on;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
...