/post/:encryptedId?hoge=1111 -> /posts/:encryptedId?hoge=1111

location ~ ^/post/(?<encryptedId>[a-z1-9]+)/?$ {
  proxy_pass http://localhost:3000/posts/$encryptedId$is_args$args;
}

tips

match対象を命名したい

(?<encryptedId>[a-z1-9]+) のように宣言し、 $encryptedId の変数で値を使用できる。

e.g.

/post/a1b2c3 の場合、

$encryptedId => a1b2c3

nginx location ~ 正規表現でマッチした部分文字列を回収して使う方法 - Qiita

queryパラメーターの変数

$is_args$args を使用する。

e.g.

~?hoge=1111 の場合、

  • $is_args => ?
  • $args => hoge=1111

How can query string parameters be forwarded through a proxy_pass with nginx? - Stack Overflow

URLも書き換えたい

location ~ ^/post/(?<encryptedId>[a-z1-9]+)/?$ {
  return 301 https://$host/posts$is_args$args;
}