From 95ccb3a9c40de6e12d575e0b34c16ed8d9fdc73a Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 18 Aug 2025 21:51:54 -0400 Subject: [PATCH] Finished BUD 1 --- .clinerules/workspace_rules.md | 39 ++ FASTCGI.md | 368 ++++++++++++++++++ IMPLEMENTATION.md | 62 +-- Makefile | 50 +++ README.md | 115 +++++- ...352ce5f52c3820c904b7066fe20b00f2d9cfe.webp | Bin 0 -> 203886 bytes ...939268ac2871f194e95523b7b66113862da15e.jpg | Bin 0 -> 30236 bytes build/ginxsom-fcgi | Bin 0 -> 17048 bytes build/main.o | Bin 0 -> 13920 bytes config/deploy.sh | 233 +++++++++++ config/local-nginx.conf | 109 ++++++ config/nginx/ginxsom.conf | 131 +++++++ config/systemd/ginxsom.service | 47 +++ db/ginxsom.db | Bin 0 -> 36864 bytes db/ginxsom.db.backup.1755562070 | Bin 0 -> 36864 bytes db/ginxsom.db.backup.1755563905 | Bin 0 -> 36864 bytes db/ginxsom.db.backup.1755565735 | Bin 0 -> 36864 bytes db/init.sh | 52 +++ db/schema.sql | 67 ++++ logs/access.log | 64 +++ logs/error.log | 92 +++++ logs/nginx.pid | 1 + scripts/start-fcgi.sh | 68 ++++ src/main.c | 261 +++++++++++++ 24 files changed, 1728 insertions(+), 31 deletions(-) create mode 100644 .clinerules/workspace_rules.md create mode 100644 FASTCGI.md create mode 100644 Makefile create mode 100644 blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp create mode 100644 blobs/f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.jpg create mode 100755 build/ginxsom-fcgi create mode 100644 build/main.o create mode 100755 config/deploy.sh create mode 100644 config/local-nginx.conf create mode 100644 config/nginx/ginxsom.conf create mode 100644 config/systemd/ginxsom.service create mode 100644 db/ginxsom.db create mode 100644 db/ginxsom.db.backup.1755562070 create mode 100644 db/ginxsom.db.backup.1755563905 create mode 100644 db/ginxsom.db.backup.1755565735 create mode 100755 db/init.sh create mode 100644 db/schema.sql create mode 100644 logs/access.log create mode 100644 logs/error.log create mode 100644 logs/nginx.pid create mode 100755 scripts/start-fcgi.sh create mode 100644 src/main.c diff --git a/.clinerules/workspace_rules.md b/.clinerules/workspace_rules.md new file mode 100644 index 0000000..17dccfc --- /dev/null +++ b/.clinerules/workspace_rules.md @@ -0,0 +1,39 @@ +# Workspace Rules for Ginxsom Development + +## Important Reminders for Future Assistants + +### SQLite Configuration +- **SQLite is compiled locally** in this project, not using system package +- Location: `sqlite3-build/` directory contains local SQLite 3.37.2 build +- The system SQLite package had version conflicts, so we built from source +- Database file: `db/ginxsom.db` (local to project) +- Always use local SQLite binary: `./sqlite3-build/sqlite3` + +### Development Setup +- **All development is LOCAL** - work within the project directory +- Local nginx runs on port 9001 (not system nginx on port 80) +- Configuration: `config/local-nginx.conf` (NOT system nginx configs) +- FastCGI socket: `/tmp/ginxsom-fcgi.sock` +- Never modify system nginx files in `/etc/nginx/` during development + +### File Structure +- Blob files stored in: `blobs/` directory +- Database: `db/ginxsom.db` +- Built binary: `build/ginxsom-fcgi` +- Logs: `logs/` directory (nginx access/error logs) + +### Testing +- Test files are already in `blobs/`: + - `708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp` + - `f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.jpg` +- Test URLs: `http://localhost:9001/` or `http://localhost:9001/.` + +### Build Process +- Compile with: `make` +- Start FastCGI: `./scripts/start-fcgi.sh` +- Start nginx: `nginx -p . -c config/local-nginx.conf` + +### Common Issues +- 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 diff --git a/FASTCGI.md b/FASTCGI.md new file mode 100644 index 0000000..4d0d954 --- /dev/null +++ b/FASTCGI.md @@ -0,0 +1,368 @@ +# FastCGI Protocol Flow Documentation + +This document provides ASCII flow charts to understand how FastCGI works with nginx for the ginxsom blossom server. + +## FastCGI Overview + +FastCGI is a binary protocol that allows web servers (like nginx) to communicate with application servers efficiently. Unlike CGI which spawns a new process per request, FastCGI applications are persistent and can handle multiple concurrent requests. + +## 1. FastCGI Connection Setup Flow + +``` +┌─────────────────┐ Socket ┌─────────────────┐ +│ nginx │◄──────────────►│ FastCGI App │ +│ Web Server │ Connection │ (ginxsom) │ +└─────────────────┘ └─────────────────┘ + │ │ + │ 1. Create Unix socket │ + │ /tmp/ginxsom.sock │ + │ │ + │ 2. FastCGI app binds & listens │ + │◄───────────────────────────────────│ + │ │ + │ 3. nginx connects when needed │ + │───────────────────────────────────►│ + │ │ + │ 4. Connection established │ + │◄──────────────────────────────────►│ +``` + +## 2. HTTP Request Processing Flow + +``` +┌─────────┐ HTTP ┌─────────┐ FastCGI ┌─────────┐ +│ Client │────────────►│ nginx │─────────────►│ ginxsom │ +│Browser │ │ │ │ FastCGI │ +└─────────┘ └─────────┘ └─────────┘ + │ │ │ + │ HTTP Request │ │ + │ PUT /upload │ │ + │────────────────────────► │ + │ │ │ + │ │ FCGI_BEGIN_REQUEST │ + │ │───────────────────────►│ + │ │ │ + │ │ FCGI_PARAMS │ + │ │ (HTTP headers, etc) │ + │ │───────────────────────►│ + │ │ │ + │ │ FCGI_STDIN │ + │ │ (Request body) │ + │ │───────────────────────►│ + │ │ │ + │ │ Process │ + │ │◄───────Request─────────│ + │ │ │ + │ │ FCGI_STDOUT │ + │ │ (Response headers) │ + │ │◄───────────────────────│ + │ │ │ + │ │ FCGI_STDOUT │ + │ │ (Response body) │ + │ │◄───────────────────────│ + │ │ │ + │ │ FCGI_END_REQUEST │ + │ │◄───────────────────────│ + │ │ │ + │ HTTP Response │ │ + │◄──────────────────────│ │ +``` + +## 3. FastCGI Record Structure + +``` +FastCGI Record Format: +┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ +│ Version │ Type │RequestID│RequestID│ Length │ Length │ Padding │Reserved │ +│ (1) │ (1) │ Hi │ Lo │ Hi │ Lo │ Length │ (1) │ +│ │ │ (1) │ (1) │ (1) │ (1) │ (1) │ │ +└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ +│◄────────────────── 8 bytes header ──────────────────────►│ +│ │ +│◄─────────────────── Content (Length bytes) ─────────────►│ +│ │ +│◄───── Padding (Padding Length bytes) ────►│ + +Record Types: +- FCGI_BEGIN_REQUEST (1) - Start new request +- FCGI_PARAMS (4) - Environment variables +- FCGI_STDIN (5) - Request body data +- FCGI_STDOUT (6) - Response data +- FCGI_END_REQUEST (3) - End of request +``` + +## 4. Ginxsom Endpoint Handling Flow + +### 4a. Static File Request (Direct nginx) + +``` +┌─────────┐ ┌─────────┐ +│ Client │ │ nginx │ +└─────────┘ └─────────┘ + │ │ + │ GET /{sha256hash} │ + │───────────────────────►│ + │ │ + │ │ Check file exists: + │ │ /var/lib/ginxsom/files/ + │ │ {first2}/{remaining} + │ │ + │ │ ┌─ File exists? ─┐ + │ │ │ YES │ + │ │ └────────────────┘ + │ │ │ + │ HTTP 200 + File │ │ Serve directly + │◄──────────────────────│◄──────┘ + │ │ + + Alternative flow: + │ │ ┌─ File exists? ─┐ + │ │ │ NO │ + │ │ └────────────────┘ + │ │ │ + │ HTTP 404 Not Found │ │ + │◄──────────────────────│◄──────┘ +``` + +### 4b. Upload Request (FastCGI) + +``` +┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ +│ Client │ │ nginx │ │ ginxsom │ │ File │ +│ │ │ │ │ FastCGI │ │ System │ +└─────────┘ └─────────┘ └─────────┘ └─────────┘ + │ │ │ │ + │ PUT /upload │ │ │ + │ Auth: xyz │ │ │ + │ Body: file │ │ │ + │─────────────►│ │ │ + │ │ │ │ + │ │ FCGI_PARAMS │ │ + │ │ METHOD=PUT │ │ + │ │ URI=/upload │ │ + │ │ AUTH=xyz │ │ + │ │─────────────►│ │ + │ │ │ │ + │ │ FCGI_STDIN │ │ + │ │ (file data) │ │ + │ │─────────────►│ │ + │ │ │ │ + │ │ │ Verify Auth │ + │ │ │ (nostr sig) │ + │ │ │ │ + │ │ │ Calculate │ + │ │ │ SHA-256 │ + │ │ │ │ + │ │ │ Write file │ + │ │ │─────────────►│ + │ │ │ │ + │ │ │ Store │ + │ │ │ metadata │ + │ │ │────────────────────► + │ │ │ │ DB + │ │ │ │ + │ │ FCGI_STDOUT │ │ + │ │ 200 OK │ │ + │ │ {sha256} │ │ + │ │◄─────────────│ │ + │ │ │ │ + │ HTTP 200 OK │ │ │ + │ {sha256} │ │ │ + │◄─────────────│ │ │ +``` + +### 4c. HEAD Request for Metadata (FastCGI) + +``` +┌─────────┐ ┌─────────┐ ┌─────────┐ +│ Client │ │ nginx │ │ ginxsom │ +│ │ │ │ │ FastCGI │ +└─────────┘ └─────────┘ └─────────┘ + │ │ │ + │ HEAD /{sha256} │ │ + │──────────────────►│ │ + │ │ │ + │ │ FCGI_PARAMS │ + │ │ METHOD=HEAD │ + │ │ BLOSSOM_HASH=... │ + │ │──────────────────►│ + │ │ │ + │ │ │ Query DB for + │ │ │ file metadata + │ │ │ + │ │ FCGI_STDOUT │ + │ │ Content-Length: X │ + │ │ Content-Type: Y │ + │ │ x-sha256: hash │ + │ │◄──────────────────│ + │ │ │ + │ HTTP Headers Only │ │ + │◄──────────────────│ │ +``` + +## 5. Development vs Production Deployment + +### Development Mode +``` +┌─────────────┐ ┌─────────────┐ +│ Terminal │ │ nginx │ +│ │ │ │ +│ ./ginxsom │◄──────────────►│ Config: │ +│ --fastcgi │ Unix Socket │ fastcgi_pass│ +│ --socket │ /tmp/ginxsom │ unix:/tmp/ │ +│ /tmp/... │ .sock │ ginxsom.sock│ +└─────────────┘ └─────────────┘ + │ │ + │ Direct execution │ sudo systemctl + │ Easy debugging │ reload nginx + │ Ctrl+C to stop │ (config changes) + │ Real-time logs │ +``` + +### Production Mode +``` +┌─────────────┐ ┌─────────────┐ +│ systemd │ │ nginx │ +│ │ │ │ +│ ginxsom │◄──────────────►│ Config: │ +│ .service │ Unix Socket │ fastcgi_pass│ +│ │ /run/ginxsom/ │ unix:/run/ │ +│ Auto-start │ ginxsom.sock │ ginxsom/... │ +│ Auto-restart│ │ │ +│ Log to file │ │ │ +└─────────────┘ └─────────────┘ +``` + +## 6. Complete nginx + FastCGI Request Flow + +``` +┌───────┐ ┌─────────────────────────────────────────────────┐ ┌─────────┐ +│Client │ │ nginx │ │ginxsom │ +└───────┘ └─────────────────────────────────────────────────┘ │FastCGI │ + │ │ └─────────┘ + │ GET /abc123...def │ │ + │───────────────────────►│ │ + │ │ │ + │ │ location ~ ^/([a-f0-9]{64})$ { │ + │ │ # Check if static file exists │ + │ │ try_files /$prefix/$suffix =404 │ + │ │ } │ + │ │ │ + │ │ ┌─ File exists? ─┐ │ + │ │ │ YES │ │ + │ │ └────────────────┘ │ + │ │ │ │ + │ │ │ Serve directly (fast!) │ + │ HTTP 200 + File │ │ │ + │◄──────────────────────│◄──────┘ │ + │ │ │ + │ │ │ + │ PUT /upload │ │ + │ Authorization: xyz │ │ + │───────────────────────►│ │ + │ │ │ + │ │ location /upload { │ + │ │ fastcgi_pass unix:/tmp/ │ + │ │ ginxsom.sock; │ + │ │ } │ + │ │ │ + │ │ ┌─ FastCGI Protocol ─┐ │ + │ │ │ FCGI_BEGIN_REQUEST │─────────────►│ + │ │ │ FCGI_PARAMS │─────────────►│ + │ │ │ FCGI_STDIN │─────────────►│ + │ │ └─────────────────────┘ │ + │ │ │ + │ │ │ Verify + │ │ │ nostr + │ │ │ signature + │ │ │ + │ │ │ Calculate + │ │ │ SHA-256 + │ │ │ + │ │ │ Store file + │ │ │ & metadata + │ │ │ + │ │ ┌─ FastCGI Response ─┐ │ + │ │ │ FCGI_STDOUT │◄─────────────│ + │ │ │ FCGI_END_REQUEST │◄─────────────│ + │ │ └─────────────────────┘ │ + │ │ │ + │ HTTP 200 OK │ │ + │ {"sha256": "..."} │ │ + │◄──────────────────────│ │ +``` + +## 7. libfcgi Library Usage + +### Basic FastCGI Application Structure + +```c +#include + +int main() { + FCGX_Request request; + + // Initialize FastCGI library + FCGX_Init(); + FCGX_InitRequest(&request, 0, 0); + + // Main request processing loop + while (FCGX_Accept_r(&request) == 0) { + + // Read environment variables (HTTP headers, etc) + char* method = FCGX_GetParam("REQUEST_METHOD", request.envp); + char* uri = FCGX_GetParam("REQUEST_URI", request.envp); + char* auth = FCGX_GetParam("HTTP_AUTHORIZATION", request.envp); + + // Route requests + if (strcmp(uri, "/health") == 0) { + handle_health(&request); + } else if (strcmp(uri, "/upload") == 0) { + handle_upload(&request); + } else if (strncmp(uri, "/head/", 6) == 0) { + handle_head(&request); + } + + // Finish this request + FCGX_Finish_r(&request); + } + + return 0; +} +``` + +### Reading Request Data + +``` +┌─────────────────┐ ┌─────────────────┐ +│ nginx sends: │ │ ginxsom reads: │ +├─────────────────┤ ├─────────────────┤ +│ FCGI_PARAMS │────────►│ FCGX_GetParam() │ +│ REQUEST_METHOD │ │ "PUT" │ +│ REQUEST_URI │ │ "/upload" │ +│ CONTENT_LENGTH │ │ "1024" │ +│ HTTP_* │ │ headers │ +├─────────────────┤ ├─────────────────┤ +│ FCGI_STDIN │────────►│ FCGX_GetStr() │ +│ (request body) │ │ file data │ +└─────────────────┘ └─────────────────┘ +``` + +### Writing Response Data + +``` +┌─────────────────┐ ┌─────────────────┐ +│ ginxsom writes: │ │ nginx sends: │ +├─────────────────┤ ├─────────────────┤ +│ FCGX_PutS() │────────►│ HTTP Response │ +│ "Content-Type: │ │ Headers │ +│ application/ │ │ │ +│ json\r\n\r\n" │ │ │ +├─────────────────┤ ├─────────────────┤ +│ FCGX_PutS() │────────►│ HTTP Response │ +│ '{"status": │ │ Body │ +│ "ok"}' │ │ │ +└─────────────────┘ └─────────────────┘ +``` + +This documentation shows how FastCGI enables nginx to efficiently serve static blossom files directly while delegating authenticated operations to the ginxsom FastCGI application. diff --git a/IMPLEMENTATION.md b/IMPLEMENTATION.md index c7d2a9b..652b55a 100644 --- a/IMPLEMENTATION.md +++ b/IMPLEMENTATION.md @@ -14,39 +14,42 @@ This document outlines the implementation plan for ginxsom, a FastCGI-based Blos ## Phase 1: Basic File Serving & Retrieval (BUD-01) ### 1.1 Infrastructure Setup -- [ ] Create basic directory structure - - [ ] Create `blobs/` directory for file storage - - [ ] Create `db/` directory for SQLite database - - [ ] Create `logs/` directory for application logs - - [ ] Set up proper permissions (nginx readable, app writable) +- [x] Create basic directory structure + - [x] Create `blobs/` directory for file storage + - [x] Create `db/` directory for SQLite database + - [x] Create `logs/` directory for application logs + - [x] Set up proper permissions (nginx readable, app writable) ### 1.2 Database Schema -- [ ] Design SQLite schema for blob metadata - - [ ] `blobs` table: sha256, size, type, uploaded_at, uploader_pubkey - - [ ] `server_config` table: key-value pairs for server settings - - [ ] Create database initialization script - - [ ] Add proper indexes on sha256 hash +- [x] Design SQLite schema for blob metadata + - [x] `blobs` table: sha256, size, type, uploaded_at, uploader_pubkey, filename + - [x] `server_config` table: key-value pairs for server settings + - [x] Create database initialization script + - [x] Add proper indexes on sha256 hash ### 1.3 nginx Configuration -- [ ] Configure nginx for static file serving - - [ ] Set up location block for `GET /` pattern - - [ ] Configure proper MIME type detection - - [ ] Add proper headers (Cache-Control, ETag, etc.) - - [ ] Handle 404s gracefully when blob doesn't exist - - [ ] Configure FastCGI pass-through for non-GET requests +- [x] Configure nginx for static file serving + - [x] Set up location block for `GET /` pattern with extension support + - [x] Configure try_files directive for multiple extension fallbacks + - [x] Configure proper MIME type detection + - [x] Add proper headers (Cache-Control, ETag, etc.) + - [x] Handle 404s gracefully when blob doesn't exist + - [x] Configure FastCGI pass-through for HEAD and non-GET requests ### 1.4 Basic HEAD Endpoint -- [ ] Implement FastCGI handler for `HEAD /` - - [ ] Query database for blob metadata - - [ ] Return proper headers (Content-Type, Content-Length, etc.) - - [ ] Return 404 if blob doesn't exist - - [ ] Add server timing headers for debugging +- [x] Implement FastCGI handler for `HEAD /` + - [x] Query database for blob metadata (single source of truth) + - [x] Extract SHA-256 from URL (strip extensions) + - [x] Return proper headers (Content-Type, Content-Length, etc.) + - [x] Return 404 if blob doesn't exist in database + - [x] Add server timing headers for debugging ### 1.5 Testing & Validation -- [ ] Create test blobs with known SHA-256 hashes -- [ ] Verify nginx serves files correctly -- [ ] Verify HEAD requests return proper metadata -- [ ] Test with missing files (404 responses) +- [x] Create test blobs with known SHA-256 hashes +- [x] Verify nginx serves files correctly with extension support +- [x] Verify HEAD requests return proper metadata +- [x] Test with missing files (404 responses) +- [x] Test HEAD requests with and without extensions - [ ] Performance test with large files --- @@ -177,10 +180,10 @@ This document outlines the implementation plan for ginxsom, a FastCGI-based Blos ## Development Milestones -### Milestone 1: Basic Functionality ✓ (Phase 1 Complete) -- nginx serves files by hash -- HEAD requests return metadata -- Database stores blob information +### Milestone 1: Basic Functionality (Phase 1 Complete) +- [x] nginx serves files by hash with extension support +- [x] HEAD requests return metadata from database +- [x] Database stores blob information with proper schema ### Milestone 2: Full Upload Support (Phase 2 Complete) - Authenticated uploads working @@ -262,4 +265,3 @@ This document outlines the implementation plan for ginxsom, a FastCGI-based Blos - [ ] Backup procedures - [ ] Security hardening guide - [ ] Documentation and examples - diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..be51725 --- /dev/null +++ b/Makefile @@ -0,0 +1,50 @@ +# Ginxsom Blossom Server Makefile + +CC = gcc +CFLAGS = -Wall -Wextra -std=c99 -O2 +LIBS = -lfcgi -lsqlite3 +SRCDIR = src +BUILDDIR = build +TARGET = $(BUILDDIR)/ginxsom-fcgi + +# Source files +SOURCES = $(SRCDIR)/main.c +OBJECTS = $(SOURCES:$(SRCDIR)/%.c=$(BUILDDIR)/%.o) + +# Default target +all: $(TARGET) + +# Create build directory +$(BUILDDIR): + mkdir -p $(BUILDDIR) + +# Compile object files +$(BUILDDIR)/%.o: $(SRCDIR)/%.c | $(BUILDDIR) + $(CC) $(CFLAGS) -c $< -o $@ + +# Link final executable +$(TARGET): $(OBJECTS) + $(CC) $(OBJECTS) $(LIBS) -o $@ + +# Clean build files +clean: + rm -rf $(BUILDDIR) + +# Install (copy to system location) +install: $(TARGET) + sudo cp $(TARGET) /usr/local/bin/ + sudo chmod 755 /usr/local/bin/ginxsom-fcgi + +# Uninstall +uninstall: + sudo rm -f /usr/local/bin/ginxsom-fcgi + +# Run the FastCGI application +run: $(TARGET) + ./$(TARGET) + +# Debug build +debug: CFLAGS += -g -DDEBUG +debug: $(TARGET) + +.PHONY: all clean install uninstall run debug diff --git a/README.md b/README.md index 9a4a1b6..11e9675 100644 --- a/README.md +++ b/README.md @@ -231,9 +231,122 @@ Successful uploads return blob descriptors: │ └── b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf ├── a8/ │ └── 47/ -│ └── a8472f6d93e42c1e5b4e9f3a7b2c8d4e6f9a1b3c5d7e8f0a1b2c3d4e5f6a7b8.png +│ └── a8472f6d93e42c1e5b4e6f9a1b3c5d7e8f0a1b2c3d4e6f9a1b3c5d7e8f0a1b2c3d4e5f6a7b8.png ``` +## File and Extension Handling + +ginxsom implements a sophisticated file and extension handling strategy that optimizes both performance and flexibility: + +### Database-Driven Architecture + +The system uses the SQLite database as the **single source of truth** for blob existence and metadata: + +```sql +-- Database schema (clean SHA-256 hashes, no extensions) +CREATE TABLE blobs ( + sha256 TEXT PRIMARY KEY, -- Clean hash: b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553 + size INTEGER NOT NULL, + type TEXT NOT NULL, + uploaded_at INTEGER NOT NULL, + uploader_pubkey TEXT, + filename TEXT -- Original filename: document.pdf +); +``` + +**Key Benefits:** +- **Database Lookup vs Filesystem**: FastCGI queries the database instead of checking filesystem +- **Single Source of Truth**: Database definitively knows if a blob exists +- **Extension Irrelevant**: Database uses clean SHA-256 hashes without extensions +- **Performance**: Database queries are faster than filesystem stat() calls + +### URL and Extension Support + +ginxsom supports flexible URL patterns for maximum client compatibility: + +``` +# Both forms work identically: +GET /b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553 +GET /b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf + +# HEAD requests work with or without extensions: +HEAD /b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553 +HEAD /b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf +``` + +### nginx File Storage Strategy + +Files are stored on disk **with extensions** for nginx MIME type detection and optimal performance: + +```nginx +# Blossom-compliant nginx configuration +location ~ ^/([a-f0-9]{64}).*$ { + root /var/lib/ginxsom/blobs; + try_files /$1* =404; +} +``` + +**How it works:** + +1. **Hash-only lookup**: nginx extracts the 64-character SHA-256 hash from the URL, ignoring any extension +2. **Wildcard matching**: `try_files /$1*` finds any file starting with that hash +3. **Blossom compliance**: Serves correct file regardless of URL extension + +**Examples:** + +Client requests: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf` +- nginx extracts hash: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553` +- nginx looks for: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553*` +- nginx finds: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf` +- nginx serves the PDF with correct `Content-Type: application/pdf` + +Client requests: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.mp3` +- nginx extracts same hash: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553` +- nginx looks for: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553*` +- nginx finds: `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf` +- nginx serves the PDF (not 404) with correct `Content-Type: application/pdf` + +**Key Benefits:** + +- **Blossom Protocol Compliance**: Accepts any extension, returns correct MIME type +- **Performance**: nginx serves files directly without FastCGI involvement +- **Flexibility**: URLs work with correct extension, wrong extension, or no extension +- **MIME Detection**: nginx determines Content-Type from actual file extension on disk + +This approach ensures that files are always found by their SHA-256 hash regardless of what extension (if any) is used in the request URL, while maintaining nginx's excellent static file serving performance. + +### HEAD Request Handling + +HEAD requests are processed differently to ensure accuracy: + +1. **nginx receives HEAD request**: `/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf` +2. **nginx forwards to FastCGI**: All HEAD requests go to ginxsom for metadata +3. **ginxsom extracts clean hash**: Strips `.pdf` → `b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553` +4. **ginxsom queries database**: `SELECT size, type FROM blobs WHERE sha256 = ?` +5. **ginxsom returns headers**: Content-Length, Content-Type, etc. + +### Why This Approach? + +**Performance:** +- GET requests: nginx serves directly from disk (no database hit) +- HEAD requests: Single database query (no filesystem checking) +- Extension mismatches: Eliminated by database-driven approach + +**Reliability:** +- Database is authoritative source of blob existence +- No race conditions between filesystem and metadata +- Consistent behavior regardless of URL format + +**Flexibility:** +- Clients can use URLs with or without extensions +- Browser-friendly URLs with proper file extensions +- API-friendly clean hash URLs + +**Scalability:** +- nginx handles the heavy lifting (file serving) +- FastCGI only processes metadata operations +- Database queries scale better than filesystem operations + ## Development ### Project Structure diff --git a/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp b/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp new file mode 100644 index 0000000000000000000000000000000000000000..d3d14810d86effe69c1bff316d1031bb46efce3f GIT binary patch literal 203886 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�m6 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 Mp3i6oxJEbt00>`Ip8x;= literal 0 HcmV?d00001 diff --git a/blobs/f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.jpg b/blobs/f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f08dda369c89a02296274b969c543f928a0cedf5 GIT binary patch literal 30236 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 HgKGZ?7@X+6 literal 0 HcmV?d00001 diff --git a/build/main.o b/build/main.o new file mode 100644 index 0000000000000000000000000000000000000000..8b4d429a1554e38f11d0e1cea1b6d621a5dd6c71 GIT binary patch literal 13920 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 literal 0 HcmV?d00001 diff --git a/config/deploy.sh b/config/deploy.sh new file mode 100755 index 0000000..2eefb66 --- /dev/null +++ b/config/deploy.sh @@ -0,0 +1,233 @@ +#!/bin/bash +set -euo pipefail + +# Ginxsom Deployment Script +# This script sets up the ginxsom blossom server configuration + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +check_root() { + if [[ $EUID -eq 0 ]]; then + log_error "This script should not be run as root. Please run as a regular user with sudo access." + exit 1 + fi +} + +check_dependencies() { + log_info "Checking dependencies..." + + if ! command -v nginx &> /dev/null; then + log_error "nginx is not installed. Please install nginx first." + exit 1 + fi + + if ! command -v systemctl &> /dev/null; then + log_error "systemctl is not available. This script requires systemd." + exit 1 + fi + + log_info "Dependencies check passed." +} + +create_directories() { + log_info "Creating required directories..." + + # Create data directories + sudo mkdir -p /var/lib/ginxsom/files + sudo mkdir -p /var/lib/ginxsom/db + sudo mkdir -p /run/ginxsom + sudo mkdir -p /var/log/ginxsom + sudo mkdir -p /etc/ginxsom + + log_info "Directories created." +} + +create_user() { + log_info "Creating ginxsom user..." + + if ! id "ginxsom" &>/dev/null; then + sudo useradd --system --no-create-home --shell /bin/false ginxsom + log_info "User 'ginxsom' created." + else + log_info "User 'ginxsom' already exists." + fi +} + +set_permissions() { + log_info "Setting file permissions..." + + # Set ownership of data directories + sudo chown -R ginxsom:ginxsom /var/lib/ginxsom + sudo chown -R ginxsom:ginxsom /run/ginxsom + sudo chown -R ginxsom:ginxsom /var/log/ginxsom + sudo chown -R ginxsom:ginxsom /etc/ginxsom + + # Set proper permissions + sudo chmod 755 /var/lib/ginxsom + sudo chmod 755 /var/lib/ginxsom/files + sudo chmod 755 /var/lib/ginxsom/db + sudo chmod 755 /run/ginxsom + sudo chmod 755 /var/log/ginxsom + sudo chmod 755 /etc/ginxsom + + log_info "Permissions set." +} + +deploy_nginx_config() { + log_info "Deploying nginx configuration..." + + # Copy nginx configuration + sudo cp "$SCRIPT_DIR/nginx/ginxsom.conf" /etc/nginx/sites-available/ginxsom + + # Enable the site + if [[ ! -L /etc/nginx/sites-enabled/ginxsom ]]; then + sudo ln -sf /etc/nginx/sites-available/ginxsom /etc/nginx/sites-enabled/ginxsom + log_info "Nginx site enabled." + else + log_info "Nginx site already enabled." + fi + + # Test nginx configuration + if sudo nginx -t; then + log_info "Nginx configuration test passed." + else + log_error "Nginx configuration test failed. Please check the configuration." + exit 1 + fi +} + +deploy_systemd_service() { + log_info "Deploying systemd service..." + + # Copy systemd service file + sudo cp "$SCRIPT_DIR/systemd/ginxsom.service" /etc/systemd/system/ginxsom.service + + # Reload systemd + sudo systemctl daemon-reload + + log_info "Systemd service installed." +} + +create_sample_config() { + log_info "Creating sample configuration..." + + if [[ ! -f /etc/ginxsom/config.toml ]]; then + sudo tee /etc/ginxsom/config.toml > /dev/null << 'EOF' +# Ginxsom Blossom Server Configuration + +[server] +# FastCGI socket path +socket = "/run/ginxsom/ginxsom.sock" + +# Data directory for files +data_dir = "/var/lib/ginxsom" + +# Maximum file size in bytes (100MB) +max_file_size = 104857600 + +[logging] +level = "info" +file = "/var/log/ginxsom/ginxsom.log" + +[storage] +# File storage directory +files_dir = "/var/lib/ginxsom/files" + +# Database file for metadata +database = "/var/lib/ginxsom/db/ginxsom.db" + +[auth] +# Enable authentication for uploads +require_auth = true + +# Enable list endpoint +enable_list = false + +# Enable mirror endpoint +enable_mirror = false +EOF + sudo chown ginxsom:ginxsom /etc/ginxsom/config.toml + sudo chmod 640 /etc/ginxsom/config.toml + log_info "Sample configuration created at /etc/ginxsom/config.toml" + else + log_info "Configuration file already exists at /etc/ginxsom/config.toml" + fi +} + +show_status() { + log_info "Deployment complete! Next steps:" + echo "" + echo "1. Build and install the ginxsom binary:" + echo " cd $PROJECT_ROOT" + echo " make build" + echo " sudo make install" + echo "" + echo "2. Start the services:" + echo " sudo systemctl enable ginxsom" + echo " sudo systemctl start ginxsom" + echo " sudo systemctl reload nginx" + echo "" + echo "3. Check status:" + echo " sudo systemctl status ginxsom" + echo " sudo systemctl status nginx" + echo "" + echo "4. Test the server:" + echo " curl http://localhost/health" + echo "" + echo "Configuration files:" + echo " - Nginx: /etc/nginx/sites-available/ginxsom" + echo " - SystemD: /etc/systemd/system/ginxsom.service" + echo " - Config: /etc/ginxsom/config.toml" + echo "" +} + +main() { + log_info "Starting ginxsom deployment..." + + check_root + check_dependencies + create_user + create_directories + set_permissions + deploy_nginx_config + deploy_systemd_service + create_sample_config + show_status + + log_info "Deployment script completed successfully!" +} + +# Parse command line arguments +case "${1:-}" in + --help|-h) + echo "Usage: $0 [options]" + echo "" + echo "Options:" + echo " --help, -h Show this help message" + echo "" + echo "This script deploys the ginxsom blossom server configuration." + exit 0 + ;; + *) + main "$@" + ;; +esac diff --git a/config/local-nginx.conf b/config/local-nginx.conf new file mode 100644 index 0000000..145e48e --- /dev/null +++ b/config/local-nginx.conf @@ -0,0 +1,109 @@ +# Local Ginxsom Development Server Configuration +# This configuration serves files directly from the local repo directory + +# Main context - specify error log here to override system default +error_log logs/error.log; +pid logs/nginx.pid; + +events { + worker_connections 1024; +} + +# HTTP context +http { + # Basic settings + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + + # MIME types + include /etc/nginx/mime.types; + default_type application/octet-stream; + + # Logging (relative to prefix directory) + access_log logs/access.log; + + # FastCGI upstream configuration + upstream fastcgi_backend { + server unix:/tmp/ginxsom-fcgi.sock; + } + + # Local development server + server { + listen 9001; + server_name localhost; + + # Root directory for blossom files (local blobs directory) + root blobs; + + # Maximum upload size (adjust as needed) + client_max_body_size 100M; + + # Security headers + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options DENY; + add_header X-XSS-Protection "1; mode=block"; + + # Handle GET and HEAD requests for blob files - Blossom compliant + location ~ "^/([a-f0-9]{64}).*$" { + limit_except HEAD GET { + deny all; + } + + # Route HEAD requests to FastCGI via rewrite + if ($request_method = HEAD) { + rewrite ^/(.*)$ /fcgi-head/$1 last; + } + + # GET requests served directly with hash-only lookup + try_files /$1* =404; + + # Set appropriate headers for blobs + add_header Cache-Control "public, max-age=31536000, immutable"; + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options DENY; + add_header X-XSS-Protection "1; mode=block"; + } + + # FastCGI handler for HEAD requests + location ~ "^/fcgi-head/([a-f0-9]{64}).*$" { + internal; + fastcgi_pass fastcgi_backend; + fastcgi_param REQUEST_METHOD HEAD; + fastcgi_param REQUEST_URI /$1; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param QUERY_STRING $query_string; + fastcgi_param CONTENT_TYPE $content_type; + fastcgi_param CONTENT_LENGTH $content_length; + fastcgi_param SERVER_PROTOCOL $server_protocol; + fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + fastcgi_param REMOTE_ADDR $remote_addr; + fastcgi_param REMOTE_PORT $remote_port; + fastcgi_param SERVER_ADDR $server_addr; + fastcgi_param SERVER_PORT $server_port; + fastcgi_param SERVER_NAME $server_name; + } + + + # Health check endpoint + location /health { + access_log off; + return 200 "OK\n"; + add_header Content-Type text/plain; + } + + # List files endpoint for debugging + location /debug/list { + autoindex on; + autoindex_format json; + } + + # Root redirect + location = / { + return 200 "Ginxsom Local Development Server\nTry: GET /\nHealth: GET /health\n"; + add_header Content-Type text/plain; + } + } +} diff --git a/config/nginx/ginxsom.conf b/config/nginx/ginxsom.conf new file mode 100644 index 0000000..437b898 --- /dev/null +++ b/config/nginx/ginxsom.conf @@ -0,0 +1,131 @@ +# Ginxsom Blossom Server Configuration +# This configuration serves files directly via nginx for maximum performance +# while handling authenticated operations through FastCGI + +server { + listen 80; + server_name localhost; # Change this to your domain + + # Root directory for blossom files (organized by SHA-256 hash) + root /var/lib/ginxsom/files; + + # Maximum upload size (adjust as needed) + client_max_body_size 100M; + + # Security headers + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options DENY; + add_header X-XSS-Protection "1; mode=block"; + + # Logging + access_log /var/log/nginx/ginxsom_access.log; + error_log /var/log/nginx/ginxsom_error.log; + + # Static file serving - nginx handles this directly for maximum performance + # Files are stored as: /var/lib/ginxsom/files/{first2chars}/{remaining_hash} + location ~ ^/([a-f0-9]{64})$ { + set $hash $1; + set $prefix $1; # First 2 characters + set $suffix $1; # Remaining characters + + # Extract first 2 chars and remaining + if ($hash ~ ^([a-f0-9]{2})([a-f0-9]{62})$) { + set $prefix $1; + set $suffix $2; + } + + try_files /$prefix/$suffix =404; + + # Set proper content type based on file extension in metadata + # This will be enhanced when we add metadata lookup + add_header Content-Type application/octet-stream; + add_header Cache-Control "public, max-age=31536000, immutable"; + } + + # HEAD requests for file existence checking + # This endpoint checks if a file exists and returns metadata + location ~ ^/head/([a-f0-9]{64})$ { + # Pass to FastCGI application for metadata lookup + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/ginxsom.fcgi; + fastcgi_param REQUEST_METHOD HEAD; + fastcgi_param BLOSSOM_HASH $1; + fastcgi_pass unix:/run/ginxsom/ginxsom.sock; + } + + # Upload endpoint - requires authentication + location /upload { + # Pass to FastCGI application for processing + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/ginxsom.fcgi; + fastcgi_pass unix:/run/ginxsom/ginxsom.sock; + + # Only allow PUT method for uploads + if ($request_method !~ ^(PUT)$ ) { + return 405; + } + } + + # List endpoint - returns list of files (if enabled) + location /list { + # Pass to FastCGI application + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/ginxsom.fcgi; + fastcgi_pass unix:/run/ginxsom/ginxsom.sock; + + # Only allow GET method + if ($request_method !~ ^(GET)$ ) { + return 405; + } + } + + # Mirror endpoint - for mirroring files from other servers + location /mirror { + # Pass to FastCGI application + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/ginxsom.fcgi; + fastcgi_pass unix:/run/ginxsom/ginxsom.sock; + + # Only allow PUT method + if ($request_method !~ ^(PUT)$ ) { + return 405; + } + } + + # Delete endpoint - requires authentication + location ~ ^/([a-f0-9]{64})$ { + # Handle DELETE requests through FastCGI + if ($request_method = DELETE) { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/ginxsom.fcgi; + fastcgi_param BLOSSOM_HASH $1; + fastcgi_pass unix:/run/ginxsom/ginxsom.sock; + } + + # For GET/HEAD, fall through to static file serving above + } + + # Health check endpoint + location /health { + # Pass to FastCGI application + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/ginxsom.fcgi; + fastcgi_pass unix:/run/ginxsom/ginxsom.sock; + + access_log off; + } + + # Deny access to hidden files and directories + location ~ /\. { + deny all; + access_log off; + log_not_found off; + } + + # Deny access to backup and temporary files + location ~ ~$ { + deny all; + access_log off; + log_not_found off; + } +} diff --git a/config/systemd/ginxsom.service b/config/systemd/ginxsom.service new file mode 100644 index 0000000..8b5b991 --- /dev/null +++ b/config/systemd/ginxsom.service @@ -0,0 +1,47 @@ +[Unit] +Description=Ginxsom Blossom Server FastCGI Application +After=network.target +Wants=network-online.target +After=network-online.target + +[Service] +Type=notify +User=ginxsom +Group=ginxsom +WorkingDirectory=/var/lib/ginxsom +ExecStart=/usr/local/bin/ginxsom --fastcgi --socket /run/ginxsom/ginxsom.sock +ExecReload=/bin/kill -HUP $MAINPID +KillMode=process +Restart=on-failure +RestartSec=5s + +# Security settings +NoNewPrivileges=true +ProtectSystem=strict +ProtectHome=true +ReadWritePaths=/var/lib/ginxsom /run/ginxsom /var/log/ginxsom +PrivateTmp=true +PrivateDevices=true +ProtectHostname=true +ProtectClock=true +ProtectKernelTunables=true +ProtectKernelModules=true +ProtectKernelLogs=true +ProtectControlGroups=true +RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 +RestrictRealtime=true +RestrictSUIDSGID=true +LockPersonality=true +MemoryDenyWriteExecute=true + +# Resource limits +LimitNOFILE=65536 +LimitNPROC=4096 + +# Environment +Environment=GINXSOM_CONFIG=/etc/ginxsom/config.toml +Environment=GINXSOM_DATA_DIR=/var/lib/ginxsom +Environment=GINXSOM_LOG_LEVEL=info + +[Install] +WantedBy=multi-user.target diff --git a/db/ginxsom.db b/db/ginxsom.db new file mode 100644 index 0000000000000000000000000000000000000000..401db6eeeee2ff9834e5b3ce39c0cc7e6dd7673e GIT binary patch literal 36864 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 dfB+Bx0zd!=0D+f6AR)!XH?GFwQY= 0), -- Ensure non-negative size + CHECK (uploaded_at > 0) -- Ensure valid timestamp +); + +-- Server configuration table for key-value settings +CREATE TABLE IF NOT EXISTS server_config ( + key TEXT PRIMARY KEY NOT NULL, -- Configuration key + value TEXT NOT NULL, -- Configuration value + description TEXT, -- Human-readable description + updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')) -- Last update timestamp +); + +-- Indexes for performance optimization +CREATE INDEX IF NOT EXISTS idx_blobs_uploaded_at ON blobs(uploaded_at); +CREATE INDEX IF NOT EXISTS idx_blobs_uploader_pubkey ON blobs(uploader_pubkey); +CREATE INDEX IF NOT EXISTS idx_blobs_type ON blobs(type); +CREATE INDEX IF NOT EXISTS idx_blobs_size ON blobs(size); + +-- Insert default server configuration +INSERT OR IGNORE INTO server_config (key, value, description) VALUES + ('max_file_size', '104857600', 'Maximum file size in bytes (100MB)'), + ('require_auth', 'false', 'Whether authentication is required for uploads'), + ('allowed_types', '*', 'Allowed MIME types (* for all)'), + ('server_name', 'ginxsom', 'Server name for responses'), + ('storage_quota', '10737418240', 'Total storage quota in bytes (10GB)'), + ('cleanup_interval', '86400', 'Cleanup interval in seconds (daily)'), + ('max_upload_rate', '1048576', 'Max upload rate per client in bytes/sec (1MB/s)'); + +-- View for storage statistics +CREATE VIEW IF NOT EXISTS storage_stats AS +SELECT + COUNT(*) as total_blobs, + SUM(size) as total_bytes, + AVG(size) as avg_blob_size, + MIN(uploaded_at) as first_upload, + MAX(uploaded_at) as last_upload, + COUNT(DISTINCT uploader_pubkey) as unique_uploaders +FROM blobs; + +-- View for recent uploads (last 24 hours) +CREATE VIEW IF NOT EXISTS recent_uploads AS +SELECT + sha256, + size, + type, + uploaded_at, + uploader_pubkey, + filename, + datetime(uploaded_at, 'unixepoch') as uploaded_datetime +FROM blobs +WHERE uploaded_at > (strftime('%s', 'now') - 86400) +ORDER BY uploaded_at DESC; diff --git a/logs/access.log b/logs/access.log new file mode 100644 index 0000000..6f2ed10 --- /dev/null +++ b/logs/access.log @@ -0,0 +1,64 @@ +127.0.0.1 - - [18/Aug/2025:19:08:28 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:10:04 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:10:15 -0400] "GET / HTTP/1.1" 200 72 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:10:39 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:11:05 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:11:11 -0400] "HEAD /70/8d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:11:37 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:11:44 -0400] "HEAD /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:11:59 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 203886 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:11:59 -0400] "GET /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e HTTP/1.1" 200 30236 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:12:11 -0400] "GET /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e HTTP/1.1" 200 30236 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:19:12:44 -0400] "GET /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.webp HTTP/1.1" 404 564 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:19:12:44 -0400] "GET /favicon.ico HTTP/1.1" 404 564 "http://localhost:9001/f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.webp" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:19:17:05 -0400] "GET /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.jpg HTTP/1.1" 200 30236 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:19:17:06 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:17:13 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:17:38 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:17:45 -0400] "HEAD /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:17:50 -0400] "HEAD /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.jpg HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:18:20 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:20:27 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:19:23:40 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 200 203886 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:15:17 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:16:34 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:16:50 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:17:01 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 400 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:18:01 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:18:06 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 400 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:18:26 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 564 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:29:58 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 564 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:31:09 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:31:41 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 564 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:31:42 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 564 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:31:49 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 162 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:32:15 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 200 203886 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:32:41 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:33:48 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:34:15 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 400 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:34:20 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:34:22 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 200 203886 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:34:25 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 200 203886 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:34:25 -0400] "GET /favicon.ico HTTP/1.1" 404 564 "http://localhost:9001/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:34:53 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 400 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:36:59 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:37:06 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:37:32 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:40:39 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:41:52 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:42:04 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:42:51 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:42:56 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:42:59 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 200 203886 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:43:08 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:48:43 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:20:52:51 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:53:44 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:20:54:04 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:21:10:59 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:21:11:07 -0400] "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:21:11:13 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" +127.0.0.1 - - [18/Aug/2025:21:11:13 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1" 200 203886 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:21:11:21 -0400] "HEAD /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e HTTP/1.1" 200 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:21:11:28 -0400] "HEAD /0000000000000000000000000000000000000000000000000000000000000000 HTTP/1.1" 404 0 "-" "curl/8.15.0" +127.0.0.1 - - [18/Aug/2025:21:49:44 -0400] "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" diff --git a/logs/error.log b/logs/error.log new file mode 100644 index 0000000..14e0681 --- /dev/null +++ b/logs/error.log @@ -0,0 +1,92 @@ +2025/08/18 19:05:40 [emerg] 212857#212857: bind() to 0.0.0.0:8080 failed (98: Unknown error) +2025/08/18 19:05:40 [emerg] 212857#212857: bind() to 0.0.0.0:8080 failed (98: Unknown error) +2025/08/18 19:05:40 [emerg] 212857#212857: bind() to 0.0.0.0:8080 failed (98: Unknown error) +2025/08/18 19:05:40 [emerg] 212857#212857: bind() to 0.0.0.0:8080 failed (98: Unknown error) +2025/08/18 19:05:40 [emerg] 212857#212857: bind() to 0.0.0.0:8080 failed (98: Unknown error) +2025/08/18 19:05:40 [emerg] 212857#212857: still could not bind() +2025/08/18 19:08:10 [emerg] 213180#213180: bind() to 0.0.0.0:9000 failed (98: Unknown error) +2025/08/18 19:08:10 [emerg] 213180#213180: bind() to 0.0.0.0:9000 failed (98: Unknown error) +2025/08/18 19:08:10 [emerg] 213180#213180: bind() to 0.0.0.0:9000 failed (98: Unknown error) +2025/08/18 19:08:10 [emerg] 213180#213180: bind() to 0.0.0.0:9000 failed (98: Unknown error) +2025/08/18 19:08:10 [emerg] 213180#213180: bind() to 0.0.0.0:9000 failed (98: Unknown error) +2025/08/18 19:08:10 [emerg] 213180#213180: still could not bind() +2025/08/18 19:08:28 [error] 213123#213123: *1 open() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1", host: "localhost:9000" +2025/08/18 19:08:33 [alert] 212996#212996: unlink() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/logs/nginx.pid" failed (2: No such file or directory) +2025/08/18 19:10:04 [error] 213452#213452: *1 open() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1", host: "localhost:9001" +2025/08/18 19:10:39 [error] 213452#213452: *4 open() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1", host: "localhost:9001" +2025/08/18 19:11:05 [error] 215075#215075: *5 open() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "HEAD /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe HTTP/1.1", host: "localhost:9001" +2025/08/18 19:12:44 [error] 215220#215220: *11 open() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.webp" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 19:12:44 [error] 215220#215220: *11 open() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:9001", referrer: "http://localhost:9001/f8b5b4904c79bb53b2b417bc9c939268ac2871f194e95523b7b66113862da15e.webp" +2025/08/18 20:12:11 [emerg] 244527#244527: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 20:12:11 [emerg] 244527#244527: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 20:12:11 [emerg] 244527#244527: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 20:12:11 [emerg] 244527#244527: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 20:12:11 [emerg] 244527#244527: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 20:12:11 [emerg] 244527#244527: still could not bind() +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpeg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.png" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.gif" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.pdf" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.txt" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp4" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:18:26 [crit] 246736#246736: *11 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp3" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpeg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.png" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.gif" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.pdf" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.txt" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp4" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:29:58 [crit] 246736#246736: *12 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp3" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpeg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.png" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.gif" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.pdf" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.txt" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp4" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:09 [crit] 246736#246736: *13 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp3" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpeg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.png" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.gif" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.pdf" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.txt" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp4" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:41 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp3" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpeg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.png" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.gif" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.pdf" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.txt" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp4" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:42 [crit] 246736#246736: *14 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp3" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.jpeg" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.png" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.gif" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.pdf" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.txt" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp4" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:31:49 [crit] 246736#246736: *15 stat() "/home/teknari/Sync/Programming/VibeCoding/ginxsom/blobs/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.mp3" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET /708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp HTTP/1.1", host: "localhost:9001" +2025/08/18 20:34:25 [error] 252785#252785: *6 open() "./blobs/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:9001", referrer: "http://localhost:9001/708d0e8226ec17b0585417c0ec9352ce5f52c3820c904b7066fe20b00f2d9cfe.webp" +2025/08/18 21:07:53 [emerg] 265258#265258: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 21:07:53 [emerg] 265258#265258: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 21:07:53 [emerg] 265258#265258: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 21:07:53 [emerg] 265258#265258: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 21:07:53 [emerg] 265258#265258: bind() to 0.0.0.0:9001 failed (98: Unknown error) +2025/08/18 21:07:53 [emerg] 265258#265258: still could not bind() diff --git a/logs/nginx.pid b/logs/nginx.pid new file mode 100644 index 0000000..8666562 --- /dev/null +++ b/logs/nginx.pid @@ -0,0 +1 @@ +265507 diff --git a/scripts/start-fcgi.sh b/scripts/start-fcgi.sh new file mode 100755 index 0000000..4376a5d --- /dev/null +++ b/scripts/start-fcgi.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# Start Ginxsom FastCGI Application + +# Configuration +FCGI_BINARY="./build/ginxsom-fcgi" +SOCKET_PATH="/tmp/ginxsom-fcgi.sock" +PID_FILE="/tmp/ginxsom-fcgi.pid" + +# Function to cleanup on exit +cleanup() { + echo "Cleaning up..." + if [ -f "$PID_FILE" ]; then + PID=$(cat "$PID_FILE") + if kill -0 "$PID" 2>/dev/null; then + echo "Stopping FastCGI process $PID" + kill "$PID" + sleep 1 + # Force kill if still running + if kill -0 "$PID" 2>/dev/null; then + kill -9 "$PID" + fi + fi + rm -f "$PID_FILE" + fi + rm -f "$SOCKET_PATH" + exit 0 +} + +# Setup signal handlers +trap cleanup SIGINT SIGTERM + +# Check if binary exists +if [ ! -f "$FCGI_BINARY" ]; then + echo "Error: FastCGI binary not found at $FCGI_BINARY" + echo "Please run 'make' to build the application first" + exit 1 +fi + +# Clean up old socket and pid file +rm -f "$SOCKET_PATH" "$PID_FILE" + +# Start the FastCGI application +echo "Starting Ginxsom FastCGI application..." +echo "Socket: $SOCKET_PATH" +echo "Binary: $FCGI_BINARY" + +# Use spawn-fcgi to start the application +spawn-fcgi -s "$SOCKET_PATH" -M 666 -u "$USER" -g "$USER" -f "$FCGI_BINARY" -P "$PID_FILE" + +if [ $? -eq 0 ]; then + echo "FastCGI application started successfully" + echo "PID: $(cat $PID_FILE 2>/dev/null || echo 'unknown')" + + # Wait for the process to exit or be killed + if [ -f "$PID_FILE" ]; then + PID=$(cat "$PID_FILE") + echo "Monitoring process $PID (Press Ctrl+C to stop)" + while kill -0 "$PID" 2>/dev/null; do + sleep 1 + done + echo "FastCGI process exited" + fi +else + echo "Failed to start FastCGI application" + exit 1 +fi + +cleanup diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..676e422 --- /dev/null +++ b/src/main.c @@ -0,0 +1,261 @@ +/* + * Ginxsom Blossom Server - FastCGI Application + * Handles HEAD requests and other dynamic operations + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_SHA256_LEN 65 +#define MAX_PATH_LEN 512 +#define MAX_MIME_LEN 128 + +// Database path +#define DB_PATH "db/ginxsom.db" + +// Blob metadata structure +typedef struct { + char sha256[MAX_SHA256_LEN]; + long size; + char type[MAX_MIME_LEN]; + long uploaded_at; + char filename[256]; + int found; +} blob_metadata_t; + +// Get blob metadata from database +int get_blob_metadata(const char* sha256, blob_metadata_t* metadata) { + sqlite3* db; + sqlite3_stmt* stmt; + int rc; + + printf("DEBUG: get_blob_metadata() called with sha256='%s'\r\n", sha256); + printf("DEBUG: Opening database at path: %s\r\n", DB_PATH); + + rc = sqlite3_open_v2(DB_PATH, &db, SQLITE_OPEN_READONLY, NULL); + if (rc) { + printf("DEBUG: Database open FAILED: %s\r\n", sqlite3_errmsg(db)); + fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); + return 0; + } + + printf("DEBUG: Database opened successfully\r\n"); + + const char* sql = "SELECT sha256, size, type, uploaded_at, filename FROM blobs WHERE sha256 = ?"; + printf("DEBUG: Preparing SQL: %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)); + fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return 0; + } + + printf("DEBUG: SQL prepared successfully\r\n"); + printf("DEBUG: Binding parameter sha256='%s'\r\n", sha256); + + sqlite3_bind_text(stmt, 1, sha256, -1, SQLITE_STATIC); + + printf("DEBUG: Executing SQL query...\r\n"); + rc = sqlite3_step(stmt); + printf("DEBUG: sqlite3_step() returned: %d (SQLITE_ROW=%d, SQLITE_DONE=%d)\r\n", + rc, SQLITE_ROW, SQLITE_DONE); + + if (rc == SQLITE_ROW) { + printf("DEBUG: Row found! Extracting metadata...\r\n"); + strncpy(metadata->sha256, (char*)sqlite3_column_text(stmt, 0), MAX_SHA256_LEN-1); + metadata->size = sqlite3_column_int64(stmt, 1); + strncpy(metadata->type, (char*)sqlite3_column_text(stmt, 2), MAX_MIME_LEN-1); + metadata->uploaded_at = sqlite3_column_int64(stmt, 3); + const char* filename = (char*)sqlite3_column_text(stmt, 4); + if (filename) { + strncpy(metadata->filename, filename, 255); + } else { + metadata->filename[0] = '\0'; + } + metadata->found = 1; + printf("DEBUG: Metadata extracted - size=%ld, type='%s'\r\n", + metadata->size, metadata->type); + } else { + printf("DEBUG: No row found for sha256='%s'\r\n", sha256); + metadata->found = 0; + } + + sqlite3_finalize(stmt); + sqlite3_close(db); + printf("DEBUG: Database closed, returning %d\r\n", metadata->found); + return metadata->found; +} + +// Check if physical file exists (with extension based on MIME type) +int file_exists_with_type(const char* sha256, const char* mime_type) { + char filepath[MAX_PATH_LEN]; + const char* extension = ""; + + // Determine file extension based on MIME type + if (strstr(mime_type, "image/jpeg")) { + extension = ".jpg"; + } else if (strstr(mime_type, "image/webp")) { + extension = ".webp"; + } else if (strstr(mime_type, "image/png")) { + extension = ".png"; + } else if (strstr(mime_type, "image/gif")) { + extension = ".gif"; + } else if (strstr(mime_type, "video/mp4")) { + extension = ".mp4"; + } else if (strstr(mime_type, "video/webm")) { + extension = ".webm"; + } else if (strstr(mime_type, "audio/mpeg")) { + extension = ".mp3"; + } else if (strstr(mime_type, "audio/ogg")) { + extension = ".ogg"; + } else if (strstr(mime_type, "text/plain")) { + extension = ".txt"; + } + + snprintf(filepath, sizeof(filepath), "blobs/%s%s", sha256, extension); + + printf("DEBUG: file_exists_with_type() checking path: '%s' (MIME: %s)\r\n", filepath, mime_type); + + struct stat st; + int result = stat(filepath, &st); + printf("DEBUG: stat() returned: %d (0=success, -1=fail)\r\n", result); + + if (result == 0) { + printf("DEBUG: File exists! Size: %ld bytes\r\n", st.st_size); + return 1; + } else { + printf("DEBUG: File does not exist or stat failed\r\n"); + return 0; + } +} + +// Handle HEAD request for blob +void handle_head_request(const char* sha256) { + blob_metadata_t metadata = {0}; + + printf("DEBUG: handle_head_request called with sha256=%s\r\n", sha256); + + // Validate SHA-256 format (64 hex characters) + if (strlen(sha256) != 64) { + printf("DEBUG: SHA-256 length validation failed: %zu\r\n", strlen(sha256)); + printf("Status: 400 Bad Request\r\n"); + printf("Content-Type: text/plain\r\n\r\n"); + printf("Invalid SHA-256 hash format\n"); + return; + } + + printf("DEBUG: SHA-256 length validation passed\r\n"); + + // Check if blob exists in database - this is the single source of truth + if (!get_blob_metadata(sha256, &metadata)) { + printf("DEBUG: Database lookup failed for sha256=%s\r\n", sha256); + printf("Status: 404 Not Found\r\n"); + printf("Content-Type: text/plain\r\n\r\n"); + printf("Blob not found\n"); + return; + } + + printf("DEBUG: Database lookup succeeded - blob exists\r\n"); + + // Return successful HEAD response with metadata from database + printf("Status: 200 OK\r\n"); + printf("Content-Type: %s\r\n", metadata.type); + printf("Content-Length: %ld\r\n", metadata.size); + printf("Cache-Control: public, max-age=31536000, immutable\r\n"); + printf("ETag: \"%s\"\r\n", metadata.sha256); + + // Add timing header for debugging + printf("X-Ginxsom-Server: FastCGI\r\n"); + printf("X-Ginxsom-Timestamp: %ld\r\n", time(NULL)); + + if (strlen(metadata.filename) > 0) { + printf("X-Original-Filename: %s\r\n", metadata.filename); + } + + printf("\r\n"); + // HEAD request - no body content +} + +// Extract SHA-256 from request URI (Blossom compliant - ignores any extension) +const char* extract_sha256_from_uri(const char* uri) { + static char sha256_buffer[MAX_SHA256_LEN]; + + if (!uri || uri[0] != '/') { + return NULL; + } + + const char* start = uri + 1; // Skip leading '/' + + // Extract exactly 64 hex characters, ignoring anything after (extensions, etc.) + int len = 0; + for (int i = 0; i < 64 && start[i] != '\0'; i++) { + char c = start[i]; + if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) { + // If we hit a non-hex character before 64 chars, it's invalid + if (len < 64) { + return NULL; + } + break; + } + sha256_buffer[i] = c; + len = i + 1; + } + + // Must be exactly 64 hex characters + if (len != 64) { + return NULL; + } + + sha256_buffer[64] = '\0'; + return sha256_buffer; +} + +int main(void) { + while (FCGI_Accept() >= 0) { + // DEBUG: Log every request received + printf("DEBUG: FastCGI received request\r\n"); + + const char* request_method = getenv("REQUEST_METHOD"); + const char* request_uri = getenv("REQUEST_URI"); + + // DEBUG: Log request details + printf("DEBUG: METHOD=%s, URI=%s\r\n", + request_method ? request_method : "NULL", + request_uri ? request_uri : "NULL"); + + if (!request_method || !request_uri) { + printf("Status: 400 Bad Request\r\n"); + printf("Content-Type: text/plain\r\n\r\n"); + printf("Invalid request\n"); + continue; + } + + // Handle HEAD requests for blob metadata + if (strcmp(request_method, "HEAD") == 0) { + const char* sha256 = extract_sha256_from_uri(request_uri); + printf("DEBUG: Extracted SHA256=%s\r\n", sha256 ? sha256 : "NULL"); + if (sha256) { + handle_head_request(sha256); + } 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"); + } + } 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); + } + } + + return 0; +}