server { if ($host = arrr3.qortal.link) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name arrr3.qortal.link; location ^~ /.well-known/acme-challenge/ { root /var/www/certbot; default_type "text/plain"; try_files $uri =404; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name arrr3.qortal.link; ssl_certificate /etc/letsencrypt/live/arrr3.qortal.link/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/arrr3.qortal.link/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; grpc_connect_timeout 10s; grpc_read_timeout 600s; grpc_send_timeout 600s; # --- Compatibility shim: old client -> new server # Rewrite ONLY the gRPC :path (URI), leaving method name intact. # OLD clients (cash.*) -> NEW server (pirate.*) location ~ ^/cash\.z\.wallet\.sdk\.rpc\.CompactTxStreamer/(.*)$ { rewrite ^/cash\.z\.wallet\.sdk\.rpc\.CompactTxStreamer/(.*)$ /pirate.wallet.sdk.rpc.CompactTxStreamer/$1 break; grpc_pass grpc://127.0.0.1:9067; grpc_set_header TE trailers; grpc_set_header X-Real-IP $remote_addr; grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for; grpc_set_header X-Forwarded-Proto $scheme; } # Native pirate namespace location ^~ /pirate.wallet.sdk.rpc.CompactTxStreamer/ { grpc_pass grpc://127.0.0.1:9067; grpc_set_header TE trailers; grpc_set_header X-Real-IP $remote_addr; grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for; grpc_set_header X-Forwarded-Proto $scheme; } # Catch-all: anything else passes through unchanged (reflection, health, etc.) location / { grpc_pass grpc://127.0.0.1:9067; grpc_set_header X-Real-IP $remote_addr; grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for; grpc_set_header X-Forwarded-Proto $scheme; grpc_set_header TE trailers; } location ^~ /.well-known/acme-challenge/ { root /var/www/certbot; default_type "text/plain"; try_files $uri =404; } }