From b2b12401363b13e4b95fe83839d854307dc6dd49 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 Aug 2025 11:04:50 -0400 Subject: [PATCH] List Blob Endpoint --- .clinerules/workspace_rules.md | 3 + IMPLEMENTATION.md | 49 +- ...bbb59aafcc42161c50bd7881e68e27369f343c.txt | 7 + ...92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt | 7 + ...52cc8d687e7c7b4dbd0893f6470242614d1100.txt | 7 + ...93a571642e10c14e1325958eaac6d7e85e1fb1.txt | 7 + build/ginxsom-fcgi | Bin 161536 -> 165872 bytes build/main.o | Bin 40952 -> 58096 bytes config/local-nginx.conf | 13 + db/ginxsom.db | Bin 36864 -> 36864 bytes delete_test.sh | 119 + list_test.sh | 157 + logs/access.log | 20 + logs/error.log | 4675 +++++++++++++++++ logs/nginx.pid | 2 +- src/ginxsom.h | 4 +- src/main.c | 313 +- 17 files changed, 5337 insertions(+), 46 deletions(-) create mode 100644 blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt create mode 100644 blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt create mode 100644 blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt create mode 100644 blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt create mode 100755 delete_test.sh create mode 100755 list_test.sh diff --git a/.clinerules/workspace_rules.md b/.clinerules/workspace_rules.md index 17dccfc..fd43ac0 100644 --- a/.clinerules/workspace_rules.md +++ b/.clinerules/workspace_rules.md @@ -37,3 +37,6 @@ - If nginx fails to start, check for port conflicts or kill existing processes - If FastCGI fails, check socket permissions and that binary exists - Always use local paths, never assume system installations + + use ./restart-nginx.sh to restart nginx + use ./start-fcgi.sh to start fcgi \ No newline at end of file diff --git a/IMPLEMENTATION.md b/IMPLEMENTATION.md index 7754e88..23e3162 100644 --- a/IMPLEMENTATION.md +++ b/IMPLEMENTATION.md @@ -92,16 +92,43 @@ This document outlines the implementation plan for ginxsom, a FastCGI-based Blos - [x] Add optional server-specific fields (uploader_pubkey, filename) ### 2.4 Error Handling -- [ ] Implement proper HTTP status codes - - [ ] 400 Bad Request for invalid data - - [ ] 401 Unauthorized for auth failures - - [ ] 409 Conflict for hash mismatches - - [ ] 413 Payload Too Large for size limits - - [ ] 500 Internal Server Error for system issues -- [ ] Add detailed error messages -- [ ] Implement request logging +- [x] Implement proper HTTP status codes + - [x] 400 Bad Request for invalid data + - [x] 401 Unauthorized for auth failures + - [x] 409 Conflict for hash mismatches + - [x] 413 Payload Too Large for size limits + - [x] 500 Internal Server Error for system issues +- [x] Add detailed error messages +- [x] Implement request logging -### 2.5 Testing & Validation +### 2.5 List Blobs Endpoint +- [ ] Implement `GET /list/` endpoint + - [ ] Extract pubkey from URL path + - [ ] Query database for blobs uploaded by specified pubkey + - [ ] Support `since` and `until` query parameters for date filtering + - [ ] Return JSON array of blob descriptors + - [ ] Handle empty results gracefully + - [ ] Implement optional authorization with kind 24242 event validation + - [ ] Validate `t` tag is set to "list" + - [ ] Check authorization expiration + - [ ] Verify event signature and structure + +### 2.6 Delete Blob Endpoint +- [ ] Implement `DELETE /` endpoint + - [ ] Extract SHA-256 hash from URL path + - [ ] Require authorization with kind 24242 event validation + - [ ] Validate `t` tag is set to "delete" + - [ ] Verify at least one `x` tag matches the requested hash + - [ ] Check authorization expiration + - [ ] Verify event signature and structure + - [ ] Check blob exists in database + - [ ] Verify uploader_pubkey matches authorized pubkey (ownership check) + - [ ] Remove blob file from filesystem + - [ ] Remove blob metadata from database + - [ ] Handle file deletion errors gracefully + - [ ] Return appropriate success/error responses + +### 2.7 Testing & Validation - [x] Test uploads without authentication - [x] Test uploads with valid nostr auth - [x] Test uploads with invalid auth @@ -195,7 +222,7 @@ This document outlines the implementation plan for ginxsom, a FastCGI-based Blos - [x] HEAD requests return metadata from database - [x] Database stores blob information with proper schema -### Milestone 2: Full Upload Support (Phase 2 Complete) +### Milestone 2: Full Upload Support (Phase 2 Pending) - [x] Basic upload functionality working (PUT requests accepted) - [x] SHA-256 hash calculation during upload - [x] File storage to blobs/ directory @@ -203,6 +230,8 @@ This document outlines the implementation plan for ginxsom, a FastCGI-based Blos - [x] Authenticated uploads working (Nostr kind 24242 event validation) - [x] Proper error handling for upload scenarios - [x] Database metadata storage during upload (with uploader_pubkey and filename) +- [ ] List blobs endpoint implemented (GET /list/) +- [ ] Delete blob endpoint implemented (DELETE /) ### Milestone 3: Policy Compliance (Phase 3 Pending) - [ ] Upload requirements implemented diff --git a/blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt b/blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt new file mode 100644 index 0000000..f672b45 --- /dev/null +++ b/blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt @@ -0,0 +1,7 @@ +Test blob content for Ginxsom Blossom server +Timestamp: 2025-08-19T10:34:57-04:00 +Random data: 52bea9fe68b05eeeee258ae97cdcf8d9e7abbc13e67d61f681927250daef6e56 +Test message: Hello from put_test.sh! + +This file is used to test the upload functionality +of the Ginxsom Blossom server implementation. diff --git a/blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt b/blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt new file mode 100644 index 0000000..6e9bd23 --- /dev/null +++ b/blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt @@ -0,0 +1,7 @@ +Test blob content for Ginxsom Blossom server +Timestamp: 2025-08-19T10:34:52-04:00 +Random data: 340fc3549683d7c208ffa373d5932551f9b2e53cc1a5713b55c934403d9640a2 +Test message: Hello from put_test.sh! + +This file is used to test the upload functionality +of the Ginxsom Blossom server implementation. diff --git a/blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt b/blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt new file mode 100644 index 0000000..db28e31 --- /dev/null +++ b/blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt @@ -0,0 +1,7 @@ +Test blob content for Ginxsom Blossom server +Timestamp: 2025-08-19T10:34:56-04:00 +Random data: 52e5fee5b2f73c73ed388c9df9f74c58117b5f93982c5e6202951fd9fd90b626 +Test message: Hello from put_test.sh! + +This file is used to test the upload functionality +of the Ginxsom Blossom server implementation. diff --git a/blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt b/blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt new file mode 100644 index 0000000..dd681a7 --- /dev/null +++ b/blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt @@ -0,0 +1,7 @@ +Test blob content for Ginxsom Blossom server +Timestamp: 2025-08-19T10:44:56-04:00 +Random data: 162b8c0930df1f600ddd936e99ecce0866ab82a436f545d2187ba56726f0df4f +Test message: Hello from put_test.sh! + +This file is used to test the upload functionality +of the Ginxsom Blossom server implementation. diff --git a/build/ginxsom-fcgi b/build/ginxsom-fcgi index 113567c8e93aea39876df4ecae598c3ec763a8e0..14e9880cd2db2a73f5ecac77349f3d6758b12d39 100755 GIT binary patch literal 165872 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 literal 161536 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 O`uv)h%^s<@4g5c-=v+?# diff --git a/build/main.o b/build/main.o index 9cdeecd7a2df102b8e26077e42960c25ba215eb3..8230a9af4ecd7e6ca127a01d52226d5e66fe8856 100644 GIT binary patch literal 58096 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

  • ~<(aDJA_$oZb& z+>Sq|kHNnWeAM3qKK9?z0R9Z%Uk&o-1n|!RKKkcR07w5!1;|+ke2hy!58z)9e5}_^ z0sKwC{{__RS-?^MmjLes{#ya^cK{#ffgc9&2ahD7l-M7z-S-vTZr=lekL`OH@X-!# z0Dmm-ui>)g`No0(eg*Ka1%71!e+lq^3H;N5pD}*}{&m1#1$?aUYT*A0_!kE7F9rUu zfqxb7G0xlu{Of`L7vQ5lj{*O`fWI|>zZ3X30Dn&azw|I7QDT4i4Sh^|%@y2^+e?9e zBk<1%;GYS6^#2aP&jmRb2gvy;@KMfh0`OY^$9BIXK>mHezX|mDYXJWd;G;fI0{&Z& z^IU+OmjTCpuswkP9pvnHIGs@9_WB)tOnZ$K+-|Q?z^?-S(ERvHw5tGz`qUns{;64!2bjAFA3mZ2mC(*|Aqkm?}7g(;NKp= zzZdwo1AjvR|5@N43;dUXkMZXX;7**pBo@&KJaG)zZUQ^z?TQei37hJ_!j~`2k^@R(xxl{_@G#(a z1;|+s{0iXz1MuSk|7U=le*yml;BN=~4!{Q=Nhg%Jy}sm+jN|(X&h7qlzz+mIj$elX zKV$w7z#j|zJ3)Ry0KW|IUBF)gat1L@b6ifffZs*urd|yo2lZbG_{+fW1UYvDelg%& z?&oYMO6x!l%D)!y-NZBc+y!#}4ETM(M>#!!<9z;6kb~{@6!1~bR^VfMy%NBG6ZrRl zp6>+kzX1Ndz|Z;)olvsJul)pPGvYWqG5{Y1IJWP&0Qn_=qy1-tocpM3(=NvYAMF+c zd=RXs&IdX7gPe1Ajg7jGm7HALVZWKFWU!@ZW%(9RYGa z1-_Ca@nPt9SzFzXsORB=b36WpK1R?!z<&Vv(*yWrz(+r+1pGmevm`*y>A*)h zX8?}<=*$2)D}j&w===cw1;F0`dfov17XW{L1f5W_`^!)bt8p3imu+~3|CKn#{u2Hb z-UIm2Am<^#J;Ax$Z1BU`fMYxISi_0=pV7yZdlG|`Y`k5=N}r8%Z20F3Zr7Lhz&WvB zZK99i^By24=6^sRgI~uWCFVa&AA|FppOekMUBimMnT`#gV*)3e|EPu){}DPi{HFwG zKH6t1@X=3R3E*!7K9^xF4t%U{B!IsN_>Kj}!Cx zV^WhG7~K4h53eOT8QlE-&Q1;cxcS|jk)RLfF~5T|-onlA;GApW=J#vfvT)_>B+vZr zkI~2c4vTrejPW6&oBAq9tZJrz-_9xEx0uy;gE@-FnxX~jUH1a|$Ni%8uPrAMPC>kt zPnhl%(9a;?DZPg8=OF_9+dS=UP67Q>LHuw2ItBDk62=PX9~YRQUSXH>Wi9Om^sj)m z(Lcw#O0vfqs_XgRibXa5ug5NBWK(5Z0%pqjZ)F@Zmxr4J`Q~wieRigto3EwS`e^B7 z{hdQ!T#m8rNDZrZy%^`Y1g33Px#pTQt2tG_o6a)r{LUy%30W6hKc_z6agAjbS-8nR zBrEfRDc^k0q|5!~ACjl@y&>bZkz(p^^7GydAKUidRjPBC-?=gQZToW!>CgT>d=r9_ z{vAEXVf*hxA5*@ue+^+=ej$A@eKbvj%e3>)l>GMZl-l`uzR;ij@~_b)?9yM#e*4j}$#3k}U)h``|2UoT vW+CR%>EG#N=jVBw<)SL%7MUoeOa_If?JuV)to4_F + location ~ "^/list/([a-f0-9]{64}).*$" { + # Pass to FastCGI application for processing + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/ginxsom.fcgi; + fastcgi_pass fastcgi_backend; + + # Only allow GET method for list requests + if ($request_method !~ ^(GET)$ ) { + return 405; + } + } + # Health check endpoint location /health { access_log off; diff --git a/db/ginxsom.db b/db/ginxsom.db index 6efc6f7e140f9c166365cd0668e1822c4fbda497..4683bf3042d7eb5e7895adbfe063c6762fe5c877 100644 GIT binary patch delta 1472 zcmbtUPiP%Q9G-bepLzRl%t3?6doOwP@{l&!nVp^4Q6#Yv4`QL9RD_D|?Ckc{f9)ZW znoIJE5%e{XxD@I^Y3YMra;SNy1U%S-2trFiJbLobiXaw2iU*x}tM4^E8h*_DzS-IR zecv~~-Ces^IsfAB> zfz74#{Lu{|IX5sR?!brHeiSSB>)iUbtPBqT`^ zDHidRCtOk`l^=;9W0d=Z5{9Y5*!LeH+We1*6-3s6D5POb2qCn9wkTFr|BSag9XiPgIhNyRIss%>@C_R}!Q@d=yZ2n{I zqz3SZ+^_e+O8#j9X7ZowCszRg-g-oLzU(z2p4tcF>;NaXa2U?;cu4%e}_T=g#V)elg%dUks;T<^Od3m51AI_sbl# zr&iuMdeJoLT0S*aL5&3h>b%WetwBx)=V^roiD=w|(DOnrwB~el>>1Ti0$+7Ef>7buIJ- zD0}k&y@tlU@4aPr#;8;(bsp6%V-o0Qm5LasU7T delta 845 zcmbu7O=uHA6vt!La)_`AmX8dAP6an^d<-v@e?5kRrKI&MkzUadH>&^H#2YM&8x47^%b$@ z76z9*M})z9sXH)?5K^5T1h-&9f2%L*2ensPc+Y~f)Ao-%aJD<{fifT=Gm&vs3 zXjog`B$<{NP#*)r;HC|j!L~0skP;mYP4pAwwW`5*ZQe6`Hk~(v#j=?%tZweBnCB~j zVmY4?*fPwP?T^st3^k*M5jL}z=y)bV!{MB1 z&$t*L*63vE9=r&*IF z$!Z(5^_y+Ic4ZMaI@Dv`wdfQ)b!qQ1+(SeCjxVz|7Ib40>_zN+G!_Q!X0)}DlwoI7s0<`PkbU?j+P zknBM0fbAe+j8uM76|wzYcJXKM5Y}KBZa|ftlmhESO}DPs_SSUl7b@nZO0aw;JzG-x zt=w;=eoOi-w(ag{iENhC-7( endpoint +# This script tests the blob deletion functionality + +BASE_URL="http://localhost:9001" +NOSTR_PRIVKEY="0000000000000000000000000000000000000000000000000000000000000001" +NOSTR_PUBKEY="79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo "=== Ginxsom Delete Blob Tests ===" +echo + +# Function to generate a Nostr event for delete authorization +generate_delete_auth() { + local sha256="$1" + local content="$2" + local created_at=$(date +%s) + local expiration=$((created_at + 3600)) # 1 hour from now + + # Note: This is a placeholder - in real implementation, you'd use nostr tools + # to generate properly signed events. For now, we'll create the structure. + cat << EOF +{ + "id": "placeholder_id", + "pubkey": "$NOSTR_PUBKEY", + "kind": 24242, + "content": "$content", + "created_at": $created_at, + "tags": [ + ["t", "delete"], + ["x", "$sha256"], + ["expiration", "$expiration"] + ], + "sig": "placeholder_signature" +} +EOF +} + +# Test 1: Delete without authorization (should fail) +echo -e "${YELLOW}Test 1: DELETE without authorization${NC}" +RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X DELETE "$BASE_URL/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe") +HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +if [ "$HTTP_STATUS" = "401" ]; then + echo -e "${GREEN}✓ Correctly rejected unauthorized delete (401)${NC}" +else + echo -e "${RED}✗ Expected 401, got $HTTP_STATUS${NC}" +fi +echo "Response: $BODY" +echo + +# Test 2: Delete with invalid authorization +echo -e "${YELLOW}Test 2: DELETE with invalid authorization${NC}" +INVALID_AUTH=$(echo '{"invalid": "event"}' | base64 -w 0) +RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X DELETE \ + -H "Authorization: Nostr $INVALID_AUTH" \ + "$BASE_URL/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe") +HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +if [ "$HTTP_STATUS" = "401" ]; then + echo -e "${GREEN}✓ Correctly rejected invalid authorization (401)${NC}" +else + echo -e "${RED}✗ Expected 401, got $HTTP_STATUS${NC}" +fi +echo "Response: $BODY" +echo + +# Test 3: Delete non-existent blob +echo -e "${YELLOW}Test 3: DELETE non-existent blob${NC}" +NONEXISTENT_HASH="1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" +DELETE_AUTH=$(generate_delete_auth "$NONEXISTENT_HASH" "Delete non-existent") +AUTH_B64=$(echo "$DELETE_AUTH" | base64 -w 0) +RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X DELETE \ + -H "Authorization: Nostr $AUTH_B64" \ + "$BASE_URL/$NONEXISTENT_HASH") +HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +if [ "$HTTP_STATUS" = "404" ]; then + echo -e "${GREEN}✓ Correctly returned 404 for non-existent blob${NC}" +else + echo -e "${RED}✗ Expected 404, got $HTTP_STATUS${NC}" +fi +echo "Response: $BODY" +echo + +# Test 4: Delete with wrong pubkey (ownership check) +echo -e "${YELLOW}Test 4: DELETE with wrong pubkey (ownership test)${NC}" +TEST_HASH="708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe" +DELETE_AUTH=$(generate_delete_auth "$TEST_HASH" "Delete with wrong pubkey") +AUTH_B64=$(echo "$DELETE_AUTH" | base64 -w 0) +RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X DELETE \ + -H "Authorization: Nostr $AUTH_B64" \ + "$BASE_URL/$TEST_HASH") +HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +echo "HTTP Status: $HTTP_STATUS" +echo "Response: $BODY" +echo + +# Test 5: Valid delete (if implemented and authorized) +echo -e "${YELLOW}Test 5: Valid DELETE request${NC}" +echo "Note: This test requires a blob uploaded by the test pubkey" +echo "and proper Nostr event signing (not implemented in this test script)" +echo + +echo "=== Delete Tests Complete ===" +echo +echo "Note: These tests use placeholder Nostr events." +echo "For real testing, use proper Nostr signing tools to generate valid events." diff --git a/list_test.sh b/list_test.sh new file mode 100755 index 0000000..bb5a4ac --- /dev/null +++ b/list_test.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# list_test.sh - Test script for GET /list/ endpoint +# This script tests the blob listing functionality + +BASE_URL="http://localhost:9001" +NOSTR_PRIVKEY="0000000000000000000000000000000000000000000000000000000000000001" +NOSTR_PUBKEY="79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo "=== Ginxsom List Blobs Tests ===" +echo + +# Function to generate a Nostr event for list authorization +generate_list_auth() { + local content="$1" + local created_at=$(date +%s) + local expiration=$((created_at + 3600)) # 1 hour from now + + # Note: This is a placeholder - in real implementation, you'd use nostr tools + # to generate properly signed events. For now, we'll create the structure. + cat << EOF +{ + "id": "placeholder_id", + "pubkey": "$NOSTR_PUBKEY", + "kind": 24242, + "content": "$content", + "created_at": $created_at, + "tags": [ + ["t", "list"], + ["expiration", "$expiration"] + ], + "sig": "placeholder_signature" +} +EOF +} + +# Test 1: List blobs without authorization (should work if optional auth) +echo -e "${YELLOW}Test 1: GET /list/ without authorization${NC}" +RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/list/$NOSTR_PUBKEY") +HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +echo "HTTP Status: $HTTP_STATUS" +echo "Response: $BODY" +echo + +# # Test 2: List blobs with authorization +# echo -e "${YELLOW}Test 2: GET /list/ with authorization${NC}" +# LIST_AUTH=$(generate_list_auth "List Blobs") +# AUTH_B64=$(echo "$LIST_AUTH" | base64 -w 0) +# RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" \ +# -H "Authorization: Nostr $AUTH_B64" \ +# "$BASE_URL/list/$NOSTR_PUBKEY") +# HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +# BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +# echo "HTTP Status: $HTTP_STATUS" +# echo "Response: $BODY" +# echo + +# # Test 3: List blobs with since parameter +# echo -e "${YELLOW}Test 3: GET /list/ with since parameter${NC}" +# SINCE_TIMESTAMP=$(($(date +%s) - 86400)) # 24 hours ago +# RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" \ +# "$BASE_URL/list/$NOSTR_PUBKEY?since=$SINCE_TIMESTAMP") +# HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +# BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +# echo "HTTP Status: $HTTP_STATUS" +# echo "Response: $BODY" +# echo + +# # Test 4: List blobs with until parameter +# echo -e "${YELLOW}Test 4: GET /list/ with until parameter${NC}" +# UNTIL_TIMESTAMP=$(date +%s) # now +# RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" \ +# "$BASE_URL/list/$NOSTR_PUBKEY?until=$UNTIL_TIMESTAMP") +# HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +# BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +# echo "HTTP Status: $HTTP_STATUS" +# echo "Response: $BODY" +# echo + +# # Test 5: List blobs with both since and until parameters +# echo -e "${YELLOW}Test 5: GET /list/ with since and until parameters${NC}" +# SINCE_TIMESTAMP=$(($(date +%s) - 86400)) # 24 hours ago +# UNTIL_TIMESTAMP=$(date +%s) # now +# RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" \ +# "$BASE_URL/list/$NOSTR_PUBKEY?since=$SINCE_TIMESTAMP&until=$UNTIL_TIMESTAMP") +# HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +# BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +# echo "HTTP Status: $HTTP_STATUS" +# echo "Response: $BODY" +# echo + +# # Test 6: List blobs for non-existent pubkey +# echo -e "${YELLOW}Test 6: GET /list/${NC}" +# FAKE_PUBKEY="1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" +# RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/list/$FAKE_PUBKEY") +# HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +# BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +# if [ "$HTTP_STATUS" = "200" ]; then +# echo -e "${GREEN}✓ Correctly returned 200 with empty array${NC}" +# else +# echo "HTTP Status: $HTTP_STATUS" +# fi +# echo "Response: $BODY" +# echo + +# # Test 7: List blobs with invalid pubkey format +# echo -e "${YELLOW}Test 7: GET /list/${NC}" +# INVALID_PUBKEY="invalid_pubkey" +# RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" "$BASE_URL/list/$INVALID_PUBKEY") +# HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +# BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +# if [ "$HTTP_STATUS" = "400" ]; then +# echo -e "${GREEN}✓ Correctly returned 400 for invalid pubkey format${NC}" +# else +# echo "HTTP Status: $HTTP_STATUS" +# fi +# echo "Response: $BODY" +# echo + +# # Test 8: List blobs with invalid since/until parameters +# echo -e "${YELLOW}Test 8: GET /list/ with invalid timestamp parameters${NC}" +# RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" \ +# "$BASE_URL/list/$NOSTR_PUBKEY?since=invalid&until=invalid") +# HTTP_STATUS=$(echo "$RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2) +# BODY=$(echo "$RESPONSE" | sed '/HTTP_STATUS/d') + +# echo "HTTP Status: $HTTP_STATUS" +# echo "Response: $BODY" +# echo + +# echo "=== List Tests Complete ===" +# echo +# echo "Expected blob descriptor format:" +# echo '{' +# echo ' "url": "https://server.com/.",' +# echo ' "sha256": "",' +# echo ' "size": ,' +# echo ' "type": "",' +# echo ' "uploaded": ' +# echo '}' +# echo +# echo "Note: These tests use placeholder Nostr events." +# echo "For real testing, use proper Nostr signing tools to generate valid events." diff --git a/logs/access.log b/logs/access.log index 47ad46c..290d9ba 100644 --- a/logs/access.log +++ b/logs/access.log @@ -129,3 +129,23 @@ 127.0.0.1 - - [19/Aug/2025:10:10:05 -0400] "GET /71300009a2840a82a5f596e833b6d0b69361ac63bed5956652e39dad53400ac5 HTTP/1.1" 200 296 "-" "curl/8.15.0" 127.0.0.1 - - [19/Aug/2025:10:11:23 -0400] "PUT /upload HTTP/1.1" 200 323 "-" "curl/8.15.0" 127.0.0.1 - - [19/Aug/2025:10:11:23 -0400] "GET /a5946f8210fb87f9772263864234944d5fea43a8b3dc8eaa08abe4859eb68325 HTTP/1.1" 200 296 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:34:53 -0400] "PUT /upload HTTP/1.1" 200 323 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:34:53 -0400] "GET /545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de HTTP/1.1" 200 296 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:34:56 -0400] "PUT /upload HTTP/1.1" 200 323 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:34:56 -0400] "GET /98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100 HTTP/1.1" 200 296 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:34:57 -0400] "PUT /upload HTTP/1.1" 200 323 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:34:57 -0400] "GET /22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c HTTP/1.1" 200 296 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:44:56 -0400] "PUT /upload HTTP/1.1" 200 323 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:44:56 -0400] "GET /b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1 HTTP/1.1" 200 296 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942 HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342 HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342 HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/invalid_pubkey HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:55:42 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:10:56:40 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:11:00:46 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 501 38 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:11:01:47 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 200 1984 "-" "curl/8.15.0" +127.0.0.1 - - [19/Aug/2025:11:02:33 -0400] "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" 200 1984 "-" "curl/8.15.0" diff --git a/logs/error.log b/logs/error.log index da13940..5dae882 100644 --- a/logs/error.log +++ b/logs/error.log @@ -12832,3 +12832,4678 @@ Accept-Ranges: bytes 2025/08/19 10:11:23 [debug] 349771#349771: timer delta: 1 2025/08/19 10:11:23 [debug] 349771#349771: worker cycle 2025/08/19 10:11:23 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:52 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:52 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:52 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:52 [debug] 349771#349771: *42 accept: 127.0.0.1:55676 fd:6 +2025/08/19 10:34:52 [debug] 349771#349771: *42 event timer add: 6: 60000:180886020 +2025/08/19 10:34:52 [debug] 349771#349771: *42 reusable connection: 1 +2025/08/19 10:34:52 [debug] 349771#349771: *42 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:52 [debug] 349771#349771: timer delta: 1409622 +2025/08/19 10:34:52 [debug] 349771#349771: worker cycle +2025/08/19 10:34:52 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:52 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http wait request handler +2025/08/19 10:34:52 [debug] 349771#349771: *42 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:52 [debug] 349771#349771: *42 recv: eof:0, avail:-1 +2025/08/19 10:34:52 [debug] 349771#349771: *42 recv: fd:6 84 of 1024 +2025/08/19 10:34:52 [debug] 349771#349771: *42 reusable connection: 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http process request line +2025/08/19 10:34:52 [debug] 349771#349771: *42 http request line: "GET /health HTTP/1.1" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http uri: "/health" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http args: "" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http exten: "" +2025/08/19 10:34:52 [debug] 349771#349771: *42 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http process request header line +2025/08/19 10:34:52 [debug] 349771#349771: *42 http header: "Host: localhost:9001" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http header: "Accept: */*" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http header done +2025/08/19 10:34:52 [debug] 349771#349771: *42 event timer del: 6: 180886020 +2025/08/19 10:34:52 [debug] 349771#349771: *42 generic phase: 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 rewrite phase: 1 +2025/08/19 10:34:52 [debug] 349771#349771: *42 test location: "/health" +2025/08/19 10:34:52 [debug] 349771#349771: *42 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:52 [debug] 349771#349771: *42 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:34:52 [debug] 349771#349771: *42 using configuration "/health" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http cl:-1 max:104857600 +2025/08/19 10:34:52 [debug] 349771#349771: *42 rewrite phase: 3 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http set discard body +2025/08/19 10:34:52 [debug] 349771#349771: *42 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:52 GMT +Content-Type: application/octet-stream +Content-Length: 3 +Connection: keep-alive +Content-Type: text/plain + +2025/08/19 10:34:52 [debug] 349771#349771: *42 write new buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http write filter: l:0 f:0 s:196 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http output filter "/health?" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http copy filter: "/health?" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http postpone filter "/health?" 00007FFDD38FD1C0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 write old buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 write new buf t:0 f:0 0000000000000000, pos 00005CE04363AD7A, size: 3 file: 0, size: 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http write filter: l:1 f:0 s:199 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http write filter limit 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 writev: 199 of 199 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http write filter 0000000000000000 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http copy filter: 0 "/health?" +2025/08/19 10:34:52 [debug] 349771#349771: *42 http finalize request: 0, "/health?" a:1, c:1 +2025/08/19 10:34:52 [debug] 349771#349771: *42 set http keepalive handler +2025/08/19 10:34:52 [debug] 349771#349771: *42 http close request +2025/08/19 10:34:52 [debug] 349771#349771: *42 http log handler +2025/08/19 10:34:52 [debug] 349771#349771: *42 free: 00005CE043624610, unused: 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 free: 00005CE04361A980, unused: 2736 +2025/08/19 10:34:52 [debug] 349771#349771: *42 free: 00005CE0436090A0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 hc free: 0000000000000000 +2025/08/19 10:34:52 [debug] 349771#349771: *42 hc busy: 0000000000000000 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 tcp_nodelay +2025/08/19 10:34:52 [debug] 349771#349771: *42 reusable connection: 1 +2025/08/19 10:34:52 [debug] 349771#349771: *42 event timer add: 6: 65000:180891020 +2025/08/19 10:34:52 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:52 [debug] 349771#349771: worker cycle +2025/08/19 10:34:52 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:52 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 http keepalive handler +2025/08/19 10:34:52 [debug] 349771#349771: *42 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:52 [debug] 349771#349771: *42 recv: eof:1, avail:-1 +2025/08/19 10:34:52 [debug] 349771#349771: *42 recv: fd:6 0 of 1024 +2025/08/19 10:34:52 [info] 349771#349771: *42 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:52 [debug] 349771#349771: *42 close http connection: 6 +2025/08/19 10:34:52 [debug] 349771#349771: *42 event timer del: 6: 180891020 +2025/08/19 10:34:52 [debug] 349771#349771: *42 reusable connection: 0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 free: 00005CE0436090A0 +2025/08/19 10:34:52 [debug] 349771#349771: *42 free: 00005CE043606840, unused: 136 +2025/08/19 10:34:52 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:34:52 [debug] 349771#349771: worker cycle +2025/08/19 10:34:52 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:53 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:53 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 accept: 127.0.0.1:55690 fd:6 +2025/08/19 10:34:53 [debug] 349771#349771: *43 event timer add: 6: 60000:180886325 +2025/08/19 10:34:53 [debug] 349771#349771: *43 reusable connection: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 304 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http wait request handler +2025/08/19 10:34:53 [debug] 349771#349771: *43 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: eof:0, avail:-1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: fd:6 1024 of 1024 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: avail:112 +2025/08/19 10:34:53 [debug] 349771#349771: *43 reusable connection: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http process request line +2025/08/19 10:34:53 [debug] 349771#349771: *43 http request line: "PUT /upload HTTP/1.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http uri: "/upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http args: "" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http exten: "" +2025/08/19 10:34:53 [debug] 349771#349771: *43 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http process request header line +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header: "Host: localhost:9001" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header: "Accept: */*" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header: "Authorization: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiJhZmFjMjAyY2ZlZTM3OWEwYzdlNzhkOWU0N2FjOGU0NmVjODkxMjZjOTRhMGI5MjIxNGU3NWEwMmMzZTE4YzJlIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTMsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI1NDVhMjI3N2RkNGI3YTY2ZTMyMGUxMmNkZDkyYmY2ZmJiZTEzODY5YjViYjVkNjY1YTAzYzgzZDQ1M2JhMmRlIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5MiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzM2NlNmNlNGViMTlhMTAxYzIxMDMzYzIyOWRkOTIwZWI4MzlhYzg4OGRkYmUyZTg2YTQwOTgzNzBmYTRmZTY3ODc3ODIxZGU5MzNlOGVlNDYzODU1ZDhlNzY1MTk0YzNkODZmYWVjNzYyZjljMGMwYWYxMjUwMzFkYjdhZDQ4In0=" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header: "Content-Type: text/plain" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header: "Content-Disposition: attachment; filename="test_blob_1755614092.txt"" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header: "Content-Length: 296" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http header done +2025/08/19 10:34:53 [debug] 349771#349771: *43 event timer del: 6: 180886325 +2025/08/19 10:34:53 [debug] 349771#349771: *43 generic phase: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 rewrite phase: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 test location: "/health" +2025/08/19 10:34:53 [debug] 349771#349771: *43 test location: "/upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:53 [debug] 349771#349771: *43 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:34:53 [debug] 349771#349771: *43 using configuration "/upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http cl:296 max:104857600 +2025/08/19 10:34:53 [debug] 349771#349771: *43 rewrite phase: 3 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "PUT" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script regex: "^(PUT)$" +2025/08/19 10:34:53 [notice] 349771#349771: *43 "^(PUT)$" matches "PUT", client: 127.0.0.1, server: localhost, request: "PUT /upload HTTP/1.1", host: "localhost:9001" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script if +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script if: false +2025/08/19 10:34:53 [debug] 349771#349771: *43 post rewrite phase: 4 +2025/08/19 10:34:53 [debug] 349771#349771: *43 generic phase: 5 +2025/08/19 10:34:53 [debug] 349771#349771: *43 generic phase: 6 +2025/08/19 10:34:53 [debug] 349771#349771: *43 generic phase: 7 +2025/08/19 10:34:53 [debug] 349771#349771: *43 access phase: 8 +2025/08/19 10:34:53 [debug] 349771#349771: *43 access phase: 9 +2025/08/19 10:34:53 [debug] 349771#349771: *43 access phase: 10 +2025/08/19 10:34:53 [debug] 349771#349771: *43 post access phase: 11 +2025/08/19 10:34:53 [debug] 349771#349771: *43 generic phase: 12 +2025/08/19 10:34:53 [debug] 349771#349771: *43 generic phase: 13 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http client request body preread 184 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http request body content length filter +2025/08/19 10:34:53 [debug] 349771#349771: *43 http body new buf t:1 f:0 00005CE0436093E8, pos 00005CE0436093E8, size: 184 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http read client request body +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: eof:0, avail:112 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: fd:6 112 of 112 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: avail:0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http client request body recv 112 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http body new buf t:1 f:0 00005CE04361B410, pos 00005CE04361B410, size: 112 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http client request body rest 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http init upstream, client timer: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 epoll add event: fd:6 op:3 ev:80002005 +2025/08/19 10:34:53 [debug] 349771#349771: *43 posix_memalign: 00005CE043610140:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "QUERY_STRING" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "QUERY_STRING: " +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "REQUEST_METHOD" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "PUT" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "REQUEST_METHOD: PUT" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "CONTENT_TYPE" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "text/plain" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "CONTENT_TYPE: text/plain" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "CONTENT_LENGTH" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "296" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "CONTENT_LENGTH: 296" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "SCRIPT_NAME" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "/upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "SCRIPT_NAME: /upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "REQUEST_URI" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "/upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "REQUEST_URI: /upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "DOCUMENT_URI" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "/upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "DOCUMENT_URI: /upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "DOCUMENT_ROOT" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "./blobs" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "DOCUMENT_ROOT: ./blobs" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "SERVER_PROTOCOL" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "HTTP/1.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "SERVER_PROTOCOL: HTTP/1.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "REQUEST_SCHEME" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "http" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "REQUEST_SCHEME: http" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "GATEWAY_INTERFACE" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "CGI/1.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "GATEWAY_INTERFACE: CGI/1.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "SERVER_SOFTWARE" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "nginx/" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "1.18.0" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "SERVER_SOFTWARE: nginx/1.18.0" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "REMOTE_ADDR" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "127.0.0.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "REMOTE_ADDR: 127.0.0.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "REMOTE_PORT" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "55690" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "REMOTE_PORT: 55690" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "SERVER_ADDR" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "127.0.0.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "SERVER_ADDR: 127.0.0.1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "SERVER_PORT" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "9001" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "SERVER_PORT: 9001" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "SERVER_NAME" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "localhost" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "SERVER_NAME: localhost" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "REDIRECT_STATUS" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "200" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "REDIRECT_STATUS: 200" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "SCRIPT_FILENAME" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script var: "./blobs" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http script copy: "/ginxsom.fcgi" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "SCRIPT_FILENAME: ./blobs/ginxsom.fcgi" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "HTTP_HOST: localhost:9001" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "HTTP_USER_AGENT: curl/8.15.0" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "HTTP_ACCEPT: */*" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "HTTP_AUTHORIZATION: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiJhZmFjMjAyY2ZlZTM3OWEwYzdlNzhkOWU0N2FjOGU0NmVjODkxMjZjOTRhMGI5MjIxNGU3NWEwMmMzZTE4YzJlIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTMsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI1NDVhMjI3N2RkNGI3YTY2ZTMyMGUxMmNkZDkyYmY2ZmJiZTEzODY5YjViYjVkNjY1YTAzYzgzZDQ1M2JhMmRlIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5MiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzM2NlNmNlNGViMTlhMTAxYzIxMDMzYzIyOWRkOTIwZWI4MzlhYzg4OGRkYmUyZTg2YTQwOTgzNzBmYTRmZTY3ODc3ODIxZGU5MzNlOGVlNDYzODU1ZDhlNzY1MTk0YzNkODZmYWVjNzYyZjljMGMwYWYxMjUwMzFkYjdhZDQ4In0=" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "HTTP_CONTENT_TYPE: text/plain" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "HTTP_CONTENT_DISPOSITION: attachment; filename="test_blob_1755614092.txt"" +2025/08/19 10:34:53 [debug] 349771#349771: *43 fastcgi param: "HTTP_CONTENT_LENGTH: 296" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http cleanup add: 00005CE04361B760 +2025/08/19 10:34:53 [debug] 349771#349771: *43 get rr peer, try: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 stream socket 10 +2025/08/19 10:34:53 [debug] 349771#349771: *43 epoll add connection: fd:10 ev:80002005 +2025/08/19 10:34:53 [debug] 349771#349771: *43 connect to unix:/tmp/ginxsom-fcgi.sock, fd:10 #44 +2025/08/19 10:34:53 [debug] 349771#349771: *43 connected +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream connect: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 posix_memalign: 00005CE0435EFF20:128 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream send request +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream send request body +2025/08/19 10:34:53 [debug] 349771#349771: *43 chain writer buf fl:0 s:1304 +2025/08/19 10:34:53 [debug] 349771#349771: *43 chain writer buf fl:0 s:184 +2025/08/19 10:34:53 [debug] 349771#349771: *43 chain writer buf fl:0 s:8 +2025/08/19 10:34:53 [debug] 349771#349771: *43 chain writer buf fl:0 s:112 +2025/08/19 10:34:53 [debug] 349771#349771: *43 chain writer buf fl:0 s:8 +2025/08/19 10:34:53 [debug] 349771#349771: *43 chain writer in: 00005CE04361B7F0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 writev: 1616 of 1616 +2025/08/19 10:34:53 [debug] 349771#349771: *43 chain writer out: 0000000000000000 +2025/08/19 10:34:53 [debug] 349771#349771: *43 event timer add: 10: 60000:180886325 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http finalize request: -4, "/upload?" a:1, c:2 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http request count:2 blk:0 +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:6 ev:0004 d:000075EA426D11E1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http run request: "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream check client, write event:1, "/upload" +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:10 ev:0004 d:000075EA426D12C9 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream request: "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream dummy handler +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: 59999 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:10 ev:2005 d:000075EA426D12C9 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream request: "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream process header +2025/08/19 10:34:53 [debug] 349771#349771: *43 malloc: 00005CE043611150:4096 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: eof:1, avail:-1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: fd:10 4096 of 4096 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: avail:40 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 01 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 06 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 01 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 10 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 08 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record length: 4104 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: FastCGI received request" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: METHOD=PUT, URI=/upload" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: handle_upload_request called" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: content_type=text/plain" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: content_length=296" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiJhZmFjMjAyY2ZlZTM3OWEwYzdlNzhkOWU0N2FjOGU0NmVjODkxMjZjOTRhMGI5MjIxNGU3NWEwMmMzZTE4YzJlIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTMsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI1NDVhMjI3N2RkNGI3YTY2ZTMyMGUxMmNkZDkyYmY2ZmJiZTEzODY5YjViYjVkNjY1YTAzYzgzZDQ1M2JhMmRlIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5MiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzM2NlNmNlNGViMTlhMTAxYzIxMDMzYzIyOWRkOTIwZWI4MzlhYzg4OGRkYmUyZTg2YTQwOTgzNzBmYTRmZTY3ODc3ODIxZGU5MzNlOGVlNDYzODU1ZDhlNzY1MTk0YzNkODZmYWVjNzYyZjljMGMwYWYxMjUwMzFkYjdhZDQ4In0=" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiJhZmFjMjAyY2ZlZTM3OWEwYzdlNzhkOWU0N2FjOGU0NmVjODkxMjZjOTRhMGI5MjIxNGU3NWEw..." +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"afac202cfee379a0c7e78d9e47ac8e46ec89126c94a0b92214e75a02c3e18c2e","pubkey":"79be..." +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: parse_authorization_header returned: 0" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Successfully parsed authorization header" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Event JSON: {"kind":24242,"id":"afac202cfee379a0c7e78d9e47ac8e46ec89126c94a0b92214e75a02c3e18c2e","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614093,"tags":[["t","..." +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Successfully parsed JSON event" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Found pubkey in JSON: 79be667ef9dcbbac..." +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac..." +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Successfully read DEBUG: Calculated SHA-256: 545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 posix_memalign: 00005CE043612160:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Saving file to: blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Successfully saved DEBUG: Content-Disposition header: attachment; filename="test_blob_1755614092.txt"" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Looking for filename= in Content-Disposition header" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Found filename= at position 12" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Filename value starts with: "test_blob_175561409" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Processing quoted filename" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Quoted filename length: DEBUG: Extracted quoted filename: 'test_blob_1755614092.txt'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Final filename after extraction: test_blob_1755614092.txt" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: insert_blob_metadata() called for sha256='545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Opening database at path: db/ginxsom.db" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Database opened successfully for writing" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Preparing SQL: INSERT INTO blobs (sha256, size, type, uploaded_at, uploader_pubkey, filename) VALUES (?, ?, ?, ?, ?, ?)" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: SQL prepared successfully, binding parameters" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Parameter values to bind:" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: 1. sha256 = '545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: 2. size = 296" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: 3. type = 'text/plain'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: 4. uploaded_at = 1755614093" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: 5. uploader_pubkey = '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: 6. filename = 'test_blob_1755614092.txt'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding parameter 1 (sha256)" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding parameter 2 (size)" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding parameter 3 (type)" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding parameter 4 (uploaded_at)" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding parameter 5 (uploader_pubkey)" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding uploader_pubkey as text: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding parameter 6 (filename)" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Binding filename as text: 'test_blob_1755614092.txt'" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Parameters bound, executing INSERT" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: INSERT successful" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Database closed, returning 1" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "DEBUG: Blob metadata successfully stored in database" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "Status: 200 OK" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header: "Content-Type: application/json" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi parser: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi header done +2025/08/19 10:34:53 [debug] 349771#349771: *43 posix_memalign: 00005CE043613170:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 posix_memalign: 00005CE04367A280:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:53 GMT +Content-Type: application/json +Transfer-Encoding: chunked +Connection: keep-alive +DEBUG: FastCGI received request +DEBUG: METHOD=PUT, URI=/upload +DEBUG: handle_upload_request called +DEBUG: content_type=text/plain +DEBUG: content_length=296 +DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiJhZmFjMjAyY2ZlZTM3OWEwYzdlNzhkOWU0N2FjOGU0NmVjODkxMjZjOTRhMGI5MjIxNGU3NWEwMmMzZTE4YzJlIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTMsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI1NDVhMjI3N2RkNGI3YTY2ZTMyMGUxMmNkZDkyYmY2ZmJiZTEzODY5YjViYjVkNjY1YTAzYzgzZDQ1M2JhMmRlIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5MiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzM2NlNmNlNGViMTlhMTAxYzIxMDMzYzIyOWRkOTIwZWI4MzlhYzg4OGRkYmUyZTg2YTQwOTgzNzBmYTRmZTY3ODc3ODIxZGU5MzNlOGVlNDYzODU1ZDhlNzY1MTk0YzNkODZmYWVjNzYyZjljMGMwYWYxMjUwMzFkYjdhZDQ4In0= +DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiJhZmFjMjAyY2ZlZTM3OWEwYzdlNzhkOWU0N2FjOGU0NmVjODkxMjZjOTRhMGI5MjIxNGU3NWEw... +DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"afac202cfee379a0c7e78d9e47ac8e46ec89126c94a0b92214e75a02c3e18c2e","pubkey":"79be... +DEBUG: parse_authorization_header returned: 0 +DEBUG: Successfully parsed authorization header +DEBUG: Event JSON: {"kind":24242,"id":"afac202cfee379a0c7e78d9e47ac8e46ec89126c94a0b92214e75a02c3e18c2e","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614093,"tags":[["t","... +DEBUG: Successfully parsed JSON event +DEBUG: Found pubkey in JSON: 79be667ef9dcbbac... +DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac... +DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +DEBUG: Successfully read DEBUG: Calculated SHA-256: 545a2277dd4b7a66e320e12cdd92bf6fbbe138 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write new buf t:1 f:0 00005CE04367A2A0, pos 00005CE04367A2A0, size: 3991 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http write filter: l:0 f:0 s:3991 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http write filter limit 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 writev: 3991 of 3991 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http write filter 0000000000000000 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http cacheable: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream process upstream +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe read upstream: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe preread: 295 +2025/08/19 10:34:53 [debug] 349771#349771: *43 input buf #0 00005CE043612029 +2025/08/19 10:34:53 [debug] 349771#349771: *43 input buf 00005CE043612029 295 +2025/08/19 10:34:53 [debug] 349771#349771: *43 malloc: 00005CE04367B290:4096 +2025/08/19 10:34:53 [debug] 349771#349771: *43 readv: eof:1, avail:40 +2025/08/19 10:34:53 [debug] 349771#349771: *43 readv: 1, last:4096 +2025/08/19 10:34:53 [debug] 349771#349771: *43 readv: avail:0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe recv chain: 40 +2025/08/19 10:34:53 [debug] 349771#349771: *43 readv: eof:1, avail:0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 readv: 1, last:4056 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe recv chain: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe buf in s:1 t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe buf free s:0 t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 40 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe length: -1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 input buf #1 00005CE04367B290 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 01 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 06 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 01 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record length: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi closed stdout +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 01 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 03 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 01 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 08 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record byte: 00 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi record length: 8 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http fastcgi sent end request +2025/08/19 10:34:53 [debug] 349771#349771: *43 input buf 00005CE04367B290 16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe write downstream: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe write downstream flush in +2025/08/19 10:34:53 [debug] 349771#349771: *43 http output filter "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http copy filter: "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http postpone filter "/upload?" 00005CE04361B7B0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http chunk: 295 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http chunk: 16 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write new buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write new buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write new buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http write filter: l:0 f:0 s:318 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http copy filter: 0 "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 pipe write downstream done +2025/08/19 10:34:53 [debug] 349771#349771: *43 event timer: 10, old: 180886325, new: 180886332 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream exit: 0000000000000000 +2025/08/19 10:34:53 [debug] 349771#349771: *43 finalize http upstream request: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 finalize http fastcgi request +2025/08/19 10:34:53 [debug] 349771#349771: *43 free rr peer 1 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 close http upstream connection: 10 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE0435EFF20, unused: 48 +2025/08/19 10:34:53 [debug] 349771#349771: *43 event timer del: 10: 180886325 +2025/08/19 10:34:53 [debug] 349771#349771: *43 reusable connection: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http upstream temp fd: -1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http output filter "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http copy filter: "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http postpone filter "/upload?" 00005CE043613C98 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http chunk: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write old buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write old buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write old buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write old buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E5, size: 5 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http write filter: l:1 f:0 s:323 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http write filter limit 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 writev: 323 of 323 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http write filter 0000000000000000 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http copy filter: 0 "/upload?" +2025/08/19 10:34:53 [debug] 349771#349771: *43 http finalize request: 0, "/upload?" a:1, c:1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 set http keepalive handler +2025/08/19 10:34:53 [debug] 349771#349771: *43 http close request +2025/08/19 10:34:53 [debug] 349771#349771: *43 http log handler +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE04367B290 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE043611150 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE043624610, unused: 3 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE04361A980, unused: 8 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE043610140, unused: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE043612160, unused: 8 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE043613170, unused: 986 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE04367A280, unused: 73 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE0436090A0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 hc free: 0000000000000000 +2025/08/19 10:34:53 [debug] 349771#349771: *43 hc busy: 0000000000000000 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 tcp_nodelay +2025/08/19 10:34:53 [debug] 349771#349771: *43 reusable connection: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 event timer add: 6: 65000:180891332 +2025/08/19 10:34:53 [debug] 349771#349771: *43 post event 00005CE04364A320 +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 6 +2025/08/19 10:34:53 [debug] 349771#349771: posted event 00005CE04364A320 +2025/08/19 10:34:53 [debug] 349771#349771: *43 delete posted event 00005CE04364A320 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http keepalive handler +2025/08/19 10:34:53 [debug] 349771#349771: *43 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: eof:0, avail:0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE0436090A0 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:6 ev:2005 d:000075EA426D11E1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 http keepalive handler +2025/08/19 10:34:53 [debug] 349771#349771: *43 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: eof:1, avail:-1 +2025/08/19 10:34:53 [debug] 349771#349771: *43 recv: fd:6 0 of 1024 +2025/08/19 10:34:53 [info] 349771#349771: *43 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:53 [debug] 349771#349771: *43 close http connection: 6 +2025/08/19 10:34:53 [debug] 349771#349771: *43 event timer del: 6: 180891332 +2025/08/19 10:34:53 [debug] 349771#349771: *43 reusable connection: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE0436090A0 +2025/08/19 10:34:53 [debug] 349771#349771: *43 free: 00005CE043606840, unused: 120 +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 4 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:53 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:53 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *45 accept: 127.0.0.1:55696 fd:6 +2025/08/19 10:34:53 [debug] 349771#349771: *45 event timer add: 6: 60000:180886342 +2025/08/19 10:34:53 [debug] 349771#349771: *45 reusable connection: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *45 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 6 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http wait request handler +2025/08/19 10:34:53 [debug] 349771#349771: *45 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:53 [debug] 349771#349771: *45 recv: eof:0, avail:-1 +2025/08/19 10:34:53 [debug] 349771#349771: *45 recv: fd:6 142 of 1024 +2025/08/19 10:34:53 [debug] 349771#349771: *45 reusable connection: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http process request line +2025/08/19 10:34:53 [debug] 349771#349771: *45 http request line: "GET /545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de HTTP/1.1" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http uri: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http args: "" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http exten: "" +2025/08/19 10:34:53 [debug] 349771#349771: *45 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http process request header line +2025/08/19 10:34:53 [debug] 349771#349771: *45 http header: "Host: localhost:9001" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http header: "Accept: */*" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http header done +2025/08/19 10:34:53 [debug] 349771#349771: *45 event timer del: 6: 180886342 +2025/08/19 10:34:53 [debug] 349771#349771: *45 generic phase: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 rewrite phase: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *45 test location: "/health" +2025/08/19 10:34:53 [debug] 349771#349771: *45 test location: "/debug/list" +2025/08/19 10:34:53 [debug] 349771#349771: *45 test location: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:53 [debug] 349771#349771: *45 using configuration "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http cl:-1 max:104857600 +2025/08/19 10:34:53 [debug] 349771#349771: *45 rewrite phase: 3 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script var +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script var: "GET" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script value: "HEAD" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script equal +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script equal: no +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script if +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script if: false +2025/08/19 10:34:53 [debug] 349771#349771: *45 post rewrite phase: 4 +2025/08/19 10:34:53 [debug] 349771#349771: *45 generic phase: 5 +2025/08/19 10:34:53 [debug] 349771#349771: *45 generic phase: 6 +2025/08/19 10:34:53 [debug] 349771#349771: *45 generic phase: 7 +2025/08/19 10:34:53 [debug] 349771#349771: *45 access phase: 8 +2025/08/19 10:34:53 [debug] 349771#349771: *45 access phase: 9 +2025/08/19 10:34:53 [debug] 349771#349771: *45 access phase: 10 +2025/08/19 10:34:53 [debug] 349771#349771: *45 post access phase: 11 +2025/08/19 10:34:53 [debug] 349771#349771: *45 generic phase: 12 +2025/08/19 10:34:53 [debug] 349771#349771: *45 try files handler +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".jpg" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.jpg" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.jpg" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".jpeg" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.jpeg" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.jpeg" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".png" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.png" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.png" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".webp" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.webp" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.webp" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".gif" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.gif" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.gif" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".pdf" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.pdf" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.pdf" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".mp4" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.mp4" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.mp4" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".mp3" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.mp3" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.mp3" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: "/" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script capture: "545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http script copy: ".txt" +2025/08/19 10:34:53 [debug] 349771#349771: *45 trying to use file: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt" "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt" +2025/08/19 10:34:53 [debug] 349771#349771: *45 try file uri: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt" +2025/08/19 10:34:53 [debug] 349771#349771: *45 generic phase: 13 +2025/08/19 10:34:53 [debug] 349771#349771: *45 content phase: 14 +2025/08/19 10:34:53 [debug] 349771#349771: *45 content phase: 15 +2025/08/19 10:34:53 [debug] 349771#349771: *45 content phase: 16 +2025/08/19 10:34:53 [debug] 349771#349771: *45 content phase: 17 +2025/08/19 10:34:53 [debug] 349771#349771: *45 content phase: 18 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http filename: "./blobs/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt" +2025/08/19 10:34:53 [debug] 349771#349771: *45 add cleanup: 00005CE04361AD60 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http static fd: 10 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http set discard body +2025/08/19 10:34:53 [debug] 349771#349771: *45 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:53 GMT +Content-Type: text/plain +Content-Length: 296 +Last-Modified: Tue, 19 Aug 2025 14:34:53 GMT +Connection: keep-alive +ETag: "68a48b8d-128" +Cache-Control: public, max-age=31536000, immutable +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-XSS-Protection: 1; mode=block +Accept-Ranges: bytes + +2025/08/19 10:34:53 [debug] 349771#349771: *45 write new buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http write filter: l:0 f:0 s:389 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http output filter "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt?" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http copy filter: "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt?" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http postpone filter "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt?" 00007FFDD38FD160 +2025/08/19 10:34:53 [debug] 349771#349771: *45 write old buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 write new buf t:0 f:1 0000000000000000, pos 0000000000000000, size: 0 file: 0, size: 296 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http write filter: l:1 f:0 s:685 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http write filter limit 0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 tcp_nopush +2025/08/19 10:34:53 [debug] 349771#349771: *45 writev: 389 of 389 +2025/08/19 10:34:53 [debug] 349771#349771: *45 sendfile: @0 296 +2025/08/19 10:34:53 [debug] 349771#349771: *45 sendfile: 296 of 296 @0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http write filter 0000000000000000 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http copy filter: 0 "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt?" +2025/08/19 10:34:53 [debug] 349771#349771: *45 http finalize request: 0, "/545a2277dd4b7a66e320e12cdd92bf6fbbe13869b5bb5d665a03c83d453ba2de.txt?" a:1, c:1 +2025/08/19 10:34:53 [debug] 349771#349771: *45 set http keepalive handler +2025/08/19 10:34:53 [debug] 349771#349771: *45 http close request +2025/08/19 10:34:53 [debug] 349771#349771: *45 http log handler +2025/08/19 10:34:53 [debug] 349771#349771: *45 run cleanup: 00005CE04361AD60 +2025/08/19 10:34:53 [debug] 349771#349771: *45 file cleanup: fd:10 +2025/08/19 10:34:53 [debug] 349771#349771: *45 free: 00005CE043624610, unused: 5 +2025/08/19 10:34:53 [debug] 349771#349771: *45 free: 00005CE04361A980, unused: 1848 +2025/08/19 10:34:53 [debug] 349771#349771: *45 free: 00005CE0436090A0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 hc free: 0000000000000000 +2025/08/19 10:34:53 [debug] 349771#349771: *45 hc busy: 0000000000000000 0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 reusable connection: 1 +2025/08/19 10:34:53 [debug] 349771#349771: *45 event timer add: 6: 65000:180891342 +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:53 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 http keepalive handler +2025/08/19 10:34:53 [debug] 349771#349771: *45 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:53 [debug] 349771#349771: *45 recv: eof:1, avail:-1 +2025/08/19 10:34:53 [debug] 349771#349771: *45 recv: fd:6 0 of 1024 +2025/08/19 10:34:53 [info] 349771#349771: *45 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:53 [debug] 349771#349771: *45 close http connection: 6 +2025/08/19 10:34:53 [debug] 349771#349771: *45 event timer del: 6: 180891342 +2025/08/19 10:34:53 [debug] 349771#349771: *45 reusable connection: 0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 free: 00005CE0436090A0 +2025/08/19 10:34:53 [debug] 349771#349771: *45 free: 00005CE043606840, unused: 136 +2025/08/19 10:34:53 [debug] 349771#349771: timer delta: 5 +2025/08/19 10:34:53 [debug] 349771#349771: worker cycle +2025/08/19 10:34:53 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:56 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:56 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *46 accept: 127.0.0.1:55702 fd:6 +2025/08/19 10:34:56 [debug] 349771#349771: *46 event timer add: 6: 60000:180889303 +2025/08/19 10:34:56 [debug] 349771#349771: *46 reusable connection: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 2956 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http wait request handler +2025/08/19 10:34:56 [debug] 349771#349771: *46 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:56 [debug] 349771#349771: *46 recv: eof:0, avail:-1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 recv: fd:6 84 of 1024 +2025/08/19 10:34:56 [debug] 349771#349771: *46 reusable connection: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http process request line +2025/08/19 10:34:56 [debug] 349771#349771: *46 http request line: "GET /health HTTP/1.1" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http uri: "/health" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http args: "" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http exten: "" +2025/08/19 10:34:56 [debug] 349771#349771: *46 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http process request header line +2025/08/19 10:34:56 [debug] 349771#349771: *46 http header: "Host: localhost:9001" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http header: "Accept: */*" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http header done +2025/08/19 10:34:56 [debug] 349771#349771: *46 event timer del: 6: 180889303 +2025/08/19 10:34:56 [debug] 349771#349771: *46 generic phase: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 rewrite phase: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 test location: "/health" +2025/08/19 10:34:56 [debug] 349771#349771: *46 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:56 [debug] 349771#349771: *46 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:34:56 [debug] 349771#349771: *46 using configuration "/health" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http cl:-1 max:104857600 +2025/08/19 10:34:56 [debug] 349771#349771: *46 rewrite phase: 3 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http set discard body +2025/08/19 10:34:56 [debug] 349771#349771: *46 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:56 GMT +Content-Type: application/octet-stream +Content-Length: 3 +Connection: keep-alive +Content-Type: text/plain + +2025/08/19 10:34:56 [debug] 349771#349771: *46 write new buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http write filter: l:0 f:0 s:196 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http output filter "/health?" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http copy filter: "/health?" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http postpone filter "/health?" 00007FFDD38FD1C0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 write old buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 write new buf t:0 f:0 0000000000000000, pos 00005CE04363AD7A, size: 3 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http write filter: l:1 f:0 s:199 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http write filter limit 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 writev: 199 of 199 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http write filter 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http copy filter: 0 "/health?" +2025/08/19 10:34:56 [debug] 349771#349771: *46 http finalize request: 0, "/health?" a:1, c:1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 set http keepalive handler +2025/08/19 10:34:56 [debug] 349771#349771: *46 http close request +2025/08/19 10:34:56 [debug] 349771#349771: *46 http log handler +2025/08/19 10:34:56 [debug] 349771#349771: *46 free: 00005CE043624610, unused: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 free: 00005CE04361A980, unused: 2736 +2025/08/19 10:34:56 [debug] 349771#349771: *46 free: 00005CE0436090A0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 hc free: 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *46 hc busy: 0000000000000000 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 tcp_nodelay +2025/08/19 10:34:56 [debug] 349771#349771: *46 reusable connection: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 event timer add: 6: 65000:180894304 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 http keepalive handler +2025/08/19 10:34:56 [debug] 349771#349771: *46 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:56 [debug] 349771#349771: *46 recv: eof:1, avail:-1 +2025/08/19 10:34:56 [debug] 349771#349771: *46 recv: fd:6 0 of 1024 +2025/08/19 10:34:56 [info] 349771#349771: *46 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:56 [debug] 349771#349771: *46 close http connection: 6 +2025/08/19 10:34:56 [debug] 349771#349771: *46 event timer del: 6: 180894304 +2025/08/19 10:34:56 [debug] 349771#349771: *46 reusable connection: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 free: 00005CE0436090A0 +2025/08/19 10:34:56 [debug] 349771#349771: *46 free: 00005CE043606840, unused: 136 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:56 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:56 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 accept: 127.0.0.1:55712 fd:6 +2025/08/19 10:34:56 [debug] 349771#349771: *47 event timer add: 6: 60000:180889586 +2025/08/19 10:34:56 [debug] 349771#349771: *47 reusable connection: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 282 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http wait request handler +2025/08/19 10:34:56 [debug] 349771#349771: *47 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: eof:0, avail:-1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: fd:6 1024 of 1024 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: avail:112 +2025/08/19 10:34:56 [debug] 349771#349771: *47 reusable connection: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http process request line +2025/08/19 10:34:56 [debug] 349771#349771: *47 http request line: "PUT /upload HTTP/1.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http uri: "/upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http args: "" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http exten: "" +2025/08/19 10:34:56 [debug] 349771#349771: *47 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http process request header line +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header: "Host: localhost:9001" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header: "Accept: */*" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header: "Authorization: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIyOGY1Yjg3NjA3YzExMWU1NTNiOTY2MjA5ODBlNDlhZGUwN2NkMjFlNGJkOGU5MjgwMGM4ZjRlYjc2MTE1YzMyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI5ODY4MTkwMGJkOTdhYWJjNGE3ZDIzNDFiYzUyY2M4ZDY4N2U3YzdiNGRiZDA4OTNmNjQ3MDI0MjYxNGQxMTAwIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjM1NWMxOWU3YWU1M2Q0YjBjNWZhYTlmYzEzNDI3YTI2MmFjZGQxMWFhMmM2OGM1N2Y5YTRjNDM0YTU2NzBhNWMzYzcxOGVmOGRlMzg5MWFmYjgxODUzNDkxZDA1MDZjODgyM2Q2YjRjMWQwZTg1OGNlODc0ZTAyNjE2MDgxZTFjIn0=" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header: "Content-Type: text/plain" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header: "Content-Disposition: attachment; filename="test_blob_1755614096.txt"" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header: "Content-Length: 296" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http header done +2025/08/19 10:34:56 [debug] 349771#349771: *47 event timer del: 6: 180889586 +2025/08/19 10:34:56 [debug] 349771#349771: *47 generic phase: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 rewrite phase: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 test location: "/health" +2025/08/19 10:34:56 [debug] 349771#349771: *47 test location: "/upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:56 [debug] 349771#349771: *47 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:34:56 [debug] 349771#349771: *47 using configuration "/upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http cl:296 max:104857600 +2025/08/19 10:34:56 [debug] 349771#349771: *47 rewrite phase: 3 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "PUT" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script regex: "^(PUT)$" +2025/08/19 10:34:56 [notice] 349771#349771: *47 "^(PUT)$" matches "PUT", client: 127.0.0.1, server: localhost, request: "PUT /upload HTTP/1.1", host: "localhost:9001" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script if +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script if: false +2025/08/19 10:34:56 [debug] 349771#349771: *47 post rewrite phase: 4 +2025/08/19 10:34:56 [debug] 349771#349771: *47 generic phase: 5 +2025/08/19 10:34:56 [debug] 349771#349771: *47 generic phase: 6 +2025/08/19 10:34:56 [debug] 349771#349771: *47 generic phase: 7 +2025/08/19 10:34:56 [debug] 349771#349771: *47 access phase: 8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 access phase: 9 +2025/08/19 10:34:56 [debug] 349771#349771: *47 access phase: 10 +2025/08/19 10:34:56 [debug] 349771#349771: *47 post access phase: 11 +2025/08/19 10:34:56 [debug] 349771#349771: *47 generic phase: 12 +2025/08/19 10:34:56 [debug] 349771#349771: *47 generic phase: 13 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http client request body preread 184 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http request body content length filter +2025/08/19 10:34:56 [debug] 349771#349771: *47 http body new buf t:1 f:0 00005CE0436093E8, pos 00005CE0436093E8, size: 184 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http read client request body +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: eof:0, avail:112 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: fd:6 112 of 112 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: avail:0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http client request body recv 112 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http body new buf t:1 f:0 00005CE04361B410, pos 00005CE04361B410, size: 112 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http client request body rest 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http init upstream, client timer: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 epoll add event: fd:6 op:3 ev:80002005 +2025/08/19 10:34:56 [debug] 349771#349771: *47 posix_memalign: 00005CE043610140:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "QUERY_STRING" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "QUERY_STRING: " +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "REQUEST_METHOD" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "PUT" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "REQUEST_METHOD: PUT" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "CONTENT_TYPE" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "text/plain" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "CONTENT_TYPE: text/plain" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "CONTENT_LENGTH" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "296" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "CONTENT_LENGTH: 296" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "SCRIPT_NAME" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "/upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "SCRIPT_NAME: /upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "REQUEST_URI" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "/upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "REQUEST_URI: /upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "DOCUMENT_URI" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "/upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "DOCUMENT_URI: /upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "DOCUMENT_ROOT" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "./blobs" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "DOCUMENT_ROOT: ./blobs" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "SERVER_PROTOCOL" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "HTTP/1.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "SERVER_PROTOCOL: HTTP/1.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "REQUEST_SCHEME" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "http" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "REQUEST_SCHEME: http" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "GATEWAY_INTERFACE" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "CGI/1.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "GATEWAY_INTERFACE: CGI/1.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "SERVER_SOFTWARE" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "nginx/" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "1.18.0" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "SERVER_SOFTWARE: nginx/1.18.0" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "REMOTE_ADDR" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "127.0.0.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "REMOTE_ADDR: 127.0.0.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "REMOTE_PORT" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "55712" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "REMOTE_PORT: 55712" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "SERVER_ADDR" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "127.0.0.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "SERVER_ADDR: 127.0.0.1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "SERVER_PORT" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "9001" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "SERVER_PORT: 9001" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "SERVER_NAME" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "localhost" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "SERVER_NAME: localhost" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "REDIRECT_STATUS" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "200" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "REDIRECT_STATUS: 200" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "SCRIPT_FILENAME" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script var: "./blobs" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http script copy: "/ginxsom.fcgi" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "SCRIPT_FILENAME: ./blobs/ginxsom.fcgi" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "HTTP_HOST: localhost:9001" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "HTTP_USER_AGENT: curl/8.15.0" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "HTTP_ACCEPT: */*" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "HTTP_AUTHORIZATION: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIyOGY1Yjg3NjA3YzExMWU1NTNiOTY2MjA5ODBlNDlhZGUwN2NkMjFlNGJkOGU5MjgwMGM4ZjRlYjc2MTE1YzMyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI5ODY4MTkwMGJkOTdhYWJjNGE3ZDIzNDFiYzUyY2M4ZDY4N2U3YzdiNGRiZDA4OTNmNjQ3MDI0MjYxNGQxMTAwIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjM1NWMxOWU3YWU1M2Q0YjBjNWZhYTlmYzEzNDI3YTI2MmFjZGQxMWFhMmM2OGM1N2Y5YTRjNDM0YTU2NzBhNWMzYzcxOGVmOGRlMzg5MWFmYjgxODUzNDkxZDA1MDZjODgyM2Q2YjRjMWQwZTg1OGNlODc0ZTAyNjE2MDgxZTFjIn0=" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "HTTP_CONTENT_TYPE: text/plain" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "HTTP_CONTENT_DISPOSITION: attachment; filename="test_blob_1755614096.txt"" +2025/08/19 10:34:56 [debug] 349771#349771: *47 fastcgi param: "HTTP_CONTENT_LENGTH: 296" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http cleanup add: 00005CE04361B760 +2025/08/19 10:34:56 [debug] 349771#349771: *47 get rr peer, try: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 stream socket 10 +2025/08/19 10:34:56 [debug] 349771#349771: *47 epoll add connection: fd:10 ev:80002005 +2025/08/19 10:34:56 [debug] 349771#349771: *47 connect to unix:/tmp/ginxsom-fcgi.sock, fd:10 #48 +2025/08/19 10:34:56 [debug] 349771#349771: *47 connected +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream connect: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 posix_memalign: 00005CE0435EFF20:128 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream send request +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream send request body +2025/08/19 10:34:56 [debug] 349771#349771: *47 chain writer buf fl:0 s:1304 +2025/08/19 10:34:56 [debug] 349771#349771: *47 chain writer buf fl:0 s:184 +2025/08/19 10:34:56 [debug] 349771#349771: *47 chain writer buf fl:0 s:8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 chain writer buf fl:0 s:112 +2025/08/19 10:34:56 [debug] 349771#349771: *47 chain writer buf fl:0 s:8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 chain writer in: 00005CE04361B7F0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 writev: 1616 of 1616 +2025/08/19 10:34:56 [debug] 349771#349771: *47 chain writer out: 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *47 event timer add: 10: 60000:180889586 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http finalize request: -4, "/upload?" a:1, c:2 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http request count:2 blk:0 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:6 ev:0004 d:000075EA426D11E0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http run request: "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream check client, write event:1, "/upload" +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:10 ev:0004 d:000075EA426D12C8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream request: "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream dummy handler +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 3 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 59997 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:10 ev:2005 d:000075EA426D12C8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream request: "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream process header +2025/08/19 10:34:56 [debug] 349771#349771: *47 malloc: 00005CE043611150:4096 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: eof:1, avail:-1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: fd:10 4096 of 4096 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: avail:40 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 01 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 06 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 01 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 10 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 08 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record length: 4104 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: FastCGI received request" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: METHOD=PUT, URI=/upload" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: handle_upload_request called" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: content_type=text/plain" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: content_length=296" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIyOGY1Yjg3NjA3YzExMWU1NTNiOTY2MjA5ODBlNDlhZGUwN2NkMjFlNGJkOGU5MjgwMGM4ZjRlYjc2MTE1YzMyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI5ODY4MTkwMGJkOTdhYWJjNGE3ZDIzNDFiYzUyY2M4ZDY4N2U3YzdiNGRiZDA4OTNmNjQ3MDI0MjYxNGQxMTAwIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjM1NWMxOWU3YWU1M2Q0YjBjNWZhYTlmYzEzNDI3YTI2MmFjZGQxMWFhMmM2OGM1N2Y5YTRjNDM0YTU2NzBhNWMzYzcxOGVmOGRlMzg5MWFmYjgxODUzNDkxZDA1MDZjODgyM2Q2YjRjMWQwZTg1OGNlODc0ZTAyNjE2MDgxZTFjIn0=" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiIyOGY1Yjg3NjA3YzExMWU1NTNiOTY2MjA5ODBlNDlhZGUwN2NkMjFlNGJkOGU5MjgwMGM4ZjRl..." +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"28f5b87607c111e553b96620980e49ade07cd21e4bd8e92800c8f4eb76115c32","pubkey":"79be..." +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: parse_authorization_header returned: 0" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Successfully parsed authorization header" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Event JSON: {"kind":24242,"id":"28f5b87607c111e553b96620980e49ade07cd21e4bd8e92800c8f4eb76115c32","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614096,"tags":[["t","..." +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Successfully parsed JSON event" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Found pubkey in JSON: 79be667ef9dcbbac..." +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac..." +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Successfully read DEBUG: Calculated SHA-256: 98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 posix_memalign: 00005CE043612160:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Saving file to: blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Successfully saved DEBUG: Content-Disposition header: attachment; filename="test_blob_1755614096.txt"" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Looking for filename= in Content-Disposition header" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Found filename= at position 12" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Filename value starts with: "test_blob_175561409" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Processing quoted filename" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Quoted filename length: DEBUG: Extracted quoted filename: 'test_blob_1755614096.txt'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Final filename after extraction: test_blob_1755614096.txt" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: insert_blob_metadata() called for sha256='98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Opening database at path: db/ginxsom.db" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Database opened successfully for writing" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Preparing SQL: INSERT INTO blobs (sha256, size, type, uploaded_at, uploader_pubkey, filename) VALUES (?, ?, ?, ?, ?, ?)" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: SQL prepared successfully, binding parameters" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Parameter values to bind:" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: 1. sha256 = '98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: 2. size = 296" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: 3. type = 'text/plain'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: 4. uploaded_at = 1755614096" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: 5. uploader_pubkey = '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: 6. filename = 'test_blob_1755614096.txt'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding parameter 1 (sha256)" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding parameter 2 (size)" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding parameter 3 (type)" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding parameter 4 (uploaded_at)" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding parameter 5 (uploader_pubkey)" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding uploader_pubkey as text: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding parameter 6 (filename)" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Binding filename as text: 'test_blob_1755614096.txt'" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Parameters bound, executing INSERT" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: INSERT successful" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Database closed, returning 1" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "DEBUG: Blob metadata successfully stored in database" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "Status: 200 OK" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header: "Content-Type: application/json" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi parser: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi header done +2025/08/19 10:34:56 [debug] 349771#349771: *47 posix_memalign: 00005CE043613170:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 posix_memalign: 00005CE04367A280:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:56 GMT +Content-Type: application/json +Transfer-Encoding: chunked +Connection: keep-alive +DEBUG: FastCGI received request +DEBUG: METHOD=PUT, URI=/upload +DEBUG: handle_upload_request called +DEBUG: content_type=text/plain +DEBUG: content_length=296 +DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIyOGY1Yjg3NjA3YzExMWU1NTNiOTY2MjA5ODBlNDlhZGUwN2NkMjFlNGJkOGU5MjgwMGM4ZjRlYjc2MTE1YzMyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCI5ODY4MTkwMGJkOTdhYWJjNGE3ZDIzNDFiYzUyY2M4ZDY4N2U3YzdiNGRiZDA4OTNmNjQ3MDI0MjYxNGQxMTAwIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjM1NWMxOWU3YWU1M2Q0YjBjNWZhYTlmYzEzNDI3YTI2MmFjZGQxMWFhMmM2OGM1N2Y5YTRjNDM0YTU2NzBhNWMzYzcxOGVmOGRlMzg5MWFmYjgxODUzNDkxZDA1MDZjODgyM2Q2YjRjMWQwZTg1OGNlODc0ZTAyNjE2MDgxZTFjIn0= +DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiIyOGY1Yjg3NjA3YzExMWU1NTNiOTY2MjA5ODBlNDlhZGUwN2NkMjFlNGJkOGU5MjgwMGM4ZjRl... +DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"28f5b87607c111e553b96620980e49ade07cd21e4bd8e92800c8f4eb76115c32","pubkey":"79be... +DEBUG: parse_authorization_header returned: 0 +DEBUG: Successfully parsed authorization header +DEBUG: Event JSON: {"kind":24242,"id":"28f5b87607c111e553b96620980e49ade07cd21e4bd8e92800c8f4eb76115c32","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614096,"tags":[["t","... +DEBUG: Successfully parsed JSON event +DEBUG: Found pubkey in JSON: 79be667ef9dcbbac... +DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac... +DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +DEBUG: Successfully read DEBUG: Calculated SHA-256: 98681900bd97aabc4a7d2341bc52cc8d687e7c +2025/08/19 10:34:56 [debug] 349771#349771: *47 write new buf t:1 f:0 00005CE04367A2A0, pos 00005CE04367A2A0, size: 3991 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http write filter: l:0 f:0 s:3991 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http write filter limit 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 writev: 3991 of 3991 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http write filter 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http cacheable: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream process upstream +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe read upstream: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe preread: 295 +2025/08/19 10:34:56 [debug] 349771#349771: *47 input buf #0 00005CE043612029 +2025/08/19 10:34:56 [debug] 349771#349771: *47 input buf 00005CE043612029 295 +2025/08/19 10:34:56 [debug] 349771#349771: *47 malloc: 00005CE04367B290:4096 +2025/08/19 10:34:56 [debug] 349771#349771: *47 readv: eof:1, avail:40 +2025/08/19 10:34:56 [debug] 349771#349771: *47 readv: 1, last:4096 +2025/08/19 10:34:56 [debug] 349771#349771: *47 readv: avail:0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe recv chain: 40 +2025/08/19 10:34:56 [debug] 349771#349771: *47 readv: eof:1, avail:0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 readv: 1, last:4056 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe recv chain: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe buf in s:1 t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe buf free s:0 t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 40 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe length: -1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 input buf #1 00005CE04367B290 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 01 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 06 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 01 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record length: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi closed stdout +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 01 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 03 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 01 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 08 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record byte: 00 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi record length: 8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http fastcgi sent end request +2025/08/19 10:34:56 [debug] 349771#349771: *47 input buf 00005CE04367B290 16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe write downstream: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe write downstream flush in +2025/08/19 10:34:56 [debug] 349771#349771: *47 http output filter "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http copy filter: "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http postpone filter "/upload?" 00005CE04361B7B0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http chunk: 295 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http chunk: 16 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write new buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write new buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write new buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http write filter: l:0 f:0 s:318 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http copy filter: 0 "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 pipe write downstream done +2025/08/19 10:34:56 [debug] 349771#349771: *47 event timer: 10, old: 180889586, new: 180889591 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream exit: 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *47 finalize http upstream request: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 finalize http fastcgi request +2025/08/19 10:34:56 [debug] 349771#349771: *47 free rr peer 1 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 close http upstream connection: 10 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE0435EFF20, unused: 48 +2025/08/19 10:34:56 [debug] 349771#349771: *47 event timer del: 10: 180889586 +2025/08/19 10:34:56 [debug] 349771#349771: *47 reusable connection: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http upstream temp fd: -1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http output filter "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http copy filter: "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http postpone filter "/upload?" 00005CE043613C98 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http chunk: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write old buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write old buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write old buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write old buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E5, size: 5 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http write filter: l:1 f:0 s:323 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http write filter limit 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 writev: 323 of 323 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http write filter 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http copy filter: 0 "/upload?" +2025/08/19 10:34:56 [debug] 349771#349771: *47 http finalize request: 0, "/upload?" a:1, c:1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 set http keepalive handler +2025/08/19 10:34:56 [debug] 349771#349771: *47 http close request +2025/08/19 10:34:56 [debug] 349771#349771: *47 http log handler +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE04367B290 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE043611150 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE043624610, unused: 3 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE04361A980, unused: 8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE043610140, unused: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE043612160, unused: 8 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE043613170, unused: 986 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE04367A280, unused: 73 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE0436090A0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 hc free: 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *47 hc busy: 0000000000000000 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 tcp_nodelay +2025/08/19 10:34:56 [debug] 349771#349771: *47 reusable connection: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 event timer add: 6: 65000:180894591 +2025/08/19 10:34:56 [debug] 349771#349771: *47 post event 00005CE04364A320 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 2 +2025/08/19 10:34:56 [debug] 349771#349771: posted event 00005CE04364A320 +2025/08/19 10:34:56 [debug] 349771#349771: *47 delete posted event 00005CE04364A320 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http keepalive handler +2025/08/19 10:34:56 [debug] 349771#349771: *47 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: eof:0, avail:0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE0436090A0 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:6 ev:2005 d:000075EA426D11E0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 http keepalive handler +2025/08/19 10:34:56 [debug] 349771#349771: *47 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: eof:1, avail:-1 +2025/08/19 10:34:56 [debug] 349771#349771: *47 recv: fd:6 0 of 1024 +2025/08/19 10:34:56 [info] 349771#349771: *47 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:56 [debug] 349771#349771: *47 close http connection: 6 +2025/08/19 10:34:56 [debug] 349771#349771: *47 event timer del: 6: 180894591 +2025/08/19 10:34:56 [debug] 349771#349771: *47 reusable connection: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE0436090A0 +2025/08/19 10:34:56 [debug] 349771#349771: *47 free: 00005CE043606840, unused: 120 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 2 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:56 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:56 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *49 accept: 127.0.0.1:55718 fd:6 +2025/08/19 10:34:56 [debug] 349771#349771: *49 event timer add: 6: 60000:180889599 +2025/08/19 10:34:56 [debug] 349771#349771: *49 reusable connection: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 6 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http wait request handler +2025/08/19 10:34:56 [debug] 349771#349771: *49 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:56 [debug] 349771#349771: *49 recv: eof:0, avail:-1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 recv: fd:6 142 of 1024 +2025/08/19 10:34:56 [debug] 349771#349771: *49 reusable connection: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http process request line +2025/08/19 10:34:56 [debug] 349771#349771: *49 http request line: "GET /98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100 HTTP/1.1" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http uri: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http args: "" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http exten: "" +2025/08/19 10:34:56 [debug] 349771#349771: *49 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http process request header line +2025/08/19 10:34:56 [debug] 349771#349771: *49 http header: "Host: localhost:9001" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http header: "Accept: */*" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http header done +2025/08/19 10:34:56 [debug] 349771#349771: *49 event timer del: 6: 180889599 +2025/08/19 10:34:56 [debug] 349771#349771: *49 generic phase: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 rewrite phase: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 test location: "/health" +2025/08/19 10:34:56 [debug] 349771#349771: *49 test location: "/debug/list" +2025/08/19 10:34:56 [debug] 349771#349771: *49 test location: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:56 [debug] 349771#349771: *49 using configuration "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http cl:-1 max:104857600 +2025/08/19 10:34:56 [debug] 349771#349771: *49 rewrite phase: 3 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script var +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script var: "GET" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script value: "HEAD" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script equal +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script equal: no +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script if +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script if: false +2025/08/19 10:34:56 [debug] 349771#349771: *49 post rewrite phase: 4 +2025/08/19 10:34:56 [debug] 349771#349771: *49 generic phase: 5 +2025/08/19 10:34:56 [debug] 349771#349771: *49 generic phase: 6 +2025/08/19 10:34:56 [debug] 349771#349771: *49 generic phase: 7 +2025/08/19 10:34:56 [debug] 349771#349771: *49 access phase: 8 +2025/08/19 10:34:56 [debug] 349771#349771: *49 access phase: 9 +2025/08/19 10:34:56 [debug] 349771#349771: *49 access phase: 10 +2025/08/19 10:34:56 [debug] 349771#349771: *49 post access phase: 11 +2025/08/19 10:34:56 [debug] 349771#349771: *49 generic phase: 12 +2025/08/19 10:34:56 [debug] 349771#349771: *49 try files handler +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".jpg" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.jpg" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.jpg" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".jpeg" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.jpeg" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.jpeg" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".png" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.png" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.png" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".webp" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.webp" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.webp" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".gif" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.gif" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.gif" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".pdf" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.pdf" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.pdf" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".mp4" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.mp4" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.mp4" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".mp3" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.mp3" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.mp3" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: "/" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script capture: "98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http script copy: ".txt" +2025/08/19 10:34:56 [debug] 349771#349771: *49 trying to use file: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt" "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt" +2025/08/19 10:34:56 [debug] 349771#349771: *49 try file uri: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt" +2025/08/19 10:34:56 [debug] 349771#349771: *49 generic phase: 13 +2025/08/19 10:34:56 [debug] 349771#349771: *49 content phase: 14 +2025/08/19 10:34:56 [debug] 349771#349771: *49 content phase: 15 +2025/08/19 10:34:56 [debug] 349771#349771: *49 content phase: 16 +2025/08/19 10:34:56 [debug] 349771#349771: *49 content phase: 17 +2025/08/19 10:34:56 [debug] 349771#349771: *49 content phase: 18 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http filename: "./blobs/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt" +2025/08/19 10:34:56 [debug] 349771#349771: *49 add cleanup: 00005CE04361AD60 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http static fd: 10 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http set discard body +2025/08/19 10:34:56 [debug] 349771#349771: *49 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:56 GMT +Content-Type: text/plain +Content-Length: 296 +Last-Modified: Tue, 19 Aug 2025 14:34:56 GMT +Connection: keep-alive +ETag: "68a48b90-128" +Cache-Control: public, max-age=31536000, immutable +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-XSS-Protection: 1; mode=block +Accept-Ranges: bytes + +2025/08/19 10:34:56 [debug] 349771#349771: *49 write new buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http write filter: l:0 f:0 s:389 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http output filter "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt?" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http copy filter: "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt?" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http postpone filter "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt?" 00007FFDD38FD160 +2025/08/19 10:34:56 [debug] 349771#349771: *49 write old buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 write new buf t:0 f:1 0000000000000000, pos 0000000000000000, size: 0 file: 0, size: 296 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http write filter: l:1 f:0 s:685 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http write filter limit 0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 tcp_nopush +2025/08/19 10:34:56 [debug] 349771#349771: *49 writev: 389 of 389 +2025/08/19 10:34:56 [debug] 349771#349771: *49 sendfile: @0 296 +2025/08/19 10:34:56 [debug] 349771#349771: *49 sendfile: 296 of 296 @0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http write filter 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http copy filter: 0 "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt?" +2025/08/19 10:34:56 [debug] 349771#349771: *49 http finalize request: 0, "/98681900bd97aabc4a7d2341bc52cc8d687e7c7b4dbd0893f6470242614d1100.txt?" a:1, c:1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 set http keepalive handler +2025/08/19 10:34:56 [debug] 349771#349771: *49 http close request +2025/08/19 10:34:56 [debug] 349771#349771: *49 http log handler +2025/08/19 10:34:56 [debug] 349771#349771: *49 run cleanup: 00005CE04361AD60 +2025/08/19 10:34:56 [debug] 349771#349771: *49 file cleanup: fd:10 +2025/08/19 10:34:56 [debug] 349771#349771: *49 free: 00005CE043624610, unused: 5 +2025/08/19 10:34:56 [debug] 349771#349771: *49 free: 00005CE04361A980, unused: 1848 +2025/08/19 10:34:56 [debug] 349771#349771: *49 free: 00005CE0436090A0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 hc free: 0000000000000000 +2025/08/19 10:34:56 [debug] 349771#349771: *49 hc busy: 0000000000000000 0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 reusable connection: 1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 event timer add: 6: 65000:180894599 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:56 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 http keepalive handler +2025/08/19 10:34:56 [debug] 349771#349771: *49 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:56 [debug] 349771#349771: *49 recv: eof:1, avail:-1 +2025/08/19 10:34:56 [debug] 349771#349771: *49 recv: fd:6 0 of 1024 +2025/08/19 10:34:56 [info] 349771#349771: *49 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:56 [debug] 349771#349771: *49 close http connection: 6 +2025/08/19 10:34:56 [debug] 349771#349771: *49 event timer del: 6: 180894599 +2025/08/19 10:34:56 [debug] 349771#349771: *49 reusable connection: 0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 free: 00005CE0436090A0 +2025/08/19 10:34:56 [debug] 349771#349771: *49 free: 00005CE043606840, unused: 136 +2025/08/19 10:34:56 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:34:56 [debug] 349771#349771: worker cycle +2025/08/19 10:34:56 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:57 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:57 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *50 accept: 127.0.0.1:55724 fd:6 +2025/08/19 10:34:57 [debug] 349771#349771: *50 event timer add: 6: 60000:180890470 +2025/08/19 10:34:57 [debug] 349771#349771: *50 reusable connection: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *50 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 870 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http wait request handler +2025/08/19 10:34:57 [debug] 349771#349771: *50 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:57 [debug] 349771#349771: *50 recv: eof:0, avail:-1 +2025/08/19 10:34:57 [debug] 349771#349771: *50 recv: fd:6 84 of 1024 +2025/08/19 10:34:57 [debug] 349771#349771: *50 reusable connection: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http process request line +2025/08/19 10:34:57 [debug] 349771#349771: *50 http request line: "GET /health HTTP/1.1" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http uri: "/health" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http args: "" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http exten: "" +2025/08/19 10:34:57 [debug] 349771#349771: *50 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http process request header line +2025/08/19 10:34:57 [debug] 349771#349771: *50 http header: "Host: localhost:9001" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http header: "Accept: */*" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http header done +2025/08/19 10:34:57 [debug] 349771#349771: *50 event timer del: 6: 180890470 +2025/08/19 10:34:57 [debug] 349771#349771: *50 generic phase: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 rewrite phase: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *50 test location: "/health" +2025/08/19 10:34:57 [debug] 349771#349771: *50 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:57 [debug] 349771#349771: *50 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:34:57 [debug] 349771#349771: *50 using configuration "/health" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http cl:-1 max:104857600 +2025/08/19 10:34:57 [debug] 349771#349771: *50 rewrite phase: 3 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http set discard body +2025/08/19 10:34:57 [debug] 349771#349771: *50 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:57 GMT +Content-Type: application/octet-stream +Content-Length: 3 +Connection: keep-alive +Content-Type: text/plain + +2025/08/19 10:34:57 [debug] 349771#349771: *50 write new buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http write filter: l:0 f:0 s:196 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http output filter "/health?" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http copy filter: "/health?" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http postpone filter "/health?" 00007FFDD38FD1C0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 write old buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 write new buf t:0 f:0 0000000000000000, pos 00005CE04363AD7A, size: 3 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http write filter: l:1 f:0 s:199 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http write filter limit 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 writev: 199 of 199 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http write filter 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http copy filter: 0 "/health?" +2025/08/19 10:34:57 [debug] 349771#349771: *50 http finalize request: 0, "/health?" a:1, c:1 +2025/08/19 10:34:57 [debug] 349771#349771: *50 set http keepalive handler +2025/08/19 10:34:57 [debug] 349771#349771: *50 http close request +2025/08/19 10:34:57 [debug] 349771#349771: *50 http log handler +2025/08/19 10:34:57 [debug] 349771#349771: *50 free: 00005CE043624610, unused: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 free: 00005CE04361A980, unused: 2736 +2025/08/19 10:34:57 [debug] 349771#349771: *50 free: 00005CE0436090A0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 hc free: 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *50 hc busy: 0000000000000000 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 tcp_nodelay +2025/08/19 10:34:57 [debug] 349771#349771: *50 reusable connection: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *50 event timer add: 6: 65000:180895470 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 http keepalive handler +2025/08/19 10:34:57 [debug] 349771#349771: *50 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:57 [debug] 349771#349771: *50 recv: eof:1, avail:-1 +2025/08/19 10:34:57 [debug] 349771#349771: *50 recv: fd:6 0 of 1024 +2025/08/19 10:34:57 [info] 349771#349771: *50 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:57 [debug] 349771#349771: *50 close http connection: 6 +2025/08/19 10:34:57 [debug] 349771#349771: *50 event timer del: 6: 180895470 +2025/08/19 10:34:57 [debug] 349771#349771: *50 reusable connection: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 free: 00005CE0436090A0 +2025/08/19 10:34:57 [debug] 349771#349771: *50 free: 00005CE043606840, unused: 136 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:57 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:57 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 accept: 127.0.0.1:55726 fd:6 +2025/08/19 10:34:57 [debug] 349771#349771: *51 event timer add: 6: 60000:180890782 +2025/08/19 10:34:57 [debug] 349771#349771: *51 reusable connection: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 311 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http wait request handler +2025/08/19 10:34:57 [debug] 349771#349771: *51 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: eof:0, avail:-1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: fd:6 1024 of 1024 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: avail:112 +2025/08/19 10:34:57 [debug] 349771#349771: *51 reusable connection: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http process request line +2025/08/19 10:34:57 [debug] 349771#349771: *51 http request line: "PUT /upload HTTP/1.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http uri: "/upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http args: "" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http exten: "" +2025/08/19 10:34:57 [debug] 349771#349771: *51 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http process request header line +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header: "Host: localhost:9001" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header: "Accept: */*" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header: "Authorization: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiI3NzI3MmU4ZTA5MzE4YjVhZjljNjcyOGYwNTE3YjhlNTIyN2U5NTlhNGM5NmI4ZjE0Mjg0YjllNjAyZjRjMTU5IiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTcsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCIyMjkxNzA3ODMzN2E5ZGYxMTk5NzliOGRmMmJiYjU5YWFmY2M0MjE2MWM1MGJkNzg4MWU2OGUyNzM2OWYzNDNjIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NyJdXSwiY29udGVudCI6IiIsInNpZyI6Ijg0OTA5NDE5NjEwMjlmNmJiYjAwZmUwMDZmMDQ0ZjAxODQxNTQ5ZjA1ZWE1ODVhYmViMjBmNDQxMDk2M2I4Nzk2YzgzZmNjMDlmZDhjZGEwNmNkYWYxNzYwZWNkOGExM2FmZmFmYjAzMjQ4ZTNiYzk5OTUzYTdlNTVjYzJiNmMxIn0=" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header: "Content-Type: text/plain" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header: "Content-Disposition: attachment; filename="test_blob_1755614097.txt"" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header: "Content-Length: 296" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http header done +2025/08/19 10:34:57 [debug] 349771#349771: *51 event timer del: 6: 180890782 +2025/08/19 10:34:57 [debug] 349771#349771: *51 generic phase: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 rewrite phase: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 test location: "/health" +2025/08/19 10:34:57 [debug] 349771#349771: *51 test location: "/upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:57 [debug] 349771#349771: *51 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:34:57 [debug] 349771#349771: *51 using configuration "/upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http cl:296 max:104857600 +2025/08/19 10:34:57 [debug] 349771#349771: *51 rewrite phase: 3 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "PUT" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script regex: "^(PUT)$" +2025/08/19 10:34:57 [notice] 349771#349771: *51 "^(PUT)$" matches "PUT", client: 127.0.0.1, server: localhost, request: "PUT /upload HTTP/1.1", host: "localhost:9001" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script if +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script if: false +2025/08/19 10:34:57 [debug] 349771#349771: *51 post rewrite phase: 4 +2025/08/19 10:34:57 [debug] 349771#349771: *51 generic phase: 5 +2025/08/19 10:34:57 [debug] 349771#349771: *51 generic phase: 6 +2025/08/19 10:34:57 [debug] 349771#349771: *51 generic phase: 7 +2025/08/19 10:34:57 [debug] 349771#349771: *51 access phase: 8 +2025/08/19 10:34:57 [debug] 349771#349771: *51 access phase: 9 +2025/08/19 10:34:57 [debug] 349771#349771: *51 access phase: 10 +2025/08/19 10:34:57 [debug] 349771#349771: *51 post access phase: 11 +2025/08/19 10:34:57 [debug] 349771#349771: *51 generic phase: 12 +2025/08/19 10:34:57 [debug] 349771#349771: *51 generic phase: 13 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http client request body preread 184 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http request body content length filter +2025/08/19 10:34:57 [debug] 349771#349771: *51 http body new buf t:1 f:0 00005CE0436093E8, pos 00005CE0436093E8, size: 184 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http read client request body +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: eof:0, avail:112 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: fd:6 112 of 112 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: avail:0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http client request body recv 112 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http body new buf t:1 f:0 00005CE04361B410, pos 00005CE04361B410, size: 112 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http client request body rest 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http init upstream, client timer: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 epoll add event: fd:6 op:3 ev:80002005 +2025/08/19 10:34:57 [debug] 349771#349771: *51 posix_memalign: 00005CE043610140:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "QUERY_STRING" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "QUERY_STRING: " +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "REQUEST_METHOD" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "PUT" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "REQUEST_METHOD: PUT" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "CONTENT_TYPE" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "text/plain" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "CONTENT_TYPE: text/plain" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "CONTENT_LENGTH" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "296" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "CONTENT_LENGTH: 296" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "SCRIPT_NAME" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "/upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "SCRIPT_NAME: /upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "REQUEST_URI" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "/upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "REQUEST_URI: /upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "DOCUMENT_URI" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "/upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "DOCUMENT_URI: /upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "DOCUMENT_ROOT" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "./blobs" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "DOCUMENT_ROOT: ./blobs" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "SERVER_PROTOCOL" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "HTTP/1.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "SERVER_PROTOCOL: HTTP/1.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "REQUEST_SCHEME" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "http" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "REQUEST_SCHEME: http" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "GATEWAY_INTERFACE" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "CGI/1.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "GATEWAY_INTERFACE: CGI/1.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "SERVER_SOFTWARE" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "nginx/" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "1.18.0" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "SERVER_SOFTWARE: nginx/1.18.0" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "REMOTE_ADDR" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "127.0.0.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "REMOTE_ADDR: 127.0.0.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "REMOTE_PORT" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "55726" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "REMOTE_PORT: 55726" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "SERVER_ADDR" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "127.0.0.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "SERVER_ADDR: 127.0.0.1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "SERVER_PORT" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "9001" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "SERVER_PORT: 9001" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "SERVER_NAME" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "localhost" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "SERVER_NAME: localhost" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "REDIRECT_STATUS" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "200" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "REDIRECT_STATUS: 200" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "SCRIPT_FILENAME" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script var: "./blobs" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http script copy: "/ginxsom.fcgi" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "SCRIPT_FILENAME: ./blobs/ginxsom.fcgi" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "HTTP_HOST: localhost:9001" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "HTTP_USER_AGENT: curl/8.15.0" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "HTTP_ACCEPT: */*" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "HTTP_AUTHORIZATION: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiI3NzI3MmU4ZTA5MzE4YjVhZjljNjcyOGYwNTE3YjhlNTIyN2U5NTlhNGM5NmI4ZjE0Mjg0YjllNjAyZjRjMTU5IiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTcsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCIyMjkxNzA3ODMzN2E5ZGYxMTk5NzliOGRmMmJiYjU5YWFmY2M0MjE2MWM1MGJkNzg4MWU2OGUyNzM2OWYzNDNjIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NyJdXSwiY29udGVudCI6IiIsInNpZyI6Ijg0OTA5NDE5NjEwMjlmNmJiYjAwZmUwMDZmMDQ0ZjAxODQxNTQ5ZjA1ZWE1ODVhYmViMjBmNDQxMDk2M2I4Nzk2YzgzZmNjMDlmZDhjZGEwNmNkYWYxNzYwZWNkOGExM2FmZmFmYjAzMjQ4ZTNiYzk5OTUzYTdlNTVjYzJiNmMxIn0=" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "HTTP_CONTENT_TYPE: text/plain" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "HTTP_CONTENT_DISPOSITION: attachment; filename="test_blob_1755614097.txt"" +2025/08/19 10:34:57 [debug] 349771#349771: *51 fastcgi param: "HTTP_CONTENT_LENGTH: 296" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http cleanup add: 00005CE04361B760 +2025/08/19 10:34:57 [debug] 349771#349771: *51 get rr peer, try: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 stream socket 10 +2025/08/19 10:34:57 [debug] 349771#349771: *51 epoll add connection: fd:10 ev:80002005 +2025/08/19 10:34:57 [debug] 349771#349771: *51 connect to unix:/tmp/ginxsom-fcgi.sock, fd:10 #52 +2025/08/19 10:34:57 [debug] 349771#349771: *51 connected +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream connect: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 posix_memalign: 00005CE0435EFF20:128 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream send request +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream send request body +2025/08/19 10:34:57 [debug] 349771#349771: *51 chain writer buf fl:0 s:1304 +2025/08/19 10:34:57 [debug] 349771#349771: *51 chain writer buf fl:0 s:184 +2025/08/19 10:34:57 [debug] 349771#349771: *51 chain writer buf fl:0 s:8 +2025/08/19 10:34:57 [debug] 349771#349771: *51 chain writer buf fl:0 s:112 +2025/08/19 10:34:57 [debug] 349771#349771: *51 chain writer buf fl:0 s:8 +2025/08/19 10:34:57 [debug] 349771#349771: *51 chain writer in: 00005CE04361B7F0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 writev: 1616 of 1616 +2025/08/19 10:34:57 [debug] 349771#349771: *51 chain writer out: 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *51 event timer add: 10: 60000:180890782 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http finalize request: -4, "/upload?" a:1, c:2 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http request count:2 blk:0 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:6 ev:0004 d:000075EA426D11E1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http run request: "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream check client, write event:1, "/upload" +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:10 ev:0004 d:000075EA426D12C9 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream request: "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream dummy handler +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 2 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 59998 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:10 ev:2005 d:000075EA426D12C9 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream request: "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream process header +2025/08/19 10:34:57 [debug] 349771#349771: *51 malloc: 00005CE043611150:4096 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: eof:1, avail:-1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: fd:10 4096 of 4096 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: avail:40 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 01 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 06 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 01 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 10 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 08 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record length: 4104 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: FastCGI received request" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: METHOD=PUT, URI=/upload" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: handle_upload_request called" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: content_type=text/plain" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: content_length=296" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiI3NzI3MmU4ZTA5MzE4YjVhZjljNjcyOGYwNTE3YjhlNTIyN2U5NTlhNGM5NmI4ZjE0Mjg0YjllNjAyZjRjMTU5IiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTcsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCIyMjkxNzA3ODMzN2E5ZGYxMTk5NzliOGRmMmJiYjU5YWFmY2M0MjE2MWM1MGJkNzg4MWU2OGUyNzM2OWYzNDNjIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NyJdXSwiY29udGVudCI6IiIsInNpZyI6Ijg0OTA5NDE5NjEwMjlmNmJiYjAwZmUwMDZmMDQ0ZjAxODQxNTQ5ZjA1ZWE1ODVhYmViMjBmNDQxMDk2M2I4Nzk2YzgzZmNjMDlmZDhjZGEwNmNkYWYxNzYwZWNkOGExM2FmZmFmYjAzMjQ4ZTNiYzk5OTUzYTdlNTVjYzJiNmMxIn0=" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiI3NzI3MmU4ZTA5MzE4YjVhZjljNjcyOGYwNTE3YjhlNTIyN2U5NTlhNGM5NmI4ZjE0Mjg0Yjll..." +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"77272e8e09318b5af9c6728f0517b8e5227e959a4c96b8f14284b9e602f4c159","pubkey":"79be..." +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: parse_authorization_header returned: 0" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Successfully parsed authorization header" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Event JSON: {"kind":24242,"id":"77272e8e09318b5af9c6728f0517b8e5227e959a4c96b8f14284b9e602f4c159","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614097,"tags":[["t","..." +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Successfully parsed JSON event" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Found pubkey in JSON: 79be667ef9dcbbac..." +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac..." +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Successfully read DEBUG: Calculated SHA-256: 22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 posix_memalign: 00005CE043612160:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Saving file to: blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Successfully saved DEBUG: Content-Disposition header: attachment; filename="test_blob_1755614097.txt"" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Looking for filename= in Content-Disposition header" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Found filename= at position 12" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Filename value starts with: "test_blob_175561409" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Processing quoted filename" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Quoted filename length: DEBUG: Extracted quoted filename: 'test_blob_1755614097.txt'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Final filename after extraction: test_blob_1755614097.txt" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: insert_blob_metadata() called for sha256='22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Opening database at path: db/ginxsom.db" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Database opened successfully for writing" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Preparing SQL: INSERT INTO blobs (sha256, size, type, uploaded_at, uploader_pubkey, filename) VALUES (?, ?, ?, ?, ?, ?)" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: SQL prepared successfully, binding parameters" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Parameter values to bind:" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: 1. sha256 = '22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: 2. size = 296" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: 3. type = 'text/plain'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: 4. uploaded_at = 1755614097" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: 5. uploader_pubkey = '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: 6. filename = 'test_blob_1755614097.txt'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding parameter 1 (sha256)" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding parameter 2 (size)" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding parameter 3 (type)" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding parameter 4 (uploaded_at)" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding parameter 5 (uploader_pubkey)" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding uploader_pubkey as text: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding parameter 6 (filename)" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Binding filename as text: 'test_blob_1755614097.txt'" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Parameters bound, executing INSERT" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: INSERT successful" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Database closed, returning 1" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "DEBUG: Blob metadata successfully stored in database" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "Status: 200 OK" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header: "Content-Type: application/json" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi parser: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi header done +2025/08/19 10:34:57 [debug] 349771#349771: *51 posix_memalign: 00005CE043613170:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 posix_memalign: 00005CE04367A280:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:57 GMT +Content-Type: application/json +Transfer-Encoding: chunked +Connection: keep-alive +DEBUG: FastCGI received request +DEBUG: METHOD=PUT, URI=/upload +DEBUG: handle_upload_request called +DEBUG: content_type=text/plain +DEBUG: content_length=296 +DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiI3NzI3MmU4ZTA5MzE4YjVhZjljNjcyOGYwNTE3YjhlNTIyN2U5NTlhNGM5NmI4ZjE0Mjg0YjllNjAyZjRjMTU5IiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQwOTcsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCIyMjkxNzA3ODMzN2E5ZGYxMTk5NzliOGRmMmJiYjU5YWFmY2M0MjE2MWM1MGJkNzg4MWU2OGUyNzM2OWYzNDNjIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxNzY5NyJdXSwiY29udGVudCI6IiIsInNpZyI6Ijg0OTA5NDE5NjEwMjlmNmJiYjAwZmUwMDZmMDQ0ZjAxODQxNTQ5ZjA1ZWE1ODVhYmViMjBmNDQxMDk2M2I4Nzk2YzgzZmNjMDlmZDhjZGEwNmNkYWYxNzYwZWNkOGExM2FmZmFmYjAzMjQ4ZTNiYzk5OTUzYTdlNTVjYzJiNmMxIn0= +DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiI3NzI3MmU4ZTA5MzE4YjVhZjljNjcyOGYwNTE3YjhlNTIyN2U5NTlhNGM5NmI4ZjE0Mjg0Yjll... +DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"77272e8e09318b5af9c6728f0517b8e5227e959a4c96b8f14284b9e602f4c159","pubkey":"79be... +DEBUG: parse_authorization_header returned: 0 +DEBUG: Successfully parsed authorization header +DEBUG: Event JSON: {"kind":24242,"id":"77272e8e09318b5af9c6728f0517b8e5227e959a4c96b8f14284b9e602f4c159","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614097,"tags":[["t","... +DEBUG: Successfully parsed JSON event +DEBUG: Found pubkey in JSON: 79be667ef9dcbbac... +DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac... +DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +DEBUG: Successfully read DEBUG: Calculated SHA-256: 22917078337a9df119979b8df2bbb59aafcc42 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write new buf t:1 f:0 00005CE04367A2A0, pos 00005CE04367A2A0, size: 3991 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http write filter: l:0 f:0 s:3991 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http write filter limit 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 writev: 3991 of 3991 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http write filter 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http cacheable: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream process upstream +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe read upstream: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe preread: 295 +2025/08/19 10:34:57 [debug] 349771#349771: *51 input buf #0 00005CE043612029 +2025/08/19 10:34:57 [debug] 349771#349771: *51 input buf 00005CE043612029 295 +2025/08/19 10:34:57 [debug] 349771#349771: *51 malloc: 00005CE04367B290:4096 +2025/08/19 10:34:57 [debug] 349771#349771: *51 readv: eof:1, avail:40 +2025/08/19 10:34:57 [debug] 349771#349771: *51 readv: 1, last:4096 +2025/08/19 10:34:57 [debug] 349771#349771: *51 readv: avail:0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe recv chain: 40 +2025/08/19 10:34:57 [debug] 349771#349771: *51 readv: eof:1, avail:0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 readv: 1, last:4056 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe recv chain: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe buf in s:1 t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe buf free s:0 t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 40 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe length: -1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 input buf #1 00005CE04367B290 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 01 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 06 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 01 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record length: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi closed stdout +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 01 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 03 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 01 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 08 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record byte: 00 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi record length: 8 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http fastcgi sent end request +2025/08/19 10:34:57 [debug] 349771#349771: *51 input buf 00005CE04367B290 16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe write downstream: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe write downstream flush in +2025/08/19 10:34:57 [debug] 349771#349771: *51 http output filter "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http copy filter: "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http postpone filter "/upload?" 00005CE04361B7B0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http chunk: 295 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http chunk: 16 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write new buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write new buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write new buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http write filter: l:0 f:0 s:318 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http copy filter: 0 "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 pipe write downstream done +2025/08/19 10:34:57 [debug] 349771#349771: *51 event timer: 10, old: 180890782, new: 180890788 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream exit: 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *51 finalize http upstream request: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 finalize http fastcgi request +2025/08/19 10:34:57 [debug] 349771#349771: *51 free rr peer 1 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 close http upstream connection: 10 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE0435EFF20, unused: 48 +2025/08/19 10:34:57 [debug] 349771#349771: *51 event timer del: 10: 180890782 +2025/08/19 10:34:57 [debug] 349771#349771: *51 reusable connection: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http upstream temp fd: -1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http output filter "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http copy filter: "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http postpone filter "/upload?" 00005CE043613C98 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http chunk: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write old buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write old buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write old buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write old buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E5, size: 5 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http write filter: l:1 f:0 s:323 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http write filter limit 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 writev: 323 of 323 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http write filter 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http copy filter: 0 "/upload?" +2025/08/19 10:34:57 [debug] 349771#349771: *51 http finalize request: 0, "/upload?" a:1, c:1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 set http keepalive handler +2025/08/19 10:34:57 [debug] 349771#349771: *51 http close request +2025/08/19 10:34:57 [debug] 349771#349771: *51 http log handler +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE04367B290 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE043611150 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE043624610, unused: 3 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE04361A980, unused: 8 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE043610140, unused: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE043612160, unused: 8 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE043613170, unused: 986 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE04367A280, unused: 73 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE0436090A0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 hc free: 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *51 hc busy: 0000000000000000 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 tcp_nodelay +2025/08/19 10:34:57 [debug] 349771#349771: *51 reusable connection: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 event timer add: 6: 65000:180895788 +2025/08/19 10:34:57 [debug] 349771#349771: *51 post event 00005CE04364A320 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 4 +2025/08/19 10:34:57 [debug] 349771#349771: posted event 00005CE04364A320 +2025/08/19 10:34:57 [debug] 349771#349771: *51 delete posted event 00005CE04364A320 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http keepalive handler +2025/08/19 10:34:57 [debug] 349771#349771: *51 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: eof:0, avail:0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE0436090A0 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:6 ev:2005 d:000075EA426D11E1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 http keepalive handler +2025/08/19 10:34:57 [debug] 349771#349771: *51 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: eof:1, avail:-1 +2025/08/19 10:34:57 [debug] 349771#349771: *51 recv: fd:6 0 of 1024 +2025/08/19 10:34:57 [info] 349771#349771: *51 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:57 [debug] 349771#349771: *51 close http connection: 6 +2025/08/19 10:34:57 [debug] 349771#349771: *51 event timer del: 6: 180895788 +2025/08/19 10:34:57 [debug] 349771#349771: *51 reusable connection: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE0436090A0 +2025/08/19 10:34:57 [debug] 349771#349771: *51 free: 00005CE043606840, unused: 120 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 3 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:34:57 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:34:57 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *53 accept: 127.0.0.1:55734 fd:6 +2025/08/19 10:34:57 [debug] 349771#349771: *53 event timer add: 6: 60000:180890803 +2025/08/19 10:34:57 [debug] 349771#349771: *53 reusable connection: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *53 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 12 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http wait request handler +2025/08/19 10:34:57 [debug] 349771#349771: *53 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:57 [debug] 349771#349771: *53 recv: eof:0, avail:-1 +2025/08/19 10:34:57 [debug] 349771#349771: *53 recv: fd:6 142 of 1024 +2025/08/19 10:34:57 [debug] 349771#349771: *53 reusable connection: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http process request line +2025/08/19 10:34:57 [debug] 349771#349771: *53 http request line: "GET /22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c HTTP/1.1" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http uri: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http args: "" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http exten: "" +2025/08/19 10:34:57 [debug] 349771#349771: *53 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http process request header line +2025/08/19 10:34:57 [debug] 349771#349771: *53 http header: "Host: localhost:9001" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http header: "Accept: */*" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http header done +2025/08/19 10:34:57 [debug] 349771#349771: *53 event timer del: 6: 180890803 +2025/08/19 10:34:57 [debug] 349771#349771: *53 generic phase: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 rewrite phase: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *53 test location: "/health" +2025/08/19 10:34:57 [debug] 349771#349771: *53 test location: "/debug/list" +2025/08/19 10:34:57 [debug] 349771#349771: *53 test location: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:57 [debug] 349771#349771: *53 using configuration "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http cl:-1 max:104857600 +2025/08/19 10:34:57 [debug] 349771#349771: *53 rewrite phase: 3 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script var +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script var: "GET" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script value: "HEAD" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script equal +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script equal: no +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script if +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script if: false +2025/08/19 10:34:57 [debug] 349771#349771: *53 post rewrite phase: 4 +2025/08/19 10:34:57 [debug] 349771#349771: *53 generic phase: 5 +2025/08/19 10:34:57 [debug] 349771#349771: *53 generic phase: 6 +2025/08/19 10:34:57 [debug] 349771#349771: *53 generic phase: 7 +2025/08/19 10:34:57 [debug] 349771#349771: *53 access phase: 8 +2025/08/19 10:34:57 [debug] 349771#349771: *53 access phase: 9 +2025/08/19 10:34:57 [debug] 349771#349771: *53 access phase: 10 +2025/08/19 10:34:57 [debug] 349771#349771: *53 post access phase: 11 +2025/08/19 10:34:57 [debug] 349771#349771: *53 generic phase: 12 +2025/08/19 10:34:57 [debug] 349771#349771: *53 try files handler +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".jpg" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.jpg" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.jpg" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".jpeg" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.jpeg" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.jpeg" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".png" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.png" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.png" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".webp" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.webp" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.webp" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".gif" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.gif" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.gif" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".pdf" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.pdf" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.pdf" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".mp4" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.mp4" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.mp4" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".mp3" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.mp3" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.mp3" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: "/" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script capture: "22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http script copy: ".txt" +2025/08/19 10:34:57 [debug] 349771#349771: *53 trying to use file: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt" "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt" +2025/08/19 10:34:57 [debug] 349771#349771: *53 try file uri: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt" +2025/08/19 10:34:57 [debug] 349771#349771: *53 generic phase: 13 +2025/08/19 10:34:57 [debug] 349771#349771: *53 content phase: 14 +2025/08/19 10:34:57 [debug] 349771#349771: *53 content phase: 15 +2025/08/19 10:34:57 [debug] 349771#349771: *53 content phase: 16 +2025/08/19 10:34:57 [debug] 349771#349771: *53 content phase: 17 +2025/08/19 10:34:57 [debug] 349771#349771: *53 content phase: 18 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http filename: "./blobs/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt" +2025/08/19 10:34:57 [debug] 349771#349771: *53 add cleanup: 00005CE04361AD60 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http static fd: 10 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http set discard body +2025/08/19 10:34:57 [debug] 349771#349771: *53 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:34:57 GMT +Content-Type: text/plain +Content-Length: 296 +Last-Modified: Tue, 19 Aug 2025 14:34:57 GMT +Connection: keep-alive +ETag: "68a48b91-128" +Cache-Control: public, max-age=31536000, immutable +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-XSS-Protection: 1; mode=block +Accept-Ranges: bytes + +2025/08/19 10:34:57 [debug] 349771#349771: *53 write new buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http write filter: l:0 f:0 s:389 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http output filter "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt?" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http copy filter: "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt?" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http postpone filter "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt?" 00007FFDD38FD160 +2025/08/19 10:34:57 [debug] 349771#349771: *53 write old buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 write new buf t:0 f:1 0000000000000000, pos 0000000000000000, size: 0 file: 0, size: 296 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http write filter: l:1 f:0 s:685 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http write filter limit 0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 tcp_nopush +2025/08/19 10:34:57 [debug] 349771#349771: *53 writev: 389 of 389 +2025/08/19 10:34:57 [debug] 349771#349771: *53 sendfile: @0 296 +2025/08/19 10:34:57 [debug] 349771#349771: *53 sendfile: 296 of 296 @0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http write filter 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http copy filter: 0 "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt?" +2025/08/19 10:34:57 [debug] 349771#349771: *53 http finalize request: 0, "/22917078337a9df119979b8df2bbb59aafcc42161c50bd7881e68e27369f343c.txt?" a:1, c:1 +2025/08/19 10:34:57 [debug] 349771#349771: *53 set http keepalive handler +2025/08/19 10:34:57 [debug] 349771#349771: *53 http close request +2025/08/19 10:34:57 [debug] 349771#349771: *53 http log handler +2025/08/19 10:34:57 [debug] 349771#349771: *53 run cleanup: 00005CE04361AD60 +2025/08/19 10:34:57 [debug] 349771#349771: *53 file cleanup: fd:10 +2025/08/19 10:34:57 [debug] 349771#349771: *53 free: 00005CE043624610, unused: 5 +2025/08/19 10:34:57 [debug] 349771#349771: *53 free: 00005CE04361A980, unused: 1848 +2025/08/19 10:34:57 [debug] 349771#349771: *53 free: 00005CE0436090A0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 hc free: 0000000000000000 +2025/08/19 10:34:57 [debug] 349771#349771: *53 hc busy: 0000000000000000 0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 reusable connection: 1 +2025/08/19 10:34:57 [debug] 349771#349771: *53 event timer add: 6: 65000:180895803 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:34:57 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 http keepalive handler +2025/08/19 10:34:57 [debug] 349771#349771: *53 malloc: 00005CE0436090A0:1024 +2025/08/19 10:34:57 [debug] 349771#349771: *53 recv: eof:1, avail:-1 +2025/08/19 10:34:57 [debug] 349771#349771: *53 recv: fd:6 0 of 1024 +2025/08/19 10:34:57 [info] 349771#349771: *53 client 127.0.0.1 closed keepalive connection +2025/08/19 10:34:57 [debug] 349771#349771: *53 close http connection: 6 +2025/08/19 10:34:57 [debug] 349771#349771: *53 event timer del: 6: 180895803 +2025/08/19 10:34:57 [debug] 349771#349771: *53 reusable connection: 0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 free: 00005CE0436090A0 +2025/08/19 10:34:57 [debug] 349771#349771: *53 free: 00005CE043606840, unused: 136 +2025/08/19 10:34:57 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:34:57 [debug] 349771#349771: worker cycle +2025/08/19 10:34:57 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:44:56 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:44:56 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *54 accept: 127.0.0.1:60708 fd:6 +2025/08/19 10:44:56 [debug] 349771#349771: *54 event timer add: 6: 60000:181489727 +2025/08/19 10:44:56 [debug] 349771#349771: *54 reusable connection: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 598923 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http wait request handler +2025/08/19 10:44:56 [debug] 349771#349771: *54 malloc: 00005CE0436090A0:1024 +2025/08/19 10:44:56 [debug] 349771#349771: *54 recv: eof:0, avail:-1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 recv: fd:6 84 of 1024 +2025/08/19 10:44:56 [debug] 349771#349771: *54 reusable connection: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http process request line +2025/08/19 10:44:56 [debug] 349771#349771: *54 http request line: "GET /health HTTP/1.1" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http uri: "/health" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http args: "" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http exten: "" +2025/08/19 10:44:56 [debug] 349771#349771: *54 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http process request header line +2025/08/19 10:44:56 [debug] 349771#349771: *54 http header: "Host: localhost:9001" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http header: "Accept: */*" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http header done +2025/08/19 10:44:56 [debug] 349771#349771: *54 event timer del: 6: 181489727 +2025/08/19 10:44:56 [debug] 349771#349771: *54 generic phase: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 rewrite phase: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 test location: "/health" +2025/08/19 10:44:56 [debug] 349771#349771: *54 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:44:56 [debug] 349771#349771: *54 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:44:56 [debug] 349771#349771: *54 using configuration "/health" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http cl:-1 max:104857600 +2025/08/19 10:44:56 [debug] 349771#349771: *54 rewrite phase: 3 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http set discard body +2025/08/19 10:44:56 [debug] 349771#349771: *54 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:44:56 GMT +Content-Type: application/octet-stream +Content-Length: 3 +Connection: keep-alive +Content-Type: text/plain + +2025/08/19 10:44:56 [debug] 349771#349771: *54 write new buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http write filter: l:0 f:0 s:196 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http output filter "/health?" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http copy filter: "/health?" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http postpone filter "/health?" 00007FFDD38FD1C0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 write old buf t:1 f:0 00005CE04361AD60, pos 00005CE04361AD60, size: 196 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 write new buf t:0 f:0 0000000000000000, pos 00005CE04363AD7A, size: 3 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http write filter: l:1 f:0 s:199 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http write filter limit 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 writev: 199 of 199 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http write filter 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http copy filter: 0 "/health?" +2025/08/19 10:44:56 [debug] 349771#349771: *54 http finalize request: 0, "/health?" a:1, c:1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 set http keepalive handler +2025/08/19 10:44:56 [debug] 349771#349771: *54 http close request +2025/08/19 10:44:56 [debug] 349771#349771: *54 http log handler +2025/08/19 10:44:56 [debug] 349771#349771: *54 free: 00005CE043624610, unused: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 free: 00005CE04361A980, unused: 2736 +2025/08/19 10:44:56 [debug] 349771#349771: *54 free: 00005CE0436090A0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 hc free: 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *54 hc busy: 0000000000000000 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 tcp_nodelay +2025/08/19 10:44:56 [debug] 349771#349771: *54 reusable connection: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 event timer add: 6: 65000:181494727 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 http keepalive handler +2025/08/19 10:44:56 [debug] 349771#349771: *54 malloc: 00005CE0436090A0:1024 +2025/08/19 10:44:56 [debug] 349771#349771: *54 recv: eof:1, avail:-1 +2025/08/19 10:44:56 [debug] 349771#349771: *54 recv: fd:6 0 of 1024 +2025/08/19 10:44:56 [info] 349771#349771: *54 client 127.0.0.1 closed keepalive connection +2025/08/19 10:44:56 [debug] 349771#349771: *54 close http connection: 6 +2025/08/19 10:44:56 [debug] 349771#349771: *54 event timer del: 6: 181494727 +2025/08/19 10:44:56 [debug] 349771#349771: *54 reusable connection: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 free: 00005CE0436090A0 +2025/08/19 10:44:56 [debug] 349771#349771: *54 free: 00005CE043606840, unused: 136 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:44:56 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:44:56 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 accept: 127.0.0.1:60722 fd:6 +2025/08/19 10:44:56 [debug] 349771#349771: *55 event timer add: 6: 60000:181490036 +2025/08/19 10:44:56 [debug] 349771#349771: *55 reusable connection: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 308 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http wait request handler +2025/08/19 10:44:56 [debug] 349771#349771: *55 malloc: 00005CE0436090A0:1024 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: eof:0, avail:-1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: fd:6 1024 of 1024 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: avail:112 +2025/08/19 10:44:56 [debug] 349771#349771: *55 reusable connection: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http process request line +2025/08/19 10:44:56 [debug] 349771#349771: *55 http request line: "PUT /upload HTTP/1.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http uri: "/upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http args: "" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http exten: "" +2025/08/19 10:44:56 [debug] 349771#349771: *55 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http process request header line +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header: "Host: localhost:9001" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header: "Accept: */*" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header: "Authorization: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIxOTYyYjRkMjI0NjliNTY4YzVjZWI5ZDY0MGZhZTEyODk4NjcyYWNkOWI0NDIwZjIwMmMxMTU0Yzg4ZWExNjYyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQ2OTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCJiM2JhYzFlMDdmYTYxZjQ2NjhjMDkyMGIzNDkzYTU3MTY0MmUxMGMxNGUxMzI1OTU4ZWFhYzZkN2U4NWUxZmIxIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxODI5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzOTQwMWNiMDIwODAwMTUxNDQxNWRlY2I5NDcyOGY2M2EwNTE5ZDExYmE4MWIyNmU4ZGRiYjlkNThlNDhhZjM2N2Y5MDhlY2VhOWQzNjQ2MTBlZjRmOGM5ZDI4NTM2YWNhNzlhOTlkZWY0ZWRmNjMyMzU5OWFkNDhkZTdmMmMxIn0=" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header: "Content-Type: text/plain" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header: "Content-Disposition: attachment; filename="test_blob_1755614696.txt"" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header: "Content-Length: 296" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http header done +2025/08/19 10:44:56 [debug] 349771#349771: *55 event timer del: 6: 181490036 +2025/08/19 10:44:56 [debug] 349771#349771: *55 generic phase: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 rewrite phase: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 test location: "/health" +2025/08/19 10:44:56 [debug] 349771#349771: *55 test location: "/upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:44:56 [debug] 349771#349771: *55 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:44:56 [debug] 349771#349771: *55 using configuration "/upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http cl:296 max:104857600 +2025/08/19 10:44:56 [debug] 349771#349771: *55 rewrite phase: 3 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "PUT" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script regex: "^(PUT)$" +2025/08/19 10:44:56 [notice] 349771#349771: *55 "^(PUT)$" matches "PUT", client: 127.0.0.1, server: localhost, request: "PUT /upload HTTP/1.1", host: "localhost:9001" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script if +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script if: false +2025/08/19 10:44:56 [debug] 349771#349771: *55 post rewrite phase: 4 +2025/08/19 10:44:56 [debug] 349771#349771: *55 generic phase: 5 +2025/08/19 10:44:56 [debug] 349771#349771: *55 generic phase: 6 +2025/08/19 10:44:56 [debug] 349771#349771: *55 generic phase: 7 +2025/08/19 10:44:56 [debug] 349771#349771: *55 access phase: 8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 access phase: 9 +2025/08/19 10:44:56 [debug] 349771#349771: *55 access phase: 10 +2025/08/19 10:44:56 [debug] 349771#349771: *55 post access phase: 11 +2025/08/19 10:44:56 [debug] 349771#349771: *55 generic phase: 12 +2025/08/19 10:44:56 [debug] 349771#349771: *55 generic phase: 13 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http client request body preread 184 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http request body content length filter +2025/08/19 10:44:56 [debug] 349771#349771: *55 http body new buf t:1 f:0 00005CE0436093E8, pos 00005CE0436093E8, size: 184 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http read client request body +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: eof:0, avail:112 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: fd:6 112 of 112 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: avail:0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http client request body recv 112 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http body new buf t:1 f:0 00005CE04361B410, pos 00005CE04361B410, size: 112 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http client request body rest 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http init upstream, client timer: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 epoll add event: fd:6 op:3 ev:80002005 +2025/08/19 10:44:56 [debug] 349771#349771: *55 posix_memalign: 00005CE043610140:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "QUERY_STRING" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "QUERY_STRING: " +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "REQUEST_METHOD" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "PUT" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "REQUEST_METHOD: PUT" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "CONTENT_TYPE" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "text/plain" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "CONTENT_TYPE: text/plain" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "CONTENT_LENGTH" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "296" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "CONTENT_LENGTH: 296" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "SCRIPT_NAME" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "/upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "SCRIPT_NAME: /upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "REQUEST_URI" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "/upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "REQUEST_URI: /upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "DOCUMENT_URI" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "/upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "DOCUMENT_URI: /upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "DOCUMENT_ROOT" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "./blobs" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "DOCUMENT_ROOT: ./blobs" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "SERVER_PROTOCOL" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "HTTP/1.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "SERVER_PROTOCOL: HTTP/1.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "REQUEST_SCHEME" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "http" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "REQUEST_SCHEME: http" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "GATEWAY_INTERFACE" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "CGI/1.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "GATEWAY_INTERFACE: CGI/1.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "SERVER_SOFTWARE" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "nginx/" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "1.18.0" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "SERVER_SOFTWARE: nginx/1.18.0" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "REMOTE_ADDR" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "127.0.0.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "REMOTE_ADDR: 127.0.0.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "REMOTE_PORT" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "60722" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "REMOTE_PORT: 60722" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "SERVER_ADDR" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "127.0.0.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "SERVER_ADDR: 127.0.0.1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "SERVER_PORT" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "9001" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "SERVER_PORT: 9001" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "SERVER_NAME" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "localhost" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "SERVER_NAME: localhost" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "REDIRECT_STATUS" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "200" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "REDIRECT_STATUS: 200" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "SCRIPT_FILENAME" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script var: "./blobs" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http script copy: "/ginxsom.fcgi" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "SCRIPT_FILENAME: ./blobs/ginxsom.fcgi" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "HTTP_HOST: localhost:9001" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "HTTP_USER_AGENT: curl/8.15.0" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "HTTP_ACCEPT: */*" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "HTTP_AUTHORIZATION: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIxOTYyYjRkMjI0NjliNTY4YzVjZWI5ZDY0MGZhZTEyODk4NjcyYWNkOWI0NDIwZjIwMmMxMTU0Yzg4ZWExNjYyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQ2OTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCJiM2JhYzFlMDdmYTYxZjQ2NjhjMDkyMGIzNDkzYTU3MTY0MmUxMGMxNGUxMzI1OTU4ZWFhYzZkN2U4NWUxZmIxIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxODI5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzOTQwMWNiMDIwODAwMTUxNDQxNWRlY2I5NDcyOGY2M2EwNTE5ZDExYmE4MWIyNmU4ZGRiYjlkNThlNDhhZjM2N2Y5MDhlY2VhOWQzNjQ2MTBlZjRmOGM5ZDI4NTM2YWNhNzlhOTlkZWY0ZWRmNjMyMzU5OWFkNDhkZTdmMmMxIn0=" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "HTTP_CONTENT_TYPE: text/plain" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "HTTP_CONTENT_DISPOSITION: attachment; filename="test_blob_1755614696.txt"" +2025/08/19 10:44:56 [debug] 349771#349771: *55 fastcgi param: "HTTP_CONTENT_LENGTH: 296" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http cleanup add: 00005CE04361B760 +2025/08/19 10:44:56 [debug] 349771#349771: *55 get rr peer, try: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 stream socket 10 +2025/08/19 10:44:56 [debug] 349771#349771: *55 epoll add connection: fd:10 ev:80002005 +2025/08/19 10:44:56 [debug] 349771#349771: *55 connect to unix:/tmp/ginxsom-fcgi.sock, fd:10 #56 +2025/08/19 10:44:56 [debug] 349771#349771: *55 connected +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream connect: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 posix_memalign: 00005CE0435EFF20:128 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream send request +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream send request body +2025/08/19 10:44:56 [debug] 349771#349771: *55 chain writer buf fl:0 s:1304 +2025/08/19 10:44:56 [debug] 349771#349771: *55 chain writer buf fl:0 s:184 +2025/08/19 10:44:56 [debug] 349771#349771: *55 chain writer buf fl:0 s:8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 chain writer buf fl:0 s:112 +2025/08/19 10:44:56 [debug] 349771#349771: *55 chain writer buf fl:0 s:8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 chain writer in: 00005CE04361B7F0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 writev: 1616 of 1616 +2025/08/19 10:44:56 [debug] 349771#349771: *55 chain writer out: 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *55 event timer add: 10: 60000:181490036 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http finalize request: -4, "/upload?" a:1, c:2 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http request count:2 blk:0 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:6 ev:0004 d:000075EA426D11E0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http run request: "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream check client, write event:1, "/upload" +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:10 ev:0004 d:000075EA426D12C8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream request: "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream dummy handler +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 2 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 59998 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:10 ev:2005 d:000075EA426D12C8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream request: "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream process header +2025/08/19 10:44:56 [debug] 349771#349771: *55 malloc: 00005CE043611150:4096 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: eof:1, avail:-1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: fd:10 4096 of 4096 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: avail:40 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 01 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 06 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 01 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 10 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 08 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record length: 4104 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: FastCGI received request" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: METHOD=PUT, URI=/upload" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: handle_upload_request called" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: content_type=text/plain" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: content_length=296" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIxOTYyYjRkMjI0NjliNTY4YzVjZWI5ZDY0MGZhZTEyODk4NjcyYWNkOWI0NDIwZjIwMmMxMTU0Yzg4ZWExNjYyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQ2OTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCJiM2JhYzFlMDdmYTYxZjQ2NjhjMDkyMGIzNDkzYTU3MTY0MmUxMGMxNGUxMzI1OTU4ZWFhYzZkN2U4NWUxZmIxIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxODI5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzOTQwMWNiMDIwODAwMTUxNDQxNWRlY2I5NDcyOGY2M2EwNTE5ZDExYmE4MWIyNmU4ZGRiYjlkNThlNDhhZjM2N2Y5MDhlY2VhOWQzNjQ2MTBlZjRmOGM5ZDI4NTM2YWNhNzlhOTlkZWY0ZWRmNjMyMzU5OWFkNDhkZTdmMmMxIn0=" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiIxOTYyYjRkMjI0NjliNTY4YzVjZWI5ZDY0MGZhZTEyODk4NjcyYWNkOWI0NDIwZjIwMmMxMTU0..." +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"1962b4d22469b568c5ceb9d640fae12898672acd9b4420f202c1154c88ea1662","pubkey":"79be..." +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: parse_authorization_header returned: 0" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Successfully parsed authorization header" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Event JSON: {"kind":24242,"id":"1962b4d22469b568c5ceb9d640fae12898672acd9b4420f202c1154c88ea1662","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614696,"tags":[["t","..." +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Successfully parsed JSON event" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Found pubkey in JSON: 79be667ef9dcbbac..." +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac..." +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Successfully read DEBUG: Calculated SHA-256: b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 posix_memalign: 00005CE043612160:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Saving file to: blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Successfully saved DEBUG: Content-Disposition header: attachment; filename="test_blob_1755614696.txt"" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Looking for filename= in Content-Disposition header" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Found filename= at position 12" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Filename value starts with: "test_blob_175561469" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Processing quoted filename" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Quoted filename length: DEBUG: Extracted quoted filename: 'test_blob_1755614696.txt'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Final filename after extraction: test_blob_1755614696.txt" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: insert_blob_metadata() called for sha256='b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Opening database at path: db/ginxsom.db" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Database opened successfully for writing" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Preparing SQL: INSERT INTO blobs (sha256, size, type, uploaded_at, uploader_pubkey, filename) VALUES (?, ?, ?, ?, ?, ?)" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: SQL prepared successfully, binding parameters" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Parameter values to bind:" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: 1. sha256 = 'b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: 2. size = 296" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: 3. type = 'text/plain'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: 4. uploaded_at = 1755614696" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: 5. uploader_pubkey = '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: 6. filename = 'test_blob_1755614696.txt'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding parameter 1 (sha256)" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding parameter 2 (size)" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding parameter 3 (type)" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding parameter 4 (uploaded_at)" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding parameter 5 (uploader_pubkey)" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding uploader_pubkey as text: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding parameter 6 (filename)" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Binding filename as text: 'test_blob_1755614696.txt'" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Parameters bound, executing INSERT" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: INSERT successful" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Database closed, returning 1" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "DEBUG: Blob metadata successfully stored in database" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "Status: 200 OK" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header: "Content-Type: application/json" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi parser: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi header done +2025/08/19 10:44:56 [debug] 349771#349771: *55 posix_memalign: 00005CE043613170:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 posix_memalign: 00005CE04367A280:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:44:56 GMT +Content-Type: application/json +Transfer-Encoding: chunked +Connection: keep-alive +DEBUG: FastCGI received request +DEBUG: METHOD=PUT, URI=/upload +DEBUG: handle_upload_request called +DEBUG: content_type=text/plain +DEBUG: content_length=296 +DEBUG: Raw Authorization header: Nostr eyJraW5kIjoyNDI0MiwiaWQiOiIxOTYyYjRkMjI0NjliNTY4YzVjZWI5ZDY0MGZhZTEyODk4NjcyYWNkOWI0NDIwZjIwMmMxMTU0Yzg4ZWExNjYyIiwicHVia2V5IjoiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsImNyZWF0ZWRfYXQiOjE3NTU2MTQ2OTYsInRhZ3MiOltbInQiLCJ1cGxvYWQiXSxbIngiLCJiM2JhYzFlMDdmYTYxZjQ2NjhjMDkyMGIzNDkzYTU3MTY0MmUxMGMxNGUxMzI1OTU4ZWFhYzZkN2U4NWUxZmIxIl0sWyJleHBpcmF0aW9uIiwiMTc1NTYxODI5NiJdXSwiY29udGVudCI6IiIsInNpZyI6IjkzOTQwMWNiMDIwODAwMTUxNDQxNWRlY2I5NDcyOGY2M2EwNTE5ZDExYmE4MWIyNmU4ZGRiYjlkNThlNDhhZjM2N2Y5MDhlY2VhOWQzNjQ2MTBlZjRmOGM5ZDI4NTM2YWNhNzlhOTlkZWY0ZWRmNjMyMzU5OWFkNDhkZTdmMmMxIn0= +DEBUG: Authorization header present, length=DEBUG: Base64 event from header: eyJraW5kIjoyNDI0MiwiaWQiOiIxOTYyYjRkMjI0NjliNTY4YzVjZWI5ZDY0MGZhZTEyODk4NjcyYWNkOWI0NDIwZjIwMmMxMTU0... +DEBUG: Parsed authorization header, extracted JSON: {"kind":24242,"id":"1962b4d22469b568c5ceb9d640fae12898672acd9b4420f202c1154c88ea1662","pubkey":"79be... +DEBUG: parse_authorization_header returned: 0 +DEBUG: Successfully parsed authorization header +DEBUG: Event JSON: {"kind":24242,"id":"1962b4d22469b568c5ceb9d640fae12898672acd9b4420f202c1154c88ea1662","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1755614696,"tags":[["t","... +DEBUG: Successfully parsed JSON event +DEBUG: Found pubkey in JSON: 79be667ef9dcbbac... +DEBUG: Copied pubkey to static buffer: 79be667ef9dcbbac... +DEBUG: Final uploader_pubkey after auth parsing: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +DEBUG: Successfully read DEBUG: Calculated SHA-256: b3bac1e07fa61f4668c0920b3493a571642e10 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write new buf t:1 f:0 00005CE04367A2A0, pos 00005CE04367A2A0, size: 3991 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http write filter: l:0 f:0 s:3991 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http write filter limit 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 writev: 3991 of 3991 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http write filter 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http cacheable: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream process upstream +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe read upstream: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe preread: 295 +2025/08/19 10:44:56 [debug] 349771#349771: *55 input buf #0 00005CE043612029 +2025/08/19 10:44:56 [debug] 349771#349771: *55 input buf 00005CE043612029 295 +2025/08/19 10:44:56 [debug] 349771#349771: *55 malloc: 00005CE04367B290:4096 +2025/08/19 10:44:56 [debug] 349771#349771: *55 readv: eof:1, avail:40 +2025/08/19 10:44:56 [debug] 349771#349771: *55 readv: 1, last:4096 +2025/08/19 10:44:56 [debug] 349771#349771: *55 readv: avail:0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe recv chain: 40 +2025/08/19 10:44:56 [debug] 349771#349771: *55 readv: eof:1, avail:0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 readv: 1, last:4056 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe recv chain: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe buf in s:1 t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe buf free s:0 t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 40 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe length: -1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 input buf #1 00005CE04367B290 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 01 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 06 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 01 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record length: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi closed stdout +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 01 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 03 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 01 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 08 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record byte: 00 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi record length: 8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http fastcgi sent end request +2025/08/19 10:44:56 [debug] 349771#349771: *55 input buf 00005CE04367B290 16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe write downstream: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe write downstream flush in +2025/08/19 10:44:56 [debug] 349771#349771: *55 http output filter "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http copy filter: "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http postpone filter "/upload?" 00005CE04361B7B0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http chunk: 295 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http chunk: 16 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write new buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write new buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write new buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http write filter: l:0 f:0 s:318 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http copy filter: 0 "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 pipe write downstream done +2025/08/19 10:44:56 [debug] 349771#349771: *55 event timer: 10, old: 181490036, new: 181490041 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream exit: 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *55 finalize http upstream request: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 finalize http fastcgi request +2025/08/19 10:44:56 [debug] 349771#349771: *55 free rr peer 1 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 close http upstream connection: 10 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE0435EFF20, unused: 48 +2025/08/19 10:44:56 [debug] 349771#349771: *55 event timer del: 10: 181490036 +2025/08/19 10:44:56 [debug] 349771#349771: *55 reusable connection: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http upstream temp fd: -1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http output filter "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http copy filter: "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http postpone filter "/upload?" 00005CE043613C98 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http chunk: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write old buf t:1 f:0 00005CE043613BB0, pos 00005CE043613BB0, size: 5 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write old buf t:1 f:0 00005CE043611150, pos 00005CE043612029, size: 295 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write old buf t:1 f:0 00005CE04367B290, pos 00005CE04367B290, size: 16 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write old buf t:0 f:0 0000000000000000, pos 00005CE037AC92E8, size: 2 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 write new buf t:0 f:0 0000000000000000, pos 00005CE037AC92E5, size: 5 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http write filter: l:1 f:0 s:323 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http write filter limit 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 writev: 323 of 323 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http write filter 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http copy filter: 0 "/upload?" +2025/08/19 10:44:56 [debug] 349771#349771: *55 http finalize request: 0, "/upload?" a:1, c:1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 set http keepalive handler +2025/08/19 10:44:56 [debug] 349771#349771: *55 http close request +2025/08/19 10:44:56 [debug] 349771#349771: *55 http log handler +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE04367B290 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE043611150 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE043624610, unused: 3 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE04361A980, unused: 8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE043610140, unused: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE043612160, unused: 8 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE043613170, unused: 986 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE04367A280, unused: 73 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE0436090A0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 hc free: 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *55 hc busy: 0000000000000000 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 tcp_nodelay +2025/08/19 10:44:56 [debug] 349771#349771: *55 reusable connection: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 event timer add: 6: 65000:181495041 +2025/08/19 10:44:56 [debug] 349771#349771: *55 post event 00005CE04364A320 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 3 +2025/08/19 10:44:56 [debug] 349771#349771: posted event 00005CE04364A320 +2025/08/19 10:44:56 [debug] 349771#349771: *55 delete posted event 00005CE04364A320 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http keepalive handler +2025/08/19 10:44:56 [debug] 349771#349771: *55 malloc: 00005CE0436090A0:1024 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: eof:0, avail:0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE0436090A0 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:6 ev:2005 d:000075EA426D11E0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 http keepalive handler +2025/08/19 10:44:56 [debug] 349771#349771: *55 malloc: 00005CE0436090A0:1024 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: eof:1, avail:-1 +2025/08/19 10:44:56 [debug] 349771#349771: *55 recv: fd:6 0 of 1024 +2025/08/19 10:44:56 [info] 349771#349771: *55 client 127.0.0.1 closed keepalive connection +2025/08/19 10:44:56 [debug] 349771#349771: *55 close http connection: 6 +2025/08/19 10:44:56 [debug] 349771#349771: *55 event timer del: 6: 181495041 +2025/08/19 10:44:56 [debug] 349771#349771: *55 reusable connection: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE0436090A0 +2025/08/19 10:44:56 [debug] 349771#349771: *55 free: 00005CE043606840, unused: 120 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 2 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:44:56 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:44:56 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *57 accept: 127.0.0.1:60728 fd:6 +2025/08/19 10:44:56 [debug] 349771#349771: *57 event timer add: 6: 60000:181490051 +2025/08/19 10:44:56 [debug] 349771#349771: *57 reusable connection: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 8 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http wait request handler +2025/08/19 10:44:56 [debug] 349771#349771: *57 malloc: 00005CE0436090A0:1024 +2025/08/19 10:44:56 [debug] 349771#349771: *57 recv: eof:0, avail:-1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 recv: fd:6 142 of 1024 +2025/08/19 10:44:56 [debug] 349771#349771: *57 reusable connection: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http process request line +2025/08/19 10:44:56 [debug] 349771#349771: *57 http request line: "GET /b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1 HTTP/1.1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http uri: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http args: "" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http exten: "" +2025/08/19 10:44:56 [debug] 349771#349771: *57 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http process request header line +2025/08/19 10:44:56 [debug] 349771#349771: *57 http header: "Host: localhost:9001" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http header: "Accept: */*" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http header done +2025/08/19 10:44:56 [debug] 349771#349771: *57 event timer del: 6: 181490051 +2025/08/19 10:44:56 [debug] 349771#349771: *57 generic phase: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 rewrite phase: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 test location: "/health" +2025/08/19 10:44:56 [debug] 349771#349771: *57 test location: "/debug/list" +2025/08/19 10:44:56 [debug] 349771#349771: *57 test location: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:44:56 [debug] 349771#349771: *57 using configuration "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http cl:-1 max:104857600 +2025/08/19 10:44:56 [debug] 349771#349771: *57 rewrite phase: 3 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script var +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script var: "GET" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script value: "HEAD" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script equal +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script equal: no +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script if +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script if: false +2025/08/19 10:44:56 [debug] 349771#349771: *57 post rewrite phase: 4 +2025/08/19 10:44:56 [debug] 349771#349771: *57 generic phase: 5 +2025/08/19 10:44:56 [debug] 349771#349771: *57 generic phase: 6 +2025/08/19 10:44:56 [debug] 349771#349771: *57 generic phase: 7 +2025/08/19 10:44:56 [debug] 349771#349771: *57 access phase: 8 +2025/08/19 10:44:56 [debug] 349771#349771: *57 access phase: 9 +2025/08/19 10:44:56 [debug] 349771#349771: *57 access phase: 10 +2025/08/19 10:44:56 [debug] 349771#349771: *57 post access phase: 11 +2025/08/19 10:44:56 [debug] 349771#349771: *57 generic phase: 12 +2025/08/19 10:44:56 [debug] 349771#349771: *57 try files handler +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".jpg" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.jpg" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.jpg" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".jpeg" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.jpeg" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.jpeg" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".png" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.png" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.png" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".webp" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.webp" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.webp" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".gif" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.gif" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.gif" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".pdf" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.pdf" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.pdf" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".mp4" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.mp4" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.mp4" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".mp3" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.mp3" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.mp3" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: "/" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script capture: "b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http script copy: ".txt" +2025/08/19 10:44:56 [debug] 349771#349771: *57 trying to use file: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt" "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt" +2025/08/19 10:44:56 [debug] 349771#349771: *57 try file uri: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt" +2025/08/19 10:44:56 [debug] 349771#349771: *57 generic phase: 13 +2025/08/19 10:44:56 [debug] 349771#349771: *57 content phase: 14 +2025/08/19 10:44:56 [debug] 349771#349771: *57 content phase: 15 +2025/08/19 10:44:56 [debug] 349771#349771: *57 content phase: 16 +2025/08/19 10:44:56 [debug] 349771#349771: *57 content phase: 17 +2025/08/19 10:44:56 [debug] 349771#349771: *57 content phase: 18 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http filename: "./blobs/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt" +2025/08/19 10:44:56 [debug] 349771#349771: *57 add cleanup: 00005CE04361AD60 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http static fd: 10 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http set discard body +2025/08/19 10:44:56 [debug] 349771#349771: *57 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:44:56 GMT +Content-Type: text/plain +Content-Length: 296 +Last-Modified: Tue, 19 Aug 2025 14:44:56 GMT +Connection: keep-alive +ETag: "68a48de8-128" +Cache-Control: public, max-age=31536000, immutable +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-XSS-Protection: 1; mode=block +Accept-Ranges: bytes + +2025/08/19 10:44:56 [debug] 349771#349771: *57 write new buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http write filter: l:0 f:0 s:389 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http output filter "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt?" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http copy filter: "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt?" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http postpone filter "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt?" 00007FFDD38FD160 +2025/08/19 10:44:56 [debug] 349771#349771: *57 write old buf t:1 f:0 00005CE04361AF50, pos 00005CE04361AF50, size: 389 file: 0, size: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 write new buf t:0 f:1 0000000000000000, pos 0000000000000000, size: 0 file: 0, size: 296 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http write filter: l:1 f:0 s:685 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http write filter limit 0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 tcp_nopush +2025/08/19 10:44:56 [debug] 349771#349771: *57 writev: 389 of 389 +2025/08/19 10:44:56 [debug] 349771#349771: *57 sendfile: @0 296 +2025/08/19 10:44:56 [debug] 349771#349771: *57 sendfile: 296 of 296 @0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http write filter 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http copy filter: 0 "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt?" +2025/08/19 10:44:56 [debug] 349771#349771: *57 http finalize request: 0, "/b3bac1e07fa61f4668c0920b3493a571642e10c14e1325958eaac6d7e85e1fb1.txt?" a:1, c:1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 set http keepalive handler +2025/08/19 10:44:56 [debug] 349771#349771: *57 http close request +2025/08/19 10:44:56 [debug] 349771#349771: *57 http log handler +2025/08/19 10:44:56 [debug] 349771#349771: *57 run cleanup: 00005CE04361AD60 +2025/08/19 10:44:56 [debug] 349771#349771: *57 file cleanup: fd:10 +2025/08/19 10:44:56 [debug] 349771#349771: *57 free: 00005CE043624610, unused: 5 +2025/08/19 10:44:56 [debug] 349771#349771: *57 free: 00005CE04361A980, unused: 1848 +2025/08/19 10:44:56 [debug] 349771#349771: *57 free: 00005CE0436090A0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 hc free: 0000000000000000 +2025/08/19 10:44:56 [debug] 349771#349771: *57 hc busy: 0000000000000000 0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 reusable connection: 1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 event timer add: 6: 65000:181495052 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:44:56 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 http keepalive handler +2025/08/19 10:44:56 [debug] 349771#349771: *57 malloc: 00005CE0436090A0:1024 +2025/08/19 10:44:56 [debug] 349771#349771: *57 recv: eof:1, avail:-1 +2025/08/19 10:44:56 [debug] 349771#349771: *57 recv: fd:6 0 of 1024 +2025/08/19 10:44:56 [info] 349771#349771: *57 client 127.0.0.1 closed keepalive connection +2025/08/19 10:44:56 [debug] 349771#349771: *57 close http connection: 6 +2025/08/19 10:44:56 [debug] 349771#349771: *57 event timer del: 6: 181495052 +2025/08/19 10:44:56 [debug] 349771#349771: *57 reusable connection: 0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 free: 00005CE0436090A0 +2025/08/19 10:44:56 [debug] 349771#349771: *57 free: 00005CE043606840, unused: 136 +2025/08/19 10:44:56 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:44:56 [debug] 349771#349771: worker cycle +2025/08/19 10:44:56 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *58 accept: 127.0.0.1:60878 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *58 event timer add: 6: 60000:182135664 +2025/08/19 10:55:42 [debug] 349771#349771: *58 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *58 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 645611 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *58 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *58 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *58 recv: fd:6 147 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *58 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *58 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http args: "" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *58 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *58 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *58 event timer del: 6: 182135664 +2025/08/19 10:55:42 [debug] 349771#349771: *58 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *58 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *58 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *58 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *58 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *58 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *58 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *58 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *58 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *58 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *58 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *58 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *58 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *58 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *58 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *58 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *58 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *58 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *58 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *58 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *58 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *58 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http filename: "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *58 add cleanup: 00005CE0436254B8 +2025/08/19 10:55:42 [error] 349771#349771: *58 open() "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http finalize request: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http special response: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *58 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *58 write new buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 00005CE043625600 +2025/08/19 10:55:42 [debug] 349771#349771: *58 write old buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *58 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *58 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *58 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *58 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *58 free: 00005CE043624610, unused: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 free: 00005CE04361A980, unused: 2571 +2025/08/19 10:55:42 [debug] 349771#349771: *58 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *58 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *58 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *58 event timer add: 6: 65000:182140665 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *58 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *58 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *58 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *58 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *58 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *58 event timer del: 6: 182140665 +2025/08/19 10:55:42 [debug] 349771#349771: *58 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *58 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *59 accept: 127.0.0.1:60890 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *59 event timer add: 6: 60000:182135700 +2025/08/19 10:55:42 [debug] 349771#349771: *59 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 34 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *59 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *59 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 recv: fd:6 550 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *59 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *59 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http args: "" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *59 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *59 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http header: "Authorization: Nostr ewogICJpZCI6ICJwbGFjZWhvbGRlcl9pZCIsCiAgInB1YmtleSI6ICI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwKICAia2luZCI6IDI0MjQyLAogICJjb250ZW50IjogIkxpc3QgQmxvYnMiLAogICJjcmVhdGVkX2F0IjogMTc1NTYxNTM0MiwKICAidGFncyI6IFsKICAgIFsidCIsICJsaXN0Il0sCiAgICBbImV4cGlyYXRpb24iLCAiMTc1NTYxODk0MiJdCiAgXSwKICAic2lnIjogInBsYWNlaG9sZGVyX3NpZ25hdHVyZSIKfQo=" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *59 event timer del: 6: 182135700 +2025/08/19 10:55:42 [debug] 349771#349771: *59 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *59 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *59 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *59 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *59 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *59 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *59 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *59 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *59 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *59 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *59 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *59 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *59 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *59 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *59 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *59 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *59 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *59 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *59 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *59 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *59 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http filename: "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *59 add cleanup: 00005CE0436254C8 +2025/08/19 10:55:42 [error] 349771#349771: *59 open() "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http finalize request: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http special response: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *59 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *59 write new buf t:1 f:0 00005CE043625548, pos 00005CE043625548, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 00005CE04361AE88 +2025/08/19 10:55:42 [debug] 349771#349771: *59 write old buf t:1 f:0 00005CE043625548, pos 00005CE043625548, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:55:42 [debug] 349771#349771: *59 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *59 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *59 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *59 free: 00005CE043624610, unused: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 free: 00005CE04361A980, unused: 2555 +2025/08/19 10:55:42 [debug] 349771#349771: *59 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *59 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *59 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 event timer add: 6: 65000:182140700 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *59 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *59 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *59 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *59 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *59 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *59 event timer del: 6: 182140700 +2025/08/19 10:55:42 [debug] 349771#349771: *59 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *59 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *60 accept: 127.0.0.1:60896 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *60 event timer add: 6: 60000:182135721 +2025/08/19 10:55:42 [debug] 349771#349771: *60 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *60 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 20 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *60 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *60 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *60 recv: fd:6 164 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *60 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *60 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942 HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http args: "since=1755528942" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *60 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *60 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *60 event timer del: 6: 182135721 +2025/08/19 10:55:42 [debug] 349771#349771: *60 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *60 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *60 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *60 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *60 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *60 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *60 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *60 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *60 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *60 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *60 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *60 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *60 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *60 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *60 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *60 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *60 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *60 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *60 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *60 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *60 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *60 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http filename: "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *60 add cleanup: 00005CE0436254B8 +2025/08/19 10:55:42 [error] 349771#349771: *60 open() "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942 HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http finalize request: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http special response: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *60 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *60 write new buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942" 00005CE043625600 +2025/08/19 10:55:42 [debug] 349771#349771: *60 write old buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942" +2025/08/19 10:55:42 [debug] 349771#349771: *60 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *60 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *60 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *60 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *60 free: 00005CE043624610, unused: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 free: 00005CE04361A980, unused: 2554 +2025/08/19 10:55:42 [debug] 349771#349771: *60 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *60 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *60 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *60 event timer add: 6: 65000:182140722 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *60 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *60 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *60 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *60 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *60 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *60 event timer del: 6: 182140722 +2025/08/19 10:55:42 [debug] 349771#349771: *60 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *60 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *61 accept: 127.0.0.1:60898 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *61 event timer add: 6: 60000:182135748 +2025/08/19 10:55:42 [debug] 349771#349771: *61 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 25 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *61 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *61 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 recv: fd:6 164 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *61 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *61 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342 HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http args: "until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *61 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *61 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *61 event timer del: 6: 182135748 +2025/08/19 10:55:42 [debug] 349771#349771: *61 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *61 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *61 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *61 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *61 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *61 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *61 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *61 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *61 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *61 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *61 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *61 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *61 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *61 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *61 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *61 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *61 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *61 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *61 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *61 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *61 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http filename: "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *61 add cleanup: 00005CE0436254B8 +2025/08/19 10:55:42 [error] 349771#349771: *61 open() "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342 HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http finalize request: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http special response: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *61 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *61 write new buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342" 00005CE043625600 +2025/08/19 10:55:42 [debug] 349771#349771: *61 write old buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *61 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?until=1755615342" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *61 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *61 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *61 free: 00005CE043624610, unused: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 free: 00005CE04361A980, unused: 2554 +2025/08/19 10:55:42 [debug] 349771#349771: *61 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *61 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *61 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 event timer add: 6: 65000:182140748 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *61 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *61 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *61 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *61 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *61 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *61 event timer del: 6: 182140748 +2025/08/19 10:55:42 [debug] 349771#349771: *61 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *61 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *62 accept: 127.0.0.1:60902 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *62 event timer add: 6: 60000:182135777 +2025/08/19 10:55:42 [debug] 349771#349771: *62 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *62 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 28 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *62 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *62 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *62 recv: fd:6 181 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *62 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *62 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342 HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http args: "since=1755528942&until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *62 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *62 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *62 event timer del: 6: 182135777 +2025/08/19 10:55:42 [debug] 349771#349771: *62 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *62 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *62 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *62 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *62 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *62 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *62 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *62 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *62 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *62 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *62 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *62 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *62 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *62 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *62 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *62 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *62 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *62 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *62 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *62 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *62 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *62 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http filename: "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *62 add cleanup: 00005CE0436254B8 +2025/08/19 10:55:42 [error] 349771#349771: *62 open() "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342 HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http finalize request: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http special response: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *62 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *62 write new buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342" 00005CE043625600 +2025/08/19 10:55:42 [debug] 349771#349771: *62 write old buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342" +2025/08/19 10:55:42 [debug] 349771#349771: *62 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=1755528942&until=1755615342" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *62 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *62 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *62 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *62 free: 00005CE043624610, unused: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 free: 00005CE04361A980, unused: 2537 +2025/08/19 10:55:42 [debug] 349771#349771: *62 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *62 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *62 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *62 event timer add: 6: 65000:182140777 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *62 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *62 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *62 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *62 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *62 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *62 event timer del: 6: 182140777 +2025/08/19 10:55:42 [debug] 349771#349771: *62 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *62 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *63 accept: 127.0.0.1:60916 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *63 event timer add: 6: 60000:182135793 +2025/08/19 10:55:42 [debug] 349771#349771: *63 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 15 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *63 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *63 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 recv: fd:6 147 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *63 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *63 http request line: "GET /list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http uri: "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http args: "" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *63 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *63 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *63 event timer del: 6: 182135793 +2025/08/19 10:55:42 [debug] 349771#349771: *63 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *63 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *63 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *63 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *63 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *63 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *63 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *63 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *63 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *63 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *63 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *63 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *63 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *63 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *63 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *63 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *63 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *63 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *63 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *63 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *63 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http filename: "./blobs/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" +2025/08/19 10:55:42 [debug] 349771#349771: *63 add cleanup: 00005CE0436254B8 +2025/08/19 10:55:42 [error] 349771#349771: *63 open() "./blobs/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http finalize request: 404, "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http special response: 404, "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef?" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *63 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *63 write new buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http output filter "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef?" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http copy filter: "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef?" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http postpone filter "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef?" 00005CE043625600 +2025/08/19 10:55:42 [debug] 349771#349771: *63 write old buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http copy filter: 0 "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef?" +2025/08/19 10:55:42 [debug] 349771#349771: *63 http finalize request: 0, "/list/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *63 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *63 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *63 free: 00005CE043624610, unused: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 free: 00005CE04361A980, unused: 2571 +2025/08/19 10:55:42 [debug] 349771#349771: *63 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *63 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *63 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 event timer add: 6: 65000:182140793 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *63 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *63 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *63 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *63 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *63 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *63 event timer del: 6: 182140793 +2025/08/19 10:55:42 [debug] 349771#349771: *63 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *63 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *64 accept: 127.0.0.1:60920 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *64 event timer add: 6: 60000:182135806 +2025/08/19 10:55:42 [debug] 349771#349771: *64 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *64 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 12 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *64 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *64 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *64 recv: fd:6 97 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *64 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *64 http request line: "GET /list/invalid_pubkey HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http uri: "/list/invalid_pubkey" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http args: "" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *64 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *64 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *64 event timer del: 6: 182135806 +2025/08/19 10:55:42 [debug] 349771#349771: *64 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *64 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *64 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *64 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *64 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *64 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *64 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *64 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *64 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *64 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *64 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *64 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *64 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *64 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *64 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *64 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *64 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *64 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *64 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *64 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *64 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *64 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http filename: "./blobs/list/invalid_pubkey" +2025/08/19 10:55:42 [debug] 349771#349771: *64 add cleanup: 00005CE043625480 +2025/08/19 10:55:42 [error] 349771#349771: *64 open() "./blobs/list/invalid_pubkey" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/invalid_pubkey HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http finalize request: 404, "/list/invalid_pubkey?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http special response: 404, "/list/invalid_pubkey?" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *64 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *64 write new buf t:1 f:0 00005CE043625500, pos 00005CE043625500, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http output filter "/list/invalid_pubkey?" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http copy filter: "/list/invalid_pubkey?" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http postpone filter "/list/invalid_pubkey?" 00005CE0436255C8 +2025/08/19 10:55:42 [debug] 349771#349771: *64 write old buf t:1 f:0 00005CE043625500, pos 00005CE043625500, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http copy filter: 0 "/list/invalid_pubkey?" +2025/08/19 10:55:42 [debug] 349771#349771: *64 http finalize request: 0, "/list/invalid_pubkey?" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *64 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *64 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *64 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *64 free: 00005CE043624610, unused: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *64 free: 00005CE04361A980, unused: 2669 +2025/08/19 10:55:42 [debug] 349771#349771: *64 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *64 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *64 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *64 event timer add: 6: 65000:182140806 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *64 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *64 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *64 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *64 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *64 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *64 event timer del: 6: 182140806 +2025/08/19 10:55:42 [debug] 349771#349771: *64 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *64 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:55:42 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:55:42 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *65 accept: 127.0.0.1:60928 fd:6 +2025/08/19 10:55:42 [debug] 349771#349771: *65 event timer add: 6: 60000:182135815 +2025/08/19 10:55:42 [debug] 349771#349771: *65 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 9 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http wait request handler +2025/08/19 10:55:42 [debug] 349771#349771: *65 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *65 recv: eof:0, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 recv: fd:6 175 of 1024 +2025/08/19 10:55:42 [debug] 349771#349771: *65 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http process request line +2025/08/19 10:55:42 [debug] 349771#349771: *65 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid HTTP/1.1" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http args: "since=invalid&until=invalid" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http exten: "" +2025/08/19 10:55:42 [debug] 349771#349771: *65 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http process request header line +2025/08/19 10:55:42 [debug] 349771#349771: *65 http header: "Host: localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http header: "Accept: */*" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http header done +2025/08/19 10:55:42 [debug] 349771#349771: *65 event timer del: 6: 182135815 +2025/08/19 10:55:42 [debug] 349771#349771: *65 generic phase: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 rewrite phase: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 test location: "/health" +2025/08/19 10:55:42 [debug] 349771#349771: *65 test location: "/upload" +2025/08/19 10:55:42 [debug] 349771#349771: *65 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:55:42 [debug] 349771#349771: *65 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:55:42 [debug] 349771#349771: *65 using configuration "" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http cl:-1 max:104857600 +2025/08/19 10:55:42 [debug] 349771#349771: *65 rewrite phase: 3 +2025/08/19 10:55:42 [debug] 349771#349771: *65 post rewrite phase: 4 +2025/08/19 10:55:42 [debug] 349771#349771: *65 generic phase: 5 +2025/08/19 10:55:42 [debug] 349771#349771: *65 generic phase: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *65 generic phase: 7 +2025/08/19 10:55:42 [debug] 349771#349771: *65 access phase: 8 +2025/08/19 10:55:42 [debug] 349771#349771: *65 access phase: 9 +2025/08/19 10:55:42 [debug] 349771#349771: *65 access phase: 10 +2025/08/19 10:55:42 [debug] 349771#349771: *65 post access phase: 11 +2025/08/19 10:55:42 [debug] 349771#349771: *65 generic phase: 12 +2025/08/19 10:55:42 [debug] 349771#349771: *65 generic phase: 13 +2025/08/19 10:55:42 [debug] 349771#349771: *65 content phase: 14 +2025/08/19 10:55:42 [debug] 349771#349771: *65 content phase: 15 +2025/08/19 10:55:42 [debug] 349771#349771: *65 content phase: 16 +2025/08/19 10:55:42 [debug] 349771#349771: *65 content phase: 17 +2025/08/19 10:55:42 [debug] 349771#349771: *65 content phase: 18 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http filename: "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:55:42 [debug] 349771#349771: *65 add cleanup: 00005CE0436254B8 +2025/08/19 10:55:42 [error] 349771#349771: *65 open() "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid HTTP/1.1", host: "localhost:9001" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http finalize request: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http special response: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http set discard body +2025/08/19 10:55:42 [debug] 349771#349771: *65 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:55:42 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:55:42 [debug] 349771#349771: *65 write new buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http write filter: l:0 f:0 s:164 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid" 00005CE043625600 +2025/08/19 10:55:42 [debug] 349771#349771: *65 write old buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http write filter: l:1 f:0 s:326 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http write filter limit 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 writev: 326 of 326 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http write filter 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid" +2025/08/19 10:55:42 [debug] 349771#349771: *65 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?since=invalid&until=invalid" a:1, c:1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 set http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *65 http close request +2025/08/19 10:55:42 [debug] 349771#349771: *65 http log handler +2025/08/19 10:55:42 [debug] 349771#349771: *65 free: 00005CE043624610, unused: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 free: 00005CE04361A980, unused: 2543 +2025/08/19 10:55:42 [debug] 349771#349771: *65 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 hc free: 0000000000000000 +2025/08/19 10:55:42 [debug] 349771#349771: *65 hc busy: 0000000000000000 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 tcp_nodelay +2025/08/19 10:55:42 [debug] 349771#349771: *65 reusable connection: 1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 event timer add: 6: 65000:182140815 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:55:42 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 http keepalive handler +2025/08/19 10:55:42 [debug] 349771#349771: *65 malloc: 00005CE0436090A0:1024 +2025/08/19 10:55:42 [debug] 349771#349771: *65 recv: eof:1, avail:-1 +2025/08/19 10:55:42 [debug] 349771#349771: *65 recv: fd:6 0 of 1024 +2025/08/19 10:55:42 [info] 349771#349771: *65 client 127.0.0.1 closed keepalive connection +2025/08/19 10:55:42 [debug] 349771#349771: *65 close http connection: 6 +2025/08/19 10:55:42 [debug] 349771#349771: *65 event timer del: 6: 182140815 +2025/08/19 10:55:42 [debug] 349771#349771: *65 reusable connection: 0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 free: 00005CE0436090A0 +2025/08/19 10:55:42 [debug] 349771#349771: *65 free: 00005CE043606840, unused: 136 +2025/08/19 10:55:42 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:55:42 [debug] 349771#349771: worker cycle +2025/08/19 10:55:42 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:56:40 [debug] 349771#349771: epoll: fd:5 ev:0001 d:000075EA426D1010 +2025/08/19 10:56:40 [debug] 349771#349771: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 10:56:40 [debug] 349771#349771: posix_memalign: 00005CE043606840:512 @16 +2025/08/19 10:56:40 [debug] 349771#349771: *66 accept: 127.0.0.1:51060 fd:6 +2025/08/19 10:56:40 [debug] 349771#349771: *66 event timer add: 6: 60000:182193291 +2025/08/19 10:56:40 [debug] 349771#349771: *66 reusable connection: 1 +2025/08/19 10:56:40 [debug] 349771#349771: *66 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 10:56:40 [debug] 349771#349771: timer delta: 57475 +2025/08/19 10:56:40 [debug] 349771#349771: worker cycle +2025/08/19 10:56:40 [debug] 349771#349771: epoll timer: 60000 +2025/08/19 10:56:40 [debug] 349771#349771: epoll: fd:6 ev:0001 d:000075EA426D11E0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http wait request handler +2025/08/19 10:56:40 [debug] 349771#349771: *66 malloc: 00005CE0436090A0:1024 +2025/08/19 10:56:40 [debug] 349771#349771: *66 recv: eof:0, avail:-1 +2025/08/19 10:56:40 [debug] 349771#349771: *66 recv: fd:6 147 of 1024 +2025/08/19 10:56:40 [debug] 349771#349771: *66 reusable connection: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 posix_memalign: 00005CE043624610:4096 @16 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http process request line +2025/08/19 10:56:40 [debug] 349771#349771: *66 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http args: "" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http exten: "" +2025/08/19 10:56:40 [debug] 349771#349771: *66 posix_memalign: 00005CE04361A980:4096 @16 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http process request header line +2025/08/19 10:56:40 [debug] 349771#349771: *66 http header: "Host: localhost:9001" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http header: "User-Agent: curl/8.15.0" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http header: "Accept: */*" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http header done +2025/08/19 10:56:40 [debug] 349771#349771: *66 event timer del: 6: 182193291 +2025/08/19 10:56:40 [debug] 349771#349771: *66 generic phase: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 rewrite phase: 1 +2025/08/19 10:56:40 [debug] 349771#349771: *66 test location: "/health" +2025/08/19 10:56:40 [debug] 349771#349771: *66 test location: "/upload" +2025/08/19 10:56:40 [debug] 349771#349771: *66 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 10:56:40 [debug] 349771#349771: *66 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 10:56:40 [debug] 349771#349771: *66 using configuration "" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http cl:-1 max:104857600 +2025/08/19 10:56:40 [debug] 349771#349771: *66 rewrite phase: 3 +2025/08/19 10:56:40 [debug] 349771#349771: *66 post rewrite phase: 4 +2025/08/19 10:56:40 [debug] 349771#349771: *66 generic phase: 5 +2025/08/19 10:56:40 [debug] 349771#349771: *66 generic phase: 6 +2025/08/19 10:56:40 [debug] 349771#349771: *66 generic phase: 7 +2025/08/19 10:56:40 [debug] 349771#349771: *66 access phase: 8 +2025/08/19 10:56:40 [debug] 349771#349771: *66 access phase: 9 +2025/08/19 10:56:40 [debug] 349771#349771: *66 access phase: 10 +2025/08/19 10:56:40 [debug] 349771#349771: *66 post access phase: 11 +2025/08/19 10:56:40 [debug] 349771#349771: *66 generic phase: 12 +2025/08/19 10:56:40 [debug] 349771#349771: *66 generic phase: 13 +2025/08/19 10:56:40 [debug] 349771#349771: *66 content phase: 14 +2025/08/19 10:56:40 [debug] 349771#349771: *66 content phase: 15 +2025/08/19 10:56:40 [debug] 349771#349771: *66 content phase: 16 +2025/08/19 10:56:40 [debug] 349771#349771: *66 content phase: 17 +2025/08/19 10:56:40 [debug] 349771#349771: *66 content phase: 18 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http filename: "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 10:56:40 [debug] 349771#349771: *66 add cleanup: 00005CE0436254B8 +2025/08/19 10:56:40 [error] 349771#349771: *66 open() "./blobs/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1", host: "localhost:9001" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http finalize request: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http special response: 404, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http set discard body +2025/08/19 10:56:40 [debug] 349771#349771: *66 HTTP/1.1 404 Not Found +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 14:56:40 GMT +Content-Type: text/html +Content-Length: 162 +Connection: keep-alive + +2025/08/19 10:56:40 [debug] 349771#349771: *66 write new buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http write filter: l:0 f:0 s:164 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 00005CE043625600 +2025/08/19 10:56:40 [debug] 349771#349771: *66 write old buf t:1 f:0 00005CE043625538, pos 00005CE043625538, size: 164 file: 0, size: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08580, size: 100 file: 0, size: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 write new buf t:0 f:0 0000000000000000, pos 00005CE037B08C80, size: 62 file: 0, size: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http write filter: l:1 f:0 s:326 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http write filter limit 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 writev: 326 of 326 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http write filter 0000000000000000 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 10:56:40 [debug] 349771#349771: *66 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 10:56:40 [debug] 349771#349771: *66 set http keepalive handler +2025/08/19 10:56:40 [debug] 349771#349771: *66 http close request +2025/08/19 10:56:40 [debug] 349771#349771: *66 http log handler +2025/08/19 10:56:40 [debug] 349771#349771: *66 free: 00005CE043624610, unused: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 free: 00005CE04361A980, unused: 2571 +2025/08/19 10:56:40 [debug] 349771#349771: *66 free: 00005CE0436090A0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 hc free: 0000000000000000 +2025/08/19 10:56:40 [debug] 349771#349771: *66 hc busy: 0000000000000000 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 tcp_nodelay +2025/08/19 10:56:40 [debug] 349771#349771: *66 reusable connection: 1 +2025/08/19 10:56:40 [debug] 349771#349771: *66 event timer add: 6: 65000:182198291 +2025/08/19 10:56:40 [debug] 349771#349771: timer delta: 0 +2025/08/19 10:56:40 [debug] 349771#349771: worker cycle +2025/08/19 10:56:40 [debug] 349771#349771: epoll timer: 65000 +2025/08/19 10:56:40 [debug] 349771#349771: epoll: fd:6 ev:2001 d:000075EA426D11E0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 http keepalive handler +2025/08/19 10:56:40 [debug] 349771#349771: *66 malloc: 00005CE0436090A0:1024 +2025/08/19 10:56:40 [debug] 349771#349771: *66 recv: eof:1, avail:-1 +2025/08/19 10:56:40 [debug] 349771#349771: *66 recv: fd:6 0 of 1024 +2025/08/19 10:56:40 [info] 349771#349771: *66 client 127.0.0.1 closed keepalive connection +2025/08/19 10:56:40 [debug] 349771#349771: *66 close http connection: 6 +2025/08/19 10:56:40 [debug] 349771#349771: *66 event timer del: 6: 182198291 +2025/08/19 10:56:40 [debug] 349771#349771: *66 reusable connection: 0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 free: 00005CE0436090A0 +2025/08/19 10:56:40 [debug] 349771#349771: *66 free: 00005CE043606840, unused: 136 +2025/08/19 10:56:40 [debug] 349771#349771: timer delta: 1 +2025/08/19 10:56:40 [debug] 349771#349771: worker cycle +2025/08/19 10:56:40 [debug] 349771#349771: epoll timer: -1 +2025/08/19 10:58:13 [notice] 349770#349770: signal 15 (SIGTERM) received from 389333, exiting +2025/08/19 10:58:13 [debug] 349770#349770: wake up, sigio 0 +2025/08/19 10:58:13 [debug] 349770#349770: child: 0 349771 e:0 t:0 d:0 r:1 j:0 +2025/08/19 10:58:13 [debug] 349770#349770: termination cycle: 50 +2025/08/19 10:58:13 [debug] 349770#349770: sigsuspend +2025/08/19 10:58:13 [debug] 349771#349771: epoll: fd:7 ev:0001 d:000075EA426D10F8 +2025/08/19 10:58:13 [debug] 349771#349771: channel handler +2025/08/19 10:58:13 [debug] 349771#349771: channel: 32 +2025/08/19 10:58:13 [debug] 349771#349771: channel command: 4 +2025/08/19 10:58:13 [debug] 349771#349771: channel: -2 +2025/08/19 10:58:13 [debug] 349771#349771: timer delta: 92888 +2025/08/19 10:58:13 [notice] 349771#349771: exiting +2025/08/19 10:58:13 [debug] 349771#349771: flush files +2025/08/19 10:58:13 [debug] 349771#349771: run cleanup: 00005CE043647A48 +2025/08/19 10:58:13 [debug] 349771#349771: run cleanup: 00005CE04363EC50 +2025/08/19 10:58:13 [debug] 349771#349771: cleanup resolver +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043648990 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04363F7A0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043626730 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043625620 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043623600 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04361E530 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04361D470 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04361C3B0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04360C130, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043615160, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04361F5F0, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043627740, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04362B750, unused: 1 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04362F760, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043633770, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043637780, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE04363B790, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043640970, unused: 0 +2025/08/19 10:58:13 [debug] 349771#349771: free: 00005CE043644980, unused: 3872 +2025/08/19 10:58:13 [notice] 349771#349771: exit +2025/08/19 10:58:13 [notice] 349770#349770: signal 17 (SIGCHLD) received from 349771 +2025/08/19 10:58:13 [notice] 349770#349770: worker process 349771 exited with code 0 +2025/08/19 10:58:13 [debug] 349770#349770: shmtx forced unlock +2025/08/19 10:58:13 [debug] 349770#349770: wake up, sigio 3 +2025/08/19 10:58:13 [debug] 349770#349770: reap children +2025/08/19 10:58:13 [debug] 349770#349770: child: 0 349771 e:1 t:1 d:0 r:1 j:0 +2025/08/19 10:58:13 [notice] 349770#349770: exit +2025/08/19 10:58:13 [debug] 349770#349770: close listening 0.0.0.0:9001 #5 +2025/08/19 10:58:13 [debug] 349770#349770: run cleanup: 00005CE04363EC50 +2025/08/19 10:58:13 [debug] 349770#349770: cleanup resolver +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043648990 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04363F7A0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043626730 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043625620 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043623600 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04361E530 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04361D470 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04361C3B0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04360C130, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043615160, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04361F5F0, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043627740, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04362B750, unused: 1 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04362F760, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043633770, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043637780, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE04363B790, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043640970, unused: 0 +2025/08/19 10:58:13 [debug] 349770#349770: free: 00005CE043644980, unused: 3903 +2025/08/19 11:00:18 [debug] 390405#390405: bind() 0.0.0.0:9001 #5 +2025/08/19 11:00:18 [notice] 390405#390405: using the "epoll" event method +2025/08/19 11:00:18 [debug] 390405#390405: counter: 00007399280DC080, 1 +2025/08/19 11:00:18 [notice] 390405#390405: nginx/1.18.0 (Ubuntu) +2025/08/19 11:00:18 [notice] 390405#390405: OS: Linux 6.12.10-76061203-generic +2025/08/19 11:00:18 [notice] 390405#390405: getrlimit(RLIMIT_NOFILE): 1048576:1048576 +2025/08/19 11:00:18 [debug] 390406#390405: write: 6, 00007FFDF20E4780, 7, 0 +2025/08/19 11:00:18 [debug] 390406#390406: setproctitle: "nginx: master process nginx -p . -c config/local-nginx.conf" +2025/08/19 11:00:18 [notice] 390406#390406: start worker processes +2025/08/19 11:00:18 [debug] 390406#390406: channel 6:7 +2025/08/19 11:00:18 [notice] 390406#390406: start worker process 390407 +2025/08/19 11:00:18 [debug] 390406#390406: sigsuspend +2025/08/19 11:00:18 [debug] 390407#390407: add cleanup: 0000606FBB9DF7E0 +2025/08/19 11:00:18 [debug] 390407#390407: malloc: 0000606FBB999BD0:8 +2025/08/19 11:00:18 [debug] 390407#390407: notify eventfd: 9 +2025/08/19 11:00:18 [debug] 390407#390407: testing the EPOLLRDHUP flag: success +2025/08/19 11:00:18 [debug] 390407#390407: malloc: 0000606FBB9AC340:6144 +2025/08/19 11:00:18 [debug] 390407#390407: malloc: 0000739927ED4010:237568 +2025/08/19 11:00:18 [debug] 390407#390407: malloc: 0000606FBB9E5450:98304 +2025/08/19 11:00:18 [debug] 390407#390407: malloc: 0000606FBB9FD460:98304 +2025/08/19 11:00:18 [debug] 390407#390407: epoll add event: fd:5 op:1 ev:00002001 +2025/08/19 11:00:18 [debug] 390407#390407: epoll add event: fd:7 op:1 ev:00002001 +2025/08/19 11:00:18 [debug] 390407#390407: setproctitle: "nginx: worker process" +2025/08/19 11:00:18 [debug] 390407#390407: worker cycle +2025/08/19 11:00:18 [debug] 390407#390407: epoll timer: -1 +2025/08/19 11:00:46 [debug] 390407#390407: epoll: fd:5 ev:0001 d:0000739927ED4010 +2025/08/19 11:00:46 [debug] 390407#390407: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 11:00:46 [debug] 390407#390407: posix_memalign: 0000606FBB998840:512 @16 +2025/08/19 11:00:46 [debug] 390407#390407: *1 accept: 127.0.0.1:56230 fd:6 +2025/08/19 11:00:46 [debug] 390407#390407: *1 event timer add: 6: 60000:182439234 +2025/08/19 11:00:46 [debug] 390407#390407: *1 reusable connection: 1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 11:00:46 [debug] 390407#390407: timer delta: 27677 +2025/08/19 11:00:46 [debug] 390407#390407: worker cycle +2025/08/19 11:00:46 [debug] 390407#390407: epoll timer: 60000 +2025/08/19 11:00:46 [debug] 390407#390407: epoll: fd:6 ev:0001 d:0000739927ED41E0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http wait request handler +2025/08/19 11:00:46 [debug] 390407#390407: *1 malloc: 0000606FBB99B0A0:1024 +2025/08/19 11:00:46 [debug] 390407#390407: *1 recv: eof:0, avail:-1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 recv: fd:6 147 of 1024 +2025/08/19 11:00:46 [debug] 390407#390407: *1 reusable connection: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 posix_memalign: 0000606FBB9B77E0:4096 @16 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http process request line +2025/08/19 11:00:46 [debug] 390407#390407: *1 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http args: "" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http exten: "" +2025/08/19 11:00:46 [debug] 390407#390407: *1 posix_memalign: 0000606FBB9ADB50:4096 @16 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http process request header line +2025/08/19 11:00:46 [debug] 390407#390407: *1 http header: "Host: localhost:9001" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http header: "User-Agent: curl/8.15.0" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http header: "Accept: */*" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http header done +2025/08/19 11:00:46 [debug] 390407#390407: *1 event timer del: 6: 182439234 +2025/08/19 11:00:46 [debug] 390407#390407: *1 generic phase: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 rewrite phase: 1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 test location: "/health" +2025/08/19 11:00:46 [debug] 390407#390407: *1 test location: "/upload" +2025/08/19 11:00:46 [debug] 390407#390407: *1 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 11:00:46 [debug] 390407#390407: *1 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 11:00:46 [debug] 390407#390407: *1 test location: ~ "^/list/([a-f0-9]{64}).*$" +2025/08/19 11:00:46 [debug] 390407#390407: *1 using configuration "^/list/([a-f0-9]{64}).*$" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http cl:-1 max:104857600 +2025/08/19 11:00:46 [debug] 390407#390407: *1 rewrite phase: 3 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "GET" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script regex: "^(GET)$" +2025/08/19 11:00:46 [notice] 390407#390407: *1 "^(GET)$" matches "GET", client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1", host: "localhost:9001" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script if +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script if: false +2025/08/19 11:00:46 [debug] 390407#390407: *1 post rewrite phase: 4 +2025/08/19 11:00:46 [debug] 390407#390407: *1 generic phase: 5 +2025/08/19 11:00:46 [debug] 390407#390407: *1 generic phase: 6 +2025/08/19 11:00:46 [debug] 390407#390407: *1 generic phase: 7 +2025/08/19 11:00:46 [debug] 390407#390407: *1 access phase: 8 +2025/08/19 11:00:46 [debug] 390407#390407: *1 access phase: 9 +2025/08/19 11:00:46 [debug] 390407#390407: *1 access phase: 10 +2025/08/19 11:00:46 [debug] 390407#390407: *1 post access phase: 11 +2025/08/19 11:00:46 [debug] 390407#390407: *1 generic phase: 12 +2025/08/19 11:00:46 [debug] 390407#390407: *1 generic phase: 13 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http init upstream, client timer: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 epoll add event: fd:6 op:3 ev:80002005 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "QUERY_STRING" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "QUERY_STRING: " +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "REQUEST_METHOD" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "GET" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "REQUEST_METHOD: GET" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "CONTENT_TYPE" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "CONTENT_TYPE: " +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "CONTENT_LENGTH" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "CONTENT_LENGTH: " +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "SCRIPT_NAME" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "SCRIPT_NAME: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "REQUEST_URI" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "REQUEST_URI: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "DOCUMENT_URI" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "DOCUMENT_URI: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "DOCUMENT_ROOT" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "./blobs" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "DOCUMENT_ROOT: ./blobs" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "SERVER_PROTOCOL" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "HTTP/1.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "SERVER_PROTOCOL: HTTP/1.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "REQUEST_SCHEME" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "http" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "REQUEST_SCHEME: http" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "GATEWAY_INTERFACE" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "CGI/1.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "GATEWAY_INTERFACE: CGI/1.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "SERVER_SOFTWARE" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "nginx/" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "1.18.0" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "SERVER_SOFTWARE: nginx/1.18.0" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "REMOTE_ADDR" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "127.0.0.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "REMOTE_ADDR: 127.0.0.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "REMOTE_PORT" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "56230" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "REMOTE_PORT: 56230" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "SERVER_ADDR" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "127.0.0.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "SERVER_ADDR: 127.0.0.1" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "SERVER_PORT" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "9001" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "SERVER_PORT: 9001" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "SERVER_NAME" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "localhost" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "SERVER_NAME: localhost" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "REDIRECT_STATUS" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "200" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "REDIRECT_STATUS: 200" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "SCRIPT_FILENAME" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script var: "./blobs" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http script copy: "/ginxsom.fcgi" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "SCRIPT_FILENAME: ./blobs/ginxsom.fcgi" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "HTTP_HOST: localhost:9001" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "HTTP_USER_AGENT: curl/8.15.0" +2025/08/19 11:00:46 [debug] 390407#390407: *1 fastcgi param: "HTTP_ACCEPT: */*" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http cleanup add: 0000606FBB9B87C8 +2025/08/19 11:00:46 [debug] 390407#390407: *1 get rr peer, try: 1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 stream socket 10 +2025/08/19 11:00:46 [debug] 390407#390407: *1 epoll add connection: fd:10 ev:80002005 +2025/08/19 11:00:46 [debug] 390407#390407: *1 connect to unix:/tmp/ginxsom-fcgi.sock, fd:10 #2 +2025/08/19 11:00:46 [debug] 390407#390407: *1 connected +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream connect: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 posix_memalign: 0000606FBB981F20:128 @16 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream send request +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream send request body +2025/08/19 11:00:46 [debug] 390407#390407: *1 chain writer buf fl:0 s:704 +2025/08/19 11:00:46 [debug] 390407#390407: *1 chain writer in: 0000606FBB9AE8C8 +2025/08/19 11:00:46 [debug] 390407#390407: *1 writev: 704 of 704 +2025/08/19 11:00:46 [debug] 390407#390407: *1 chain writer out: 0000000000000000 +2025/08/19 11:00:46 [debug] 390407#390407: *1 event timer add: 10: 60000:182439234 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http finalize request: -4, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:2 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http request count:2 blk:0 +2025/08/19 11:00:46 [debug] 390407#390407: timer delta: 0 +2025/08/19 11:00:46 [debug] 390407#390407: worker cycle +2025/08/19 11:00:46 [debug] 390407#390407: epoll timer: 60000 +2025/08/19 11:00:46 [debug] 390407#390407: epoll: fd:6 ev:0004 d:0000739927ED41E0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http run request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream check client, write event:1, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: epoll: fd:10 ev:2005 d:0000739927ED42C8 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream process header +2025/08/19 11:00:46 [debug] 390407#390407: *1 malloc: 0000606FBB9A2140:4096 +2025/08/19 11:00:46 [debug] 390407#390407: *1 recv: eof:1, avail:-1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 recv: fd:10 248 of 4096 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 01 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 06 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 01 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: D4 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 04 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record length: 212 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi parser: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi header: "DEBUG: FastCGI received request" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi parser: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi header: "DEBUG: METHOD=GET, URI=/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi parser: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 posix_memalign: 0000606FBB9A3150:4096 @16 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi header: "Status: 501 Not Implemented" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi parser: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi header: "Content-Type: text/plain" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi parser: 1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi header done +2025/08/19 11:00:46 [debug] 390407#390407: *1 HTTP/1.1 501 Not Implemented +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 15:00:46 GMT +Content-Type: text/plain +Transfer-Encoding: chunked +Connection: keep-alive +DEBUG: FastCGI received request +DEBUG: METHOD=GET, URI=/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 + +2025/08/19 11:00:46 [debug] 390407#390407: *1 write new buf t:1 f:0 0000606FBB9A3218, pos 0000606FBB9A3218, size: 306 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http write filter: l:0 f:0 s:306 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http cacheable: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream process upstream +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe read upstream: 1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe preread: 55 +2025/08/19 11:00:46 [debug] 390407#390407: *1 readv: eof:1, avail:0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 readv: 1, last:3848 +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe recv chain: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe buf free s:0 t:1 f:0 0000606FBB9A2140, pos 0000606FBB9A2201, size: 55 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe length: -1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 input buf #0 0000606FBB9A2201 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 01 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 06 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 01 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record length: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi closed stdout +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 01 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 03 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 01 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 08 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record byte: 00 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi record length: 8 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http fastcgi sent end request +2025/08/19 11:00:46 [debug] 390407#390407: *1 input buf 0000606FBB9A2201 27 +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe write downstream: 1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe write downstream flush in +2025/08/19 11:00:46 [debug] 390407#390407: *1 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 0000606FBB9A3478 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http chunk: 27 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write old buf t:1 f:0 0000606FBB9A3218, pos 0000606FBB9A3218, size: 306 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write new buf t:1 f:0 0000606FBB9A35D0, pos 0000606FBB9A35D0, size: 4 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write new buf t:1 f:0 0000606FBB9A2140, pos 0000606FBB9A2201, size: 27 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write new buf t:0 f:0 0000000000000000, pos 0000606F9BF402E8, size: 2 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http write filter: l:0 f:0 s:339 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 pipe write downstream done +2025/08/19 11:00:46 [debug] 390407#390407: *1 event timer: 10, old: 182439234, new: 182439236 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream exit: 0000000000000000 +2025/08/19 11:00:46 [debug] 390407#390407: *1 finalize http upstream request: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 finalize http fastcgi request +2025/08/19 11:00:46 [debug] 390407#390407: *1 free rr peer 1 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 close http upstream connection: 10 +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB981F20, unused: 48 +2025/08/19 11:00:46 [debug] 390407#390407: *1 event timer del: 10: 182439234 +2025/08/19 11:00:46 [debug] 390407#390407: *1 reusable connection: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http upstream temp fd: -1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 00007FFDF20E43C0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http chunk: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write old buf t:1 f:0 0000606FBB9A3218, pos 0000606FBB9A3218, size: 306 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write old buf t:1 f:0 0000606FBB9A35D0, pos 0000606FBB9A35D0, size: 4 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write old buf t:1 f:0 0000606FBB9A2140, pos 0000606FBB9A2201, size: 27 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write old buf t:0 f:0 0000000000000000, pos 0000606F9BF402E8, size: 2 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 write new buf t:0 f:0 0000000000000000, pos 0000606F9BF402E5, size: 5 file: 0, size: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http write filter: l:1 f:0 s:344 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http write filter limit 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 writev: 344 of 344 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http write filter 0000000000000000 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:00:46 [debug] 390407#390407: *1 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 set http keepalive handler +2025/08/19 11:00:46 [debug] 390407#390407: *1 http close request +2025/08/19 11:00:46 [debug] 390407#390407: *1 http log handler +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB9A2140 +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB9B77E0, unused: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB9ADB50, unused: 2 +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB9A3150, unused: 2395 +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB99B0A0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 hc free: 0000000000000000 +2025/08/19 11:00:46 [debug] 390407#390407: *1 hc busy: 0000000000000000 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 tcp_nodelay +2025/08/19 11:00:46 [debug] 390407#390407: *1 reusable connection: 1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 event timer add: 6: 65000:182444236 +2025/08/19 11:00:46 [debug] 390407#390407: timer delta: 2 +2025/08/19 11:00:46 [debug] 390407#390407: worker cycle +2025/08/19 11:00:46 [debug] 390407#390407: epoll timer: 65000 +2025/08/19 11:00:46 [debug] 390407#390407: epoll: fd:6 ev:2005 d:0000739927ED41E0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 http keepalive handler +2025/08/19 11:00:46 [debug] 390407#390407: *1 malloc: 0000606FBB99B0A0:1024 +2025/08/19 11:00:46 [debug] 390407#390407: *1 recv: eof:1, avail:-1 +2025/08/19 11:00:46 [debug] 390407#390407: *1 recv: fd:6 0 of 1024 +2025/08/19 11:00:46 [info] 390407#390407: *1 client 127.0.0.1 closed keepalive connection +2025/08/19 11:00:46 [debug] 390407#390407: *1 close http connection: 6 +2025/08/19 11:00:46 [debug] 390407#390407: *1 event timer del: 6: 182444236 +2025/08/19 11:00:46 [debug] 390407#390407: *1 reusable connection: 0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB99B0A0 +2025/08/19 11:00:46 [debug] 390407#390407: *1 free: 0000606FBB998840, unused: 120 +2025/08/19 11:00:46 [debug] 390407#390407: timer delta: 1 +2025/08/19 11:00:46 [debug] 390407#390407: worker cycle +2025/08/19 11:00:46 [debug] 390407#390407: epoll timer: -1 +2025/08/19 11:01:47 [debug] 390407#390407: epoll: fd:5 ev:0001 d:0000739927ED4010 +2025/08/19 11:01:47 [debug] 390407#390407: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 11:01:47 [debug] 390407#390407: posix_memalign: 0000606FBB998840:512 @16 +2025/08/19 11:01:47 [debug] 390407#390407: *3 accept: 127.0.0.1:50226 fd:6 +2025/08/19 11:01:47 [debug] 390407#390407: *3 event timer add: 6: 60000:182500581 +2025/08/19 11:01:47 [debug] 390407#390407: *3 reusable connection: 1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 11:01:47 [debug] 390407#390407: timer delta: 61344 +2025/08/19 11:01:47 [debug] 390407#390407: worker cycle +2025/08/19 11:01:47 [debug] 390407#390407: epoll timer: 60000 +2025/08/19 11:01:47 [debug] 390407#390407: epoll: fd:6 ev:0001 d:0000739927ED41E1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http wait request handler +2025/08/19 11:01:47 [debug] 390407#390407: *3 malloc: 0000606FBB99B0A0:1024 +2025/08/19 11:01:47 [debug] 390407#390407: *3 recv: eof:0, avail:-1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 recv: fd:6 147 of 1024 +2025/08/19 11:01:47 [debug] 390407#390407: *3 reusable connection: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 posix_memalign: 0000606FBB9B77E0:4096 @16 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http process request line +2025/08/19 11:01:47 [debug] 390407#390407: *3 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http args: "" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http exten: "" +2025/08/19 11:01:47 [debug] 390407#390407: *3 posix_memalign: 0000606FBB9ADB50:4096 @16 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http process request header line +2025/08/19 11:01:47 [debug] 390407#390407: *3 http header: "Host: localhost:9001" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http header: "User-Agent: curl/8.15.0" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http header: "Accept: */*" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http header done +2025/08/19 11:01:47 [debug] 390407#390407: *3 event timer del: 6: 182500581 +2025/08/19 11:01:47 [debug] 390407#390407: *3 generic phase: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 rewrite phase: 1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 test location: "/health" +2025/08/19 11:01:47 [debug] 390407#390407: *3 test location: "/upload" +2025/08/19 11:01:47 [debug] 390407#390407: *3 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 11:01:47 [debug] 390407#390407: *3 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 11:01:47 [debug] 390407#390407: *3 test location: ~ "^/list/([a-f0-9]{64}).*$" +2025/08/19 11:01:47 [debug] 390407#390407: *3 using configuration "^/list/([a-f0-9]{64}).*$" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http cl:-1 max:104857600 +2025/08/19 11:01:47 [debug] 390407#390407: *3 rewrite phase: 3 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "GET" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script regex: "^(GET)$" +2025/08/19 11:01:47 [notice] 390407#390407: *3 "^(GET)$" matches "GET", client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1", host: "localhost:9001" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script if +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script if: false +2025/08/19 11:01:47 [debug] 390407#390407: *3 post rewrite phase: 4 +2025/08/19 11:01:47 [debug] 390407#390407: *3 generic phase: 5 +2025/08/19 11:01:47 [debug] 390407#390407: *3 generic phase: 6 +2025/08/19 11:01:47 [debug] 390407#390407: *3 generic phase: 7 +2025/08/19 11:01:47 [debug] 390407#390407: *3 access phase: 8 +2025/08/19 11:01:47 [debug] 390407#390407: *3 access phase: 9 +2025/08/19 11:01:47 [debug] 390407#390407: *3 access phase: 10 +2025/08/19 11:01:47 [debug] 390407#390407: *3 post access phase: 11 +2025/08/19 11:01:47 [debug] 390407#390407: *3 generic phase: 12 +2025/08/19 11:01:47 [debug] 390407#390407: *3 generic phase: 13 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http init upstream, client timer: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 epoll add event: fd:6 op:3 ev:80002005 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "QUERY_STRING" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "QUERY_STRING: " +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "REQUEST_METHOD" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "GET" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "REQUEST_METHOD: GET" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "CONTENT_TYPE" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "CONTENT_TYPE: " +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "CONTENT_LENGTH" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "CONTENT_LENGTH: " +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "SCRIPT_NAME" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "SCRIPT_NAME: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "REQUEST_URI" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "REQUEST_URI: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "DOCUMENT_URI" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "DOCUMENT_URI: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "DOCUMENT_ROOT" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "./blobs" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "DOCUMENT_ROOT: ./blobs" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "SERVER_PROTOCOL" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "HTTP/1.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "SERVER_PROTOCOL: HTTP/1.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "REQUEST_SCHEME" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "http" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "REQUEST_SCHEME: http" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "GATEWAY_INTERFACE" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "CGI/1.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "GATEWAY_INTERFACE: CGI/1.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "SERVER_SOFTWARE" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "nginx/" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "1.18.0" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "SERVER_SOFTWARE: nginx/1.18.0" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "REMOTE_ADDR" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "127.0.0.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "REMOTE_ADDR: 127.0.0.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "REMOTE_PORT" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "50226" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "REMOTE_PORT: 50226" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "SERVER_ADDR" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "127.0.0.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "SERVER_ADDR: 127.0.0.1" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "SERVER_PORT" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "9001" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "SERVER_PORT: 9001" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "SERVER_NAME" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "localhost" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "SERVER_NAME: localhost" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "REDIRECT_STATUS" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "200" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "REDIRECT_STATUS: 200" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "SCRIPT_FILENAME" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script var: "./blobs" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http script copy: "/ginxsom.fcgi" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "SCRIPT_FILENAME: ./blobs/ginxsom.fcgi" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "HTTP_HOST: localhost:9001" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "HTTP_USER_AGENT: curl/8.15.0" +2025/08/19 11:01:47 [debug] 390407#390407: *3 fastcgi param: "HTTP_ACCEPT: */*" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http cleanup add: 0000606FBB9B87C8 +2025/08/19 11:01:47 [debug] 390407#390407: *3 get rr peer, try: 1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 stream socket 10 +2025/08/19 11:01:47 [debug] 390407#390407: *3 epoll add connection: fd:10 ev:80002005 +2025/08/19 11:01:47 [debug] 390407#390407: *3 connect to unix:/tmp/ginxsom-fcgi.sock, fd:10 #4 +2025/08/19 11:01:47 [debug] 390407#390407: *3 connected +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream connect: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 posix_memalign: 0000606FBB981F20:128 @16 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream send request +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream send request body +2025/08/19 11:01:47 [debug] 390407#390407: *3 chain writer buf fl:0 s:704 +2025/08/19 11:01:47 [debug] 390407#390407: *3 chain writer in: 0000606FBB9AE8C8 +2025/08/19 11:01:47 [debug] 390407#390407: *3 writev: 704 of 704 +2025/08/19 11:01:47 [debug] 390407#390407: *3 chain writer out: 0000000000000000 +2025/08/19 11:01:47 [debug] 390407#390407: *3 event timer add: 10: 60000:182500581 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http finalize request: -4, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:2 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http request count:2 blk:0 +2025/08/19 11:01:47 [debug] 390407#390407: timer delta: 0 +2025/08/19 11:01:47 [debug] 390407#390407: worker cycle +2025/08/19 11:01:47 [debug] 390407#390407: epoll timer: 60000 +2025/08/19 11:01:47 [debug] 390407#390407: epoll: fd:6 ev:0004 d:0000739927ED41E1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http run request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream check client, write event:1, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: epoll: fd:10 ev:0004 d:0000739927ED42C9 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream dummy handler +2025/08/19 11:01:47 [debug] 390407#390407: timer delta: 1 +2025/08/19 11:01:47 [debug] 390407#390407: worker cycle +2025/08/19 11:01:47 [debug] 390407#390407: epoll timer: 59999 +2025/08/19 11:01:47 [debug] 390407#390407: epoll: fd:10 ev:2005 d:0000739927ED42C9 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream process header +2025/08/19 11:01:47 [debug] 390407#390407: *3 malloc: 0000606FBB9A2140:4096 +2025/08/19 11:01:47 [debug] 390407#390407: *3 recv: eof:1, avail:-1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 recv: fd:10 2520 of 4096 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 01 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 06 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 01 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 09 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: B2 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 06 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record length: 2482 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "DEBUG: FastCGI received request" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "DEBUG: METHOD=GET, URI=/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 posix_memalign: 0000606FBB9A3150:4096 @16 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "DEBUG: handle_list_request called with pubkey=79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "LOG: [2025-08-19 11:01:47] GET /list - Auth: pending - Status: 0" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "DEBUG: Query string:" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "DEBUG: SQL query: SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? ORDER BY uploaded_at DESC" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "Status: 200 OK" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header: "Content-Type: application/json" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi parser: 1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi header done +2025/08/19 11:01:47 [debug] 390407#390407: *3 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 15:01:47 GMT +Content-Type: application/json +Transfer-Encoding: chunked +Connection: keep-alive +DEBUG: FastCGI received request +DEBUG: METHOD=GET, URI=/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +DEBUG: handle_list_request called with pubkey=79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +LOG: [2025-08-19 11:01:47] GET /list - Auth: pending - Status: 0 +DEBUG: Query string: +DEBUG: SQL query: SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? ORDER BY uploaded_at DESC +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-XSS-Protection: 1; mode=block + +2025/08/19 11:01:47 [debug] 390407#390407: *3 write new buf t:1 f:0 0000606FBB9A3368, pos 0000606FBB9A3368, size: 719 file: 0, size: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http write filter: l:0 f:0 s:719 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http cacheable: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream process upstream +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe read upstream: 1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe preread: 2002 +2025/08/19 11:01:47 [debug] 390407#390407: *3 readv: eof:1, avail:0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 readv: 1, last:1576 +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe recv chain: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe buf free s:0 t:1 f:0 0000606FBB9A2140, pos 0000606FBB9A2346, size: 2002 file: 0, size: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe length: -1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 input buf #0 0000606FBB9A2346 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 01 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 06 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 01 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record length: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi closed stdout +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 01 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 03 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 01 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 08 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record byte: 00 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi record length: 8 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http fastcgi sent end request +2025/08/19 11:01:47 [debug] 390407#390407: *3 input buf 0000606FBB9A2346 1972 +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe write downstream: 1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe write downstream flush in +2025/08/19 11:01:47 [debug] 390407#390407: *3 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 0000606FBB9A3760 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http chunk: 1972 +2025/08/19 11:01:47 [debug] 390407#390407: *3 write old buf t:1 f:0 0000606FBB9A3368, pos 0000606FBB9A3368, size: 719 file: 0, size: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 write new buf t:1 f:0 0000606FBB9A38B8, pos 0000606FBB9A38B8, size: 5 file: 0, size: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 write new buf t:1 f:0 0000606FBB9A2140, pos 0000606FBB9A2346, size: 1972 file: 0, size: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 write new buf t:0 f:0 0000000000000000, pos 0000606F9BF402E8, size: 2 file: 0, size: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http write filter: l:0 f:0 s:2698 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http write filter limit 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 writev: 2698 of 2698 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http write filter 0000000000000000 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 pipe write downstream done +2025/08/19 11:01:47 [debug] 390407#390407: *3 event timer: 10, old: 182500581, new: 182500583 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream exit: 0000000000000000 +2025/08/19 11:01:47 [debug] 390407#390407: *3 finalize http upstream request: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 finalize http fastcgi request +2025/08/19 11:01:47 [debug] 390407#390407: *3 free rr peer 1 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 close http upstream connection: 10 +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB981F20, unused: 48 +2025/08/19 11:01:47 [debug] 390407#390407: *3 event timer del: 10: 182500581 +2025/08/19 11:01:47 [debug] 390407#390407: *3 reusable connection: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http upstream temp fd: -1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 00007FFDF20E43C0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http chunk: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 write new buf t:0 f:0 0000000000000000, pos 0000606F9BF402E5, size: 5 file: 0, size: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http write filter: l:1 f:0 s:5 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http write filter limit 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 writev: 5 of 5 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http write filter 0000000000000000 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:01:47 [debug] 390407#390407: *3 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 set http keepalive handler +2025/08/19 11:01:47 [debug] 390407#390407: *3 http close request +2025/08/19 11:01:47 [debug] 390407#390407: *3 http log handler +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB9A2140 +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB9B77E0, unused: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB9ADB50, unused: 2 +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB9A3150, unused: 1763 +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB99B0A0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 hc free: 0000000000000000 +2025/08/19 11:01:47 [debug] 390407#390407: *3 hc busy: 0000000000000000 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 tcp_nodelay +2025/08/19 11:01:47 [debug] 390407#390407: *3 reusable connection: 1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 event timer add: 6: 65000:182505583 +2025/08/19 11:01:47 [debug] 390407#390407: timer delta: 1 +2025/08/19 11:01:47 [debug] 390407#390407: worker cycle +2025/08/19 11:01:47 [debug] 390407#390407: epoll timer: 65000 +2025/08/19 11:01:47 [debug] 390407#390407: epoll: fd:6 ev:2005 d:0000739927ED41E1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 http keepalive handler +2025/08/19 11:01:47 [debug] 390407#390407: *3 malloc: 0000606FBB99B0A0:1024 +2025/08/19 11:01:47 [debug] 390407#390407: *3 recv: eof:1, avail:-1 +2025/08/19 11:01:47 [debug] 390407#390407: *3 recv: fd:6 0 of 1024 +2025/08/19 11:01:47 [info] 390407#390407: *3 client 127.0.0.1 closed keepalive connection +2025/08/19 11:01:47 [debug] 390407#390407: *3 close http connection: 6 +2025/08/19 11:01:47 [debug] 390407#390407: *3 event timer del: 6: 182505583 +2025/08/19 11:01:47 [debug] 390407#390407: *3 reusable connection: 0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB99B0A0 +2025/08/19 11:01:47 [debug] 390407#390407: *3 free: 0000606FBB998840, unused: 120 +2025/08/19 11:01:47 [debug] 390407#390407: timer delta: 0 +2025/08/19 11:01:47 [debug] 390407#390407: worker cycle +2025/08/19 11:01:47 [debug] 390407#390407: epoll timer: -1 +2025/08/19 11:02:33 [debug] 390407#390407: epoll: fd:5 ev:0001 d:0000739927ED4010 +2025/08/19 11:02:33 [debug] 390407#390407: accept on 0.0.0.0:9001, ready: 0 +2025/08/19 11:02:33 [debug] 390407#390407: posix_memalign: 0000606FBB998840:512 @16 +2025/08/19 11:02:33 [debug] 390407#390407: *5 accept: 127.0.0.1:38198 fd:6 +2025/08/19 11:02:33 [debug] 390407#390407: *5 event timer add: 6: 60000:182546308 +2025/08/19 11:02:33 [debug] 390407#390407: *5 reusable connection: 1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 epoll add event: fd:6 op:1 ev:80002001 +2025/08/19 11:02:33 [debug] 390407#390407: timer delta: 45725 +2025/08/19 11:02:33 [debug] 390407#390407: worker cycle +2025/08/19 11:02:33 [debug] 390407#390407: epoll timer: 60000 +2025/08/19 11:02:33 [debug] 390407#390407: epoll: fd:6 ev:0001 d:0000739927ED41E0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http wait request handler +2025/08/19 11:02:33 [debug] 390407#390407: *5 malloc: 0000606FBB99B0A0:1024 +2025/08/19 11:02:33 [debug] 390407#390407: *5 recv: eof:0, avail:-1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 recv: fd:6 147 of 1024 +2025/08/19 11:02:33 [debug] 390407#390407: *5 reusable connection: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 posix_memalign: 0000606FBB9B77E0:4096 @16 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http process request line +2025/08/19 11:02:33 [debug] 390407#390407: *5 http request line: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http uri: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http args: "" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http exten: "" +2025/08/19 11:02:33 [debug] 390407#390407: *5 posix_memalign: 0000606FBB9ADB50:4096 @16 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http process request header line +2025/08/19 11:02:33 [debug] 390407#390407: *5 http header: "Host: localhost:9001" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http header: "User-Agent: curl/8.15.0" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http header: "Accept: */*" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http header done +2025/08/19 11:02:33 [debug] 390407#390407: *5 event timer del: 6: 182546308 +2025/08/19 11:02:33 [debug] 390407#390407: *5 generic phase: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 rewrite phase: 1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 test location: "/health" +2025/08/19 11:02:33 [debug] 390407#390407: *5 test location: "/upload" +2025/08/19 11:02:33 [debug] 390407#390407: *5 test location: ~ "^/([a-f0-9]{64})(\.[a-zA-Z0-9]+)?$" +2025/08/19 11:02:33 [debug] 390407#390407: *5 test location: ~ "^/fcgi-head/([a-f0-9]{64}).*$" +2025/08/19 11:02:33 [debug] 390407#390407: *5 test location: ~ "^/list/([a-f0-9]{64}).*$" +2025/08/19 11:02:33 [debug] 390407#390407: *5 using configuration "^/list/([a-f0-9]{64}).*$" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http cl:-1 max:104857600 +2025/08/19 11:02:33 [debug] 390407#390407: *5 rewrite phase: 3 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "GET" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script regex: "^(GET)$" +2025/08/19 11:02:33 [notice] 390407#390407: *5 "^(GET)$" matches "GET", client: 127.0.0.1, server: localhost, request: "GET /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 HTTP/1.1", host: "localhost:9001" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script if +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script if: false +2025/08/19 11:02:33 [debug] 390407#390407: *5 post rewrite phase: 4 +2025/08/19 11:02:33 [debug] 390407#390407: *5 generic phase: 5 +2025/08/19 11:02:33 [debug] 390407#390407: *5 generic phase: 6 +2025/08/19 11:02:33 [debug] 390407#390407: *5 generic phase: 7 +2025/08/19 11:02:33 [debug] 390407#390407: *5 access phase: 8 +2025/08/19 11:02:33 [debug] 390407#390407: *5 access phase: 9 +2025/08/19 11:02:33 [debug] 390407#390407: *5 access phase: 10 +2025/08/19 11:02:33 [debug] 390407#390407: *5 post access phase: 11 +2025/08/19 11:02:33 [debug] 390407#390407: *5 generic phase: 12 +2025/08/19 11:02:33 [debug] 390407#390407: *5 generic phase: 13 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http init upstream, client timer: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 epoll add event: fd:6 op:3 ev:80002005 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "QUERY_STRING" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "QUERY_STRING: " +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "REQUEST_METHOD" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "GET" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "REQUEST_METHOD: GET" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "CONTENT_TYPE" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "CONTENT_TYPE: " +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "CONTENT_LENGTH" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "CONTENT_LENGTH: " +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "SCRIPT_NAME" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "SCRIPT_NAME: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "REQUEST_URI" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "REQUEST_URI: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "DOCUMENT_URI" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "DOCUMENT_URI: /list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "DOCUMENT_ROOT" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "./blobs" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "DOCUMENT_ROOT: ./blobs" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "SERVER_PROTOCOL" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "HTTP/1.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "SERVER_PROTOCOL: HTTP/1.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "REQUEST_SCHEME" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "http" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "REQUEST_SCHEME: http" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "GATEWAY_INTERFACE" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "CGI/1.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "GATEWAY_INTERFACE: CGI/1.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "SERVER_SOFTWARE" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "nginx/" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "1.18.0" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "SERVER_SOFTWARE: nginx/1.18.0" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "REMOTE_ADDR" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "127.0.0.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "REMOTE_ADDR: 127.0.0.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "REMOTE_PORT" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "38198" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "REMOTE_PORT: 38198" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "SERVER_ADDR" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "127.0.0.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "SERVER_ADDR: 127.0.0.1" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "SERVER_PORT" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "9001" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "SERVER_PORT: 9001" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "SERVER_NAME" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "localhost" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "SERVER_NAME: localhost" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "REDIRECT_STATUS" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "200" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "REDIRECT_STATUS: 200" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "SCRIPT_FILENAME" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script var: "./blobs" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http script copy: "/ginxsom.fcgi" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "SCRIPT_FILENAME: ./blobs/ginxsom.fcgi" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "HTTP_HOST: localhost:9001" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "HTTP_USER_AGENT: curl/8.15.0" +2025/08/19 11:02:33 [debug] 390407#390407: *5 fastcgi param: "HTTP_ACCEPT: */*" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http cleanup add: 0000606FBB9B87C8 +2025/08/19 11:02:33 [debug] 390407#390407: *5 get rr peer, try: 1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 stream socket 10 +2025/08/19 11:02:33 [debug] 390407#390407: *5 epoll add connection: fd:10 ev:80002005 +2025/08/19 11:02:33 [debug] 390407#390407: *5 connect to unix:/tmp/ginxsom-fcgi.sock, fd:10 #6 +2025/08/19 11:02:33 [debug] 390407#390407: *5 connected +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream connect: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 posix_memalign: 0000606FBB981F20:128 @16 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream send request +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream send request body +2025/08/19 11:02:33 [debug] 390407#390407: *5 chain writer buf fl:0 s:704 +2025/08/19 11:02:33 [debug] 390407#390407: *5 chain writer in: 0000606FBB9AE8C8 +2025/08/19 11:02:33 [debug] 390407#390407: *5 writev: 704 of 704 +2025/08/19 11:02:33 [debug] 390407#390407: *5 chain writer out: 0000000000000000 +2025/08/19 11:02:33 [debug] 390407#390407: *5 event timer add: 10: 60000:182546308 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http finalize request: -4, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:2 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http request count:2 blk:0 +2025/08/19 11:02:33 [debug] 390407#390407: timer delta: 0 +2025/08/19 11:02:33 [debug] 390407#390407: worker cycle +2025/08/19 11:02:33 [debug] 390407#390407: epoll timer: 60000 +2025/08/19 11:02:33 [debug] 390407#390407: epoll: fd:6 ev:0004 d:0000739927ED41E0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http run request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream check client, write event:1, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: epoll: fd:10 ev:0004 d:0000739927ED42C8 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream dummy handler +2025/08/19 11:02:33 [debug] 390407#390407: timer delta: 2 +2025/08/19 11:02:33 [debug] 390407#390407: worker cycle +2025/08/19 11:02:33 [debug] 390407#390407: epoll timer: 59998 +2025/08/19 11:02:33 [debug] 390407#390407: epoll: fd:10 ev:2005 d:0000739927ED42C8 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream request: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream process header +2025/08/19 11:02:33 [debug] 390407#390407: *5 malloc: 0000606FBB9A2140:4096 +2025/08/19 11:02:33 [debug] 390407#390407: *5 recv: eof:1, avail:-1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 recv: fd:10 2520 of 4096 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 01 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 06 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 01 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 09 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: B2 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 06 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record length: 2482 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "DEBUG: FastCGI received request" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "DEBUG: METHOD=GET, URI=/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 posix_memalign: 0000606FBB9A3150:4096 @16 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "DEBUG: handle_list_request called with pubkey=79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "LOG: [2025-08-19 11:02:33] GET /list - Auth: pending - Status: 0" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "DEBUG: Query string:" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "DEBUG: SQL query: SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? ORDER BY uploaded_at DESC" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "Status: 200 OK" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header: "Content-Type: application/json" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi parser: 1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi header done +2025/08/19 11:02:33 [debug] 390407#390407: *5 HTTP/1.1 200 OK +Server: nginx/1.18.0 (Ubuntu) +Date: Tue, 19 Aug 2025 15:02:33 GMT +Content-Type: application/json +Transfer-Encoding: chunked +Connection: keep-alive +DEBUG: FastCGI received request +DEBUG: METHOD=GET, URI=/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +DEBUG: handle_list_request called with pubkey=79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 +LOG: [2025-08-19 11:02:33] GET /list - Auth: pending - Status: 0 +DEBUG: Query string: +DEBUG: SQL query: SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? ORDER BY uploaded_at DESC +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-XSS-Protection: 1; mode=block + +2025/08/19 11:02:33 [debug] 390407#390407: *5 write new buf t:1 f:0 0000606FBB9A3368, pos 0000606FBB9A3368, size: 719 file: 0, size: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http write filter: l:0 f:0 s:719 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http cacheable: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream process upstream +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe read upstream: 1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe preread: 2002 +2025/08/19 11:02:33 [debug] 390407#390407: *5 readv: eof:1, avail:0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 readv: 1, last:1576 +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe recv chain: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe buf free s:0 t:1 f:0 0000606FBB9A2140, pos 0000606FBB9A2346, size: 2002 file: 0, size: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe length: -1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 input buf #0 0000606FBB9A2346 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 01 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 06 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 01 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record length: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi closed stdout +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 01 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 03 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 01 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 08 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record byte: 00 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi record length: 8 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http fastcgi sent end request +2025/08/19 11:02:33 [debug] 390407#390407: *5 input buf 0000606FBB9A2346 1972 +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe write downstream: 1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe write downstream flush in +2025/08/19 11:02:33 [debug] 390407#390407: *5 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 0000606FBB9A3760 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http chunk: 1972 +2025/08/19 11:02:33 [debug] 390407#390407: *5 write old buf t:1 f:0 0000606FBB9A3368, pos 0000606FBB9A3368, size: 719 file: 0, size: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 write new buf t:1 f:0 0000606FBB9A38B8, pos 0000606FBB9A38B8, size: 5 file: 0, size: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 write new buf t:1 f:0 0000606FBB9A2140, pos 0000606FBB9A2346, size: 1972 file: 0, size: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 write new buf t:0 f:0 0000000000000000, pos 0000606F9BF402E8, size: 2 file: 0, size: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http write filter: l:0 f:0 s:2698 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http write filter limit 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 writev: 2698 of 2698 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http write filter 0000000000000000 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 pipe write downstream done +2025/08/19 11:02:33 [debug] 390407#390407: *5 event timer: 10, old: 182546308, new: 182546310 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream exit: 0000000000000000 +2025/08/19 11:02:33 [debug] 390407#390407: *5 finalize http upstream request: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 finalize http fastcgi request +2025/08/19 11:02:33 [debug] 390407#390407: *5 free rr peer 1 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 close http upstream connection: 10 +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB981F20, unused: 48 +2025/08/19 11:02:33 [debug] 390407#390407: *5 event timer del: 10: 182546308 +2025/08/19 11:02:33 [debug] 390407#390407: *5 reusable connection: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http upstream temp fd: -1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http output filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http copy filter: "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http postpone filter "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" 00007FFDF20E43C0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http chunk: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 write new buf t:0 f:0 0000000000000000, pos 0000606F9BF402E5, size: 5 file: 0, size: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http write filter: l:1 f:0 s:5 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http write filter limit 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 writev: 5 of 5 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http write filter 0000000000000000 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http copy filter: 0 "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" +2025/08/19 11:02:33 [debug] 390407#390407: *5 http finalize request: 0, "/list/79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798?" a:1, c:1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 set http keepalive handler +2025/08/19 11:02:33 [debug] 390407#390407: *5 http close request +2025/08/19 11:02:33 [debug] 390407#390407: *5 http log handler +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB9A2140 +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB9B77E0, unused: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB9ADB50, unused: 2 +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB9A3150, unused: 1763 +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB99B0A0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 hc free: 0000000000000000 +2025/08/19 11:02:33 [debug] 390407#390407: *5 hc busy: 0000000000000000 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 tcp_nodelay +2025/08/19 11:02:33 [debug] 390407#390407: *5 reusable connection: 1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 event timer add: 6: 65000:182551310 +2025/08/19 11:02:33 [debug] 390407#390407: timer delta: 0 +2025/08/19 11:02:33 [debug] 390407#390407: worker cycle +2025/08/19 11:02:33 [debug] 390407#390407: epoll timer: 65000 +2025/08/19 11:02:33 [debug] 390407#390407: epoll: fd:6 ev:2005 d:0000739927ED41E0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 http keepalive handler +2025/08/19 11:02:33 [debug] 390407#390407: *5 malloc: 0000606FBB99B0A0:1024 +2025/08/19 11:02:33 [debug] 390407#390407: *5 recv: eof:1, avail:-1 +2025/08/19 11:02:33 [debug] 390407#390407: *5 recv: fd:6 0 of 1024 +2025/08/19 11:02:33 [info] 390407#390407: *5 client 127.0.0.1 closed keepalive connection +2025/08/19 11:02:33 [debug] 390407#390407: *5 close http connection: 6 +2025/08/19 11:02:33 [debug] 390407#390407: *5 event timer del: 6: 182551310 +2025/08/19 11:02:33 [debug] 390407#390407: *5 reusable connection: 0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB99B0A0 +2025/08/19 11:02:33 [debug] 390407#390407: *5 free: 0000606FBB998840, unused: 120 +2025/08/19 11:02:33 [debug] 390407#390407: timer delta: 3 +2025/08/19 11:02:33 [debug] 390407#390407: worker cycle +2025/08/19 11:02:33 [debug] 390407#390407: epoll timer: -1 diff --git a/logs/nginx.pid b/logs/nginx.pid index f6d4973..ae00c19 100644 --- a/logs/nginx.pid +++ b/logs/nginx.pid @@ -1 +1 @@ -349770 +390406 diff --git a/src/ginxsom.h b/src/ginxsom.h index 34505bd..fdd7aac 100644 --- a/src/ginxsom.h +++ b/src/ginxsom.h @@ -71,11 +71,11 @@ void handle_upload_requirements_request(void); ///////////////////////////////////////////////////////////////////////////////////////// // HTTP response helpers -void send_error_response(int status_code, const char* message); +void send_error_response(int status_code, const char* error_type, const char* message, const char* details); void send_json_response(int status_code, const char* json_content); // Logging utilities -void log_request(const char* method, const char* uri, int status_code); +void log_request(const char* method, const char* uri, const char* auth_status, int status_code); #ifdef __cplusplus } diff --git a/src/main.c b/src/main.c index 3848330..ee6d3b7 100644 --- a/src/main.c +++ b/src/main.c @@ -23,6 +23,10 @@ // Database path #define DB_PATH "db/ginxsom.db" +// Function declarations +void send_error_response(int status_code, const char* error_type, const char* message, const char* details); +void log_request(const char* method, const char* uri, const char* auth_status, int status_code); + // Blob metadata structure typedef struct { char sha256[MAX_SHA256_LEN]; @@ -511,10 +515,229 @@ int authenticate_request(const char* auth_header, const char* method, const char return NOSTR_SUCCESS; } +// Enhanced error response helper functions +void send_error_response(int status_code, const char* error_type, const char* message, const char* details) { + const char* status_text; + switch (status_code) { + case 400: status_text = "Bad Request"; break; + case 401: status_text = "Unauthorized"; break; + case 409: status_text = "Conflict"; break; + case 413: status_text = "Payload Too Large"; break; + case 500: status_text = "Internal Server Error"; break; + default: status_text = "Error"; break; + } + + printf("Status: %d %s\r\n", status_code, status_text); + printf("Content-Type: application/json\r\n\r\n"); + printf("{\n"); + printf(" \"error\": \"%s\",\n", error_type); + printf(" \"message\": \"%s\"", message); + if (details) { + printf(",\n \"details\": \"%s\"", details); + } + printf("\n}\n"); +} + +void log_request(const char* method, const char* uri, const char* auth_status, int status_code) { + time_t now = time(NULL); + struct tm* tm_info = localtime(&now); + char timestamp[64]; + strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", tm_info); + + // For now, log to stdout - later can be configured to log files + printf("LOG: [%s] %s %s - Auth: %s - Status: %d\r\n", + timestamp, method ? method : "NULL", uri ? uri : "NULL", + auth_status ? auth_status : "none", status_code); +} + +// Handle GET /list/ requests +void handle_list_request(const char* pubkey) { + printf("DEBUG: handle_list_request called with pubkey=%s\r\n", pubkey ? pubkey : "NULL"); + + // Log the incoming request + log_request("GET", "/list", "pending", 0); + + // Validate pubkey format (64 hex characters) + if (!pubkey || strlen(pubkey) != 64) { + send_error_response(400, "invalid_pubkey", "Invalid pubkey format", "Pubkey must be 64 hex characters"); + log_request("GET", "/list", "none", 400); + return; + } + + // Validate hex characters + for (int i = 0; i < 64; i++) { + char c = pubkey[i]; + if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) { + send_error_response(400, "invalid_pubkey", "Invalid pubkey format", "Pubkey must contain only hex characters"); + log_request("GET", "/list", "none", 400); + return; + } + } + + // Get query parameters for since/until filtering + const char* query_string = getenv("QUERY_STRING"); + long since_timestamp = 0; + long until_timestamp = 0; + + if (query_string) { + printf("DEBUG: Query string: %s\r\n", query_string); + + // Parse since parameter + const char* since_param = strstr(query_string, "since="); + if (since_param) { + since_timestamp = atol(since_param + 6); + printf("DEBUG: Since timestamp: %ld\r\n", since_timestamp); + } + + // Parse until parameter + const char* until_param = strstr(query_string, "until="); + if (until_param) { + until_timestamp = atol(until_param + 6); + printf("DEBUG: Until timestamp: %ld\r\n", until_timestamp); + } + } + + // Check for optional authorization + const char* auth_header = getenv("HTTP_AUTHORIZATION"); + const char* auth_status = "none"; + + if (auth_header) { + printf("DEBUG: Authorization header provided for list request\r\n"); + int auth_result = authenticate_request(auth_header, "list", NULL); + if (auth_result != NOSTR_SUCCESS) { + send_error_response(401, "authentication_failed", "Invalid or expired authentication", + "The provided Nostr event is invalid, expired, or does not authorize this operation"); + log_request("GET", "/list", "failed", 401); + return; + } + auth_status = "authenticated"; + } + + // Query database for blobs uploaded by this pubkey + sqlite3* db; + sqlite3_stmt* stmt; + int rc; + + rc = sqlite3_open_v2(DB_PATH, &db, SQLITE_OPEN_READONLY, NULL); + if (rc) { + printf("DEBUG: Database open failed: %s\r\n", sqlite3_errmsg(db)); + send_error_response(500, "database_error", "Failed to access database", "Internal server error"); + log_request("GET", "/list", auth_status, 500); + return; + } + + // Build SQL query with optional timestamp filtering + char sql[1024]; + if (since_timestamp > 0 && until_timestamp > 0) { + snprintf(sql, sizeof(sql), + "SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? AND uploaded_at >= ? AND uploaded_at <= ? ORDER BY uploaded_at DESC"); + } else if (since_timestamp > 0) { + snprintf(sql, sizeof(sql), + "SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? AND uploaded_at >= ? ORDER BY uploaded_at DESC"); + } else if (until_timestamp > 0) { + snprintf(sql, sizeof(sql), + "SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? AND uploaded_at <= ? ORDER BY uploaded_at DESC"); + } else { + snprintf(sql, sizeof(sql), + "SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE uploader_pubkey = ? ORDER BY uploaded_at DESC"); + } + + printf("DEBUG: SQL query: %s\r\n", sql); + + rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); + if (rc != SQLITE_OK) { + printf("DEBUG: SQL prepare failed: %s\r\n", sqlite3_errmsg(db)); + sqlite3_close(db); + send_error_response(500, "database_error", "Failed to prepare query", "Internal server error"); + log_request("GET", "/list", auth_status, 500); + return; + } + + // Bind parameters + sqlite3_bind_text(stmt, 1, pubkey, -1, SQLITE_STATIC); + int param_index = 2; + + if (since_timestamp > 0) { + sqlite3_bind_int64(stmt, param_index++, since_timestamp); + } + if (until_timestamp > 0) { + sqlite3_bind_int64(stmt, param_index++, until_timestamp); + } + + // Start JSON response + printf("Status: 200 OK\r\n"); + printf("Content-Type: application/json\r\n\r\n"); + printf("[\n"); + + int first_item = 1; + while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) { + if (!first_item) { + printf(",\n"); + } + first_item = 0; + + const char* sha256 = (const char*)sqlite3_column_text(stmt, 0); + long size = sqlite3_column_int64(stmt, 1); + const char* type = (const char*)sqlite3_column_text(stmt, 2); + long uploaded_at = sqlite3_column_int64(stmt, 3); + const char* filename = (const char*)sqlite3_column_text(stmt, 4); + + // Determine file extension from MIME type + const char* extension = ""; + if (strstr(type, "image/jpeg")) { + extension = ".jpg"; + } else if (strstr(type, "image/webp")) { + extension = ".webp"; + } else if (strstr(type, "image/png")) { + extension = ".png"; + } else if (strstr(type, "image/gif")) { + extension = ".gif"; + } else if (strstr(type, "video/mp4")) { + extension = ".mp4"; + } else if (strstr(type, "video/webm")) { + extension = ".webm"; + } else if (strstr(type, "audio/mpeg")) { + extension = ".mp3"; + } else if (strstr(type, "audio/ogg")) { + extension = ".ogg"; + } else if (strstr(type, "text/plain")) { + extension = ".txt"; + } else { + extension = ".bin"; + } + + // Output blob descriptor JSON + printf(" {\n"); + printf(" \"url\": \"http://localhost:9001/%s%s\",\n", sha256, extension); + printf(" \"sha256\": \"%s\",\n", sha256); + printf(" \"size\": %ld,\n", size); + printf(" \"type\": \"%s\",\n", type); + printf(" \"uploaded\": %ld", uploaded_at); + + // Add optional filename if available + if (filename && strlen(filename) > 0) { + printf(",\n \"filename\": \"%s\"", filename); + } + + printf("\n }"); + } + + printf("\n]\n"); + + sqlite3_finalize(stmt); + sqlite3_close(db); + + printf("DEBUG: List request completed successfully\r\n"); + log_request("GET", "/list", auth_status, 200); +} + // Handle PUT /upload requests void handle_upload_request(void) { printf("DEBUG: handle_upload_request called\r\n"); + // Log the incoming request + log_request("PUT", "/upload", "pending", 0); + // Get HTTP headers const char* content_type = getenv("CONTENT_TYPE"); const char* content_length_str = getenv("CONTENT_LENGTH"); @@ -524,24 +747,21 @@ void handle_upload_request(void) { // Validate required headers if (!content_type) { - printf("Status: 400 Bad Request\r\n"); - printf("Content-Type: text/plain\r\n\r\n"); - printf("Content-Type header required\n"); + send_error_response(400, "missing_header", "Content-Type header required", "The Content-Type header must be specified for file uploads"); + log_request("PUT", "/upload", "none", 400); return; } if (!content_length_str) { - printf("Status: 400 Bad Request\r\n"); - printf("Content-Type: text/plain\r\n\r\n"); - printf("Content-Length header required\n"); + send_error_response(400, "missing_header", "Content-Length header required", "The Content-Length header must be specified for file uploads"); + log_request("PUT", "/upload", "none", 400); return; } long content_length = atol(content_length_str); if (content_length <= 0 || content_length > 100 * 1024 * 1024) { // 100MB limit - printf("Status: 413 Payload Too Large\r\n"); - printf("Content-Type: text/plain\r\n\r\n"); - printf("File size must be between 1 byte and 100MB\n"); + send_error_response(413, "payload_too_large", "File size must be between 1 byte and 100MB", "Maximum allowed file size is 100MB"); + log_request("PUT", "/upload", "none", 413); return; } @@ -549,54 +769,43 @@ void handle_upload_request(void) { const char* auth_header = getenv("HTTP_AUTHORIZATION"); printf("DEBUG: Raw Authorization header: %s\r\n", auth_header ? auth_header : "NULL"); - // Parse the authorization header to extract the Nostr event + // For authenticated uploads, validate the authorization const char* uploader_pubkey = NULL; - if (auth_header) { - printf("DEBUG: Authorization header present, length=%zu\r\n", strlen(auth_header)); + // Authenticate the request first (before processing file) + int auth_result = authenticate_request(auth_header, "PUT", NULL); + if (auth_result != NOSTR_SUCCESS) { + send_error_response(401, "authentication_failed", "Invalid or expired authentication", + "The provided Nostr event is invalid, expired, or does not authorize this operation"); + log_request("PUT", "/upload", "failed", 401); + return; + } - // Parse authorization header to get JSON + // Extract pubkey for metadata storage char event_json[4096]; int parse_result = parse_authorization_header(auth_header, event_json, sizeof(event_json)); - printf("DEBUG: parse_authorization_header returned: %d\r\n", parse_result); - if (parse_result == NOSTR_SUCCESS) { - printf("DEBUG: Successfully parsed authorization header\r\n"); - printf("DEBUG: Event JSON: %.200s...\r\n", event_json); - - // Parse the JSON event to extract pubkey cJSON* event = cJSON_Parse(event_json); if (event) { - printf("DEBUG: Successfully parsed JSON event\r\n"); cJSON* pubkey_json = cJSON_GetObjectItem(event, "pubkey"); if (pubkey_json && cJSON_IsString(pubkey_json)) { const char* temp_pubkey = cJSON_GetStringValue(pubkey_json); - printf("DEBUG: Found pubkey in JSON: %.16s...\r\n", temp_pubkey ? temp_pubkey : "NULL"); - - // Copy the pubkey to a static buffer to preserve it after cJSON_Delete static char pubkey_buffer[256]; if (temp_pubkey) { strncpy(pubkey_buffer, temp_pubkey, sizeof(pubkey_buffer)-1); pubkey_buffer[sizeof(pubkey_buffer)-1] = '\0'; uploader_pubkey = pubkey_buffer; - printf("DEBUG: Copied pubkey to static buffer: %.16s...\r\n", uploader_pubkey); } - } else { - printf("DEBUG: No valid 'pubkey' field found in JSON event\r\n"); } cJSON_Delete(event); - } else { - printf("DEBUG: Failed to parse JSON event\r\n"); } - } else { - printf("DEBUG: Failed to parse authorization header, error: %d\r\n", parse_result); } + log_request("PUT", "/upload", "authenticated", 0); } else { - printf("DEBUG: No authorization header provided\r\n"); + // No authentication provided - allow anonymous uploads + log_request("PUT", "/upload", "anonymous", 0); } - printf("DEBUG: Final uploader_pubkey after auth parsing: %s\r\n", uploader_pubkey ? uploader_pubkey : "NULL"); - // Read file data from stdin unsigned char* file_data = malloc(content_length); if (!file_data) { @@ -633,6 +842,18 @@ void handle_upload_request(void) { nostr_bytes_to_hex(hash, 32, sha256_hex); printf("DEBUG: Calculated SHA-256: %s\r\n", sha256_hex); + // For authenticated uploads, verify hash matches the one in the authorization event + if (auth_header) { + int auth_result = authenticate_request(auth_header, "PUT", sha256_hex); + if (auth_result != NOSTR_SUCCESS) { + free(file_data); + send_error_response(409, "hash_mismatch", "File hash does not match authorization", + "The calculated SHA-256 hash of the uploaded file does not match the hash specified in the authorization event"); + log_request("PUT", "/upload", "hash_conflict", 409); + return; + } + } + // Determine file extension from Content-Type const char* extension = ""; if (strstr(content_type, "image/jpeg")) { @@ -806,19 +1027,45 @@ int main(void) { printf("DEBUG: Extracted SHA256=%s\r\n", sha256 ? sha256 : "NULL"); if (sha256) { handle_head_request(sha256); + log_request("HEAD", request_uri, "none", 200); // Assuming success - could be enhanced to track actual status } else { printf("Status: 400 Bad Request\r\n"); printf("Content-Type: text/plain\r\n\r\n"); printf("Invalid SHA-256 hash in URI\n"); + log_request("HEAD", request_uri, "none", 400); } } else if (strcmp(request_method, "PUT") == 0 && strcmp(request_uri, "/upload") == 0) { // Handle PUT /upload requests with authentication handle_upload_request(); + } else if (strcmp(request_method, "GET") == 0 && strncmp(request_uri, "/list/", 6) == 0) { + // Handle GET /list/ requests + const char* pubkey = request_uri + 6; // Skip "/list/" + + // Extract pubkey from URI (remove query string if present) + static char pubkey_buffer[65]; + const char* query_start = strchr(pubkey, '?'); + size_t pubkey_len; + + if (query_start) { + pubkey_len = query_start - pubkey; + } else { + pubkey_len = strlen(pubkey); + } + + if (pubkey_len == 64) { // Valid pubkey length + strncpy(pubkey_buffer, pubkey, 64); + pubkey_buffer[64] = '\0'; + handle_list_request(pubkey_buffer); + } else { + send_error_response(400, "invalid_pubkey", "Invalid pubkey format", "Pubkey must be 64 hex characters"); + log_request("GET", request_uri, "none", 400); + } } else { // Other methods not implemented yet printf("Status: 501 Not Implemented\r\n"); printf("Content-Type: text/plain\r\n\r\n"); printf("Method %s not implemented\n", request_method); + log_request(request_method, request_uri, "none", 501); } }