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

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

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

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

nginx

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

858閲覧

Nginxでupstreamでバックエンドに渡すときのパスについて

EzrealTrueshot

総合スコア388

Node.js

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

nginx

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2018/07/17 06:04

nodejs(express)で xxx.xxx.xxx.xxx:3000 にてwebサーバーを立ち上げています。

全面にnginxを置きたいのですが、パスの関係上うまく動いてくれません。
パスを調整することが可能ならばその方法がしりたいです。

  • ファイル構成

/root/public/css/style.css
/root/public/js/javascript.js
/root/views/index.ejs
/root/app.js

nodejs express側 3000番ポートで起動

app.js

nodejs

1 2var express = require('express'); 3var app = express(); 4var ejs = require('ejs'); 5 6app.use('ejs',ejs.renderFile) 7app.use(express.static('public')); 8 9app.get('/bbb', function (req, res) { 10 res.render('index.ejs',{hoge: 'fuga'}); 11}); 12 13app.listen(3000, function () { 14 console.log('Example app listening on port 3000!'); 15});

publicフォルダの中身はcssフォルダやjsフォルダが作られており、その中に各cssやjsが入れてあります。

nginx側

nginx

1 upstream aaa { 2 server xxx.xxx.xxx.xxx:3000; 3 } 4 5 server { 6 listen 443; 7 server_name hoge-fuga; 8 9 ssl on; 10 ssl_certificate /etc/letsencrypt/live/hoge-fuga/fullchain.pem; 11 ssl_certificate_key /etc/letsencrypt/live/hoge-fuga/privkey.pem; 12 13 location /bbb { 14 proxy_pass http://aaa; 15 } 16 }

https://hoge-fuga/bbbにアクセスするとcssやjavascriptが無効になった状態のindex.ejsが表示されてしまいます。

うまくいく例

app.js

nodejs

1 2var express = require('express'); 3var app = express(); 4var ejs = require('ejs'); 5 6app.use('ejs',ejs.renderFile) 7app.use(express.static('public')); 8 9app.get('/', function (req, res) { 10 res.render('index.ejs',{hoge: 'fuga'}); 11}); 12 13app.listen(3000, function () { 14 console.log('Example app listening on port 3000!'); 15});
nginx側

nginx

1 upstream aaa { 2 server xxx.xxx.xxx.xxx:3000; 3 } 4 5 server { 6 listen 443; 7 server_name hoge-fuga; 8 9 ssl on; 10 ssl_certificate /etc/letsencrypt/live/hoge-fuga/fullchain.pem; 11 ssl_certificate_key /etc/letsencrypt/live/hoge-fuga/privkey.pem; 12 13 location / { 14 proxy_pass http://aaa; 15 } 16 }

nodejs側、nginx側、両方ともパス /bbb をやめて、 / にすると、きちんとうまく表示されます。


ルートパス以外でもうまく連携させる方法をご存知のかたいらっしゃいましたらご教示いただけませんでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。

nginx

1rewrite ^/ch/?(.*) /$1 break;

これを追加しました。
nodejs側一切いじっていません。

index.ejs側で パスを 変更しました。(nginxのロケーションのパスを追加)

src="css/style.css" ↓ src="bbb/css/style.css"

投稿2018/07/17 08:49

EzrealTrueshot

総合スコア388

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問