質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

解決済

1回答

479閲覧

/user/:123をnginxでアクセス可能にするには?

kazuyu

総合スコア18

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

0クリップ

投稿2017/10/23 06:37

編集2017/10/23 06:40

nginxで/user/123のようなリクエストIDでのアクセスを許可したいのですが、
404が返ってきてしまいnginxでの設定がうまくいきません。
/userでのアクセスは可能な状態ですが、/user/100や
/user/50、/user/123とすると、
nginxだと404となってしまいます。

ネットで調べたところ、$request_idを使えばよいという記事をみたので
location /user/$request_idや、location /user/:id等で
試しましたが、駄目でした。
今は、無理やり、以下のような設定をして、/user/1と、/user/2、/user/3ならば
アクセス可能ですが、これではスケールできずに困ってしまっている状態です。
上手い書き方ご存じの方いらっしゃいましたらご助言をお願いします。

location /user { alias /・・・; index main.html main.htm; try_files $uri $uri.html $uri.htm $uri.jsx $uri.js $uri/ break; } location /user/1 { alias /・・・; index main.html main.htm; try_files $uri $uri.html $uri.htm $uri.jsx $uri.js $uri/ break; } location /user/2 { alias /・・・; index main.html main.htm; try_files $uri $uri.html $uri.htm $uri.jsx $uri.js $uri/ break; } location /user/3 { alias /・・・; index main.html main.htm; try_files $uri $uri.html $uri.htm $uri.jsx $uri.js $uri/ break; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/10/23 07:04

「PHPなどサーバサイドスクリプトは使わずに、nginxだけでなんとかしたい」ということでしょうか。
kazuyu

2017/10/23 07:39 編集

js側(React-Router)で、<Route path = '/user/:id'・・・と定義してそこをクリックすると、 URLが、/user/2とかに変わります。これはnginxを返さないSPAなので成功しています。 が、/user/2でリロードすると404エラーになってしまいます。(/userでのリロードならば成功します) nginx側で、/user/:idのような設定をプラグラム側でした場合に(php, ruby, python, js限らず)リロードして/user/1, /user/1000,, /user/5等、ユーザid又はDBの返り値に従った/user/:idでも表示できるようにしたいのです。 >「PHPなどサーバサイドスクリプトは使わずに、nginxだけでなんとかしたい」ということでしょうか。 はい、クライアントサイドレンダリングで表示しますのでnginxだけで表示できるようにしたいのです。 jsからサーバサイドAPIにアクセスして返ってきた結果(/user/:idのidに入れる数値)をそのまま表示させたいのです。サーバAPIに問題はなく、純粋にnginx側でlocation /userしか設定していないので弾かれて404エラーになってしまっていますのでここの部分の設定を、location /user/:idのようにしたいのです。
kazuyu

2017/10/23 09:09 編集

以下事項が確認できましたので、共有します。 nginx側で、`location /user`と設定すれば/userには当然アクセスできますが、 `/user?id=123`でもアクセスできることがわかりました。 これはつまり、APIサーバーではなくnginx側から直接サイト表示してくれるということです。 一方、`location /user`の設定で、`/user:id`に相当する`/user/123`では404となり、 アクセスできません。 私は、ただ単にnginxのrequest_idの設定が出来ていないからだと考えていたのですが、 `/user:id`でのアクセスに対しては、nginx側からはサイト表示は出来ないということ でしょうか? `/user/id=123`ではnginx側で、/userに相当するhtmlを返してくれていたので、`/user:id`でも nginxは/userに相当するhtmlを返してくれるものだと思っていたのですが…
guest

回答1

0

ベストアンサー

SPAのバックエンドで、「URLにかかわらず同じレスポンスでいい」というのであれば、try_files $url index.htmのようにまとめて造り付けてしまうのが手っ取り早いです(参考)。

投稿2017/10/23 09:04

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyu

2017/10/23 09:29

素晴らしいご助言ありがとうございます。 問題解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問