🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Node.js

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

Q&A

1回答

1474閲覧

Node.jsで httpで入ってきたらhttpsに強制変換したい

mote

総合スコア128

Node.js

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

0グッド

1クリップ

投稿2019/09/30 07:56

編集2019/10/01 14:17

私はherokuでSSLを導入して,
httpsでシステムが動くことを確認しました.

しかし,httpでもサイトに訪れることが出来てしまいます.
これは,node.jsで立ち上げているサーバーでhttpをhttpsに強制変換するのか?
と思い調べましたが,どうもexpressでのやり方しか書いてありません...

私はexpressを使用していないのですが,

1.まず,httpをhttpsに変換するのはherokuではなくNode.jsで行うのか
2.変更するにはどうすればいいのか

を教えていただきたいです.

私のコードは

js

1let http = require("https"); 2let app = require("http").createServer(handler); 3app.listen(process.env.PORT || 3000); 4 5function handler(req, res) { 6ここにpost,get処理 7}

となっています.
よろしくお願いします.

変更した点

js

1let app = require("http").createServer(handler); 2 3'use strict'; <- 解答通りにいれてみました 4app.listen(process.env.PORT || 3000); 5 6function handler(req, res) { 7 res.writeHead(302, { 8 'Location': 'https://www.myapp.com/' <-リダイレクト処理 9 }); 10 11-------------------------ここから下は関係ないです------------------------------------------ 12 13 let q = url.parse(req.url, true); 14 if(req.method == "POST"){ 15 let data = ''; 16 req.on('data', function(chunk) { 17 data += chunk 18 }); 19 req.on('end', function() { 20 let p = /[=_]/ ; 21 let result = data.split(p); 22 let result1 = result[0] ; 23 let result2 = result[1] ; 24 let item = decodeURI(result2); 25 console.log(item) 26 27 if(result1 == "thema"){ 28 console.log("post通信でもらったitemは"+item) ; 29 let board_page = ejs.render(board, { 30 thema:item, 31 }); 32 res.end(board_page); 33 34 }else{ 35 console.log("post通信でもらったitemは"+item) ; 36 let other_page = ejs.render(other, { 37 username:item, 38 }); 39 res.end(other_page); 40 } 41 }); 42 } 43 switch (q.pathname) { 44 case "/": 45 fs.readFile("./view/index.html", "UTF-8", function(err, data) { 46 res.writeHead(200, { "Content-Type": "text/html" }); 47 res.end(data); 48 }); 49 break; 50 51 case "/login": 52 fs.readFile("./view/login.html", "UTF-8", function(err, data) { 53 res.writeHead(200, { "Content-Type": "text/html" }); 54 res.end(data); 55 }); 56 break; 57 58 case "/regist": 59 fs.readFile("./view/regist.html", "UTF-8", function(err, data) { 60 res.writeHead(200, { "Content-Type": "text/html" }); 61 res.end(data); 62 }); 63 break; 64続く... 65})

のように変更しましたが,リダイレクトは行われていませんでした

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

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

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

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

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

guest

回答1

0

herokuにはルータ機能がないので、アプリケーションレベルでリダイレクトしないといけないっぽいですね。
express(node.js)以外にも公式にサンプルがあります。

https://help.heroku.com/J2R1S4T8/can-heroku-force-an-application-to-use-ssl-tls

追記

expressを使用したくない場合のサンプルがありました。確認は行ってないので参考までに

https://codeday.me/jp/qa/20181214/48640.html

js

1app.get('*',function(req,res,next){ 2 if(req.headers['x-forwarded-proto']!='https') 3 res.redirect('https://mypreferreddomain.com'+req.url) 4 else 5 next() /* Continue to other routes if we're not redirecting */ 6})

追記2

こちらが、expressを使用してないコードです。

https://qiita.com/watsuyo_2/items/1c99b59f93ea1ee77f14

js

1'use strict'; 2const http = require('http'); 3const server = http.createServer((req, res) => { 4 res.writeHead(302, { 5 'Location': 'https://www.google.co.jp/' 6 }); 7 res.end(); 8}); 9const port = 8000; 10server.listen(port, () => { 11 console.info('Listening on ' + port); 12});

投稿2019/09/30 10:29

編集2019/09/30 14:49
kurore

総合スコア38

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

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

mote

2019/09/30 14:19

解答ありがとうございます. なるほどです. 以前ロリポップやお名前,comを使った時は,そちらからリダイレクト出来たのですが, やはり,Herokuだと出来ないんですね.
kurore

2019/09/30 14:27

長いので回答に追記しました。
mote

2019/09/30 14:35

app.get()ってexpressじゃないんですか?
kurore

2019/09/30 14:49

expressですね。。。 追記2しました
mote

2019/10/01 14:10

このページは動作していません www.group-discussion.net でリダイレクトが繰り返し行われました。 というエラーが出てしまいます...
mote

2019/10/01 14:17

エラーは解決しましたが,リダイレクトは行われていない模様です...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問