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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

nginx

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

Q&A

1回答

2110閲覧

一つのドメインでwordpressとnode.jsの両立

TakuroMiyasato

総合スコア8

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

nginx

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

0グッド

0クリップ

投稿2016/09/18 05:34

編集2016/09/18 07:07

###前提・実現したいこと
azureにVM1とVM2を立てています。
VM2ティザーサイト(wordpress)にhttps://example.com
VM1にあるアプリケーションサイト(node.js)にhttps://exmaple.com/app/*
といったことをしたいです。
VM1にパブリックIPがあり、nginxにhttps://example.comドメインが割り当ててある。
VM1とVM2はローカルネットで繋がっている。

https://example.com → 10.0.0.4
https://example.com/app → public IP :8080 (http用ポート)

###発生している問題・エラーメッセージ
nginxを使って、振り分けたい
そのために下記2点の方法を考えているがやり方が見つからない。
①node.jsのapp分の階層は入れて開発してこなかったため、なるべくコードの各箇所を修正せずにhttps://exmaple.com/app/*で接続できるようにしたいが、app分の階層を入れる方法がわからない。(node.jsはExpress,socket.io,ejsなどを使っている)
②etc/nginx.confをいじるものの、入り口だけWordPress側とnode.jsアプリに振り分けられるが、そこから奥になると、node.jsの/app/部分がないURLになってしまうため、ページエラーになってしまう。

エラーメッセージ
②ででてくるエラーは(ログインボタンを押すと)
The requested URL /login/ was not found on this server.

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
簡単に言うと下記URLのようなことをWordpressとnodejsでやりたくて、
/の方はいいが、/appの方うまくいかないです。入り口のみでその先が続かない。
http://d.hatena.ne.jp/sasaplus1/20130207/1360246070

とても困っています。なんでもいいのでヒントをください。

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

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

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

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

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

kei344

2016/09/18 05:57

例示用ドメインはご自身で所有されていない限りexample.comを利用してください。
guest

回答1

0

入り口が表示されているということは、 proxy_pass はうまくいってると思われます。ただし、 node.js が生成する HTML で自サーバ内のコンテンツを絶対パスで参照している部分があると、うまく動きません。/login/ はページの中に絶対パスで書かれているではないでしょうか。<a href="/login/"> などと書かれていると not found になってしまいます。 css や js の参照も全て同様です。

絶対パスの参照があるものが洗い出せれば、 HTML 内の文字列を正規表現マッチングして書き換えることで対応できそうです。ググってみると、以下の2つの方法が見つかりました。

参考1:nginx_luaでhtmlを書き換えたい!のまき
参考2:nginxでhtmlの中身書き換えるプロキシサーバー立てる(OSXの上に)

この方法のいずれかで /login/ を ./login/ とかに書き換えます。書き換えなければ行けないパスの洗い出しと意図しない書き換えをしてしまわないかのチェックが大変だと思います。単純に /login/ とかでマッチすると、動的コンテンツ内に /login/ があると書き換わってしまいます。

node.js の修正ができるなら、 node.js 側を相対パスで参照するように修正するほうが早いと思います。

投稿2016/09/18 07:21

mit0223

総合スコア3401

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問