server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name nezha.hoshino.app nezha-agent.hoshino.app; ssl_certificate /etc/letsencrypt/live/hoshino.app/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hoshino.app/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; underscores_in_headers on; # Nezha Agent gRPC location ^~ /proto.NezhaService/ { grpc_set_header Host $host; grpc_set_header nz-realip $remote_addr; grpc_read_timeout 600s; grpc_send_timeout 600s; grpc_socket_keepalive on; client_max_body_size 10m; grpc_buffer_size 4m; grpc_pass grpc://127.0.0.1:8008; } # Nezha WebSocket location ~* ^/api/v1/ws/(server|terminal|file)(.*)$ { proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header nz-realip $remote_addr; proxy_set_header Origin https://$host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_pass http://127.0.0.1:8008; } # Web Dashboard location / { proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header nz-realip $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 0; proxy_pass http://127.0.0.1:8008; } } server { if ($host = nezha.hoshino.app) { return 301 https://$host$request_uri; } listen 80; listen [::]:80; server_name nezha.hoshino.app; return 404; }