諸事情により、単一オリジンでgrpcとhttpsのサーバを運用が必要なことがわかった。 grpcのパスはルートでないと動作しなかったので、httpsサーバのパスを/app/にして妥協した。 またnginxのconfを晒す。
ちなみに、nginxからgrpcサーバ(localhost:9090)への通信はhttpにしている。
server { listen 443 ssl http2; server_name xxx.net; location / { if ($request_method = 'GET') { return 301 https://$host/app/; } grpc_set_header Content-Type application/grpc; grpc_pass localhost:9090; } location /app/ { root /usr/share/nginx/html; index index.html index.htm; } ssl_certificate /etc/letsencrypt/live/xxx.net/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/xxx.net/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
grpcは基本POSTなので、GETは/app/にリダイレクトしている。