[解決済み】node.js/expressでHTTPSの自動接続/リダイレクトを行う。
質問
私が取り組んでいるnode.jsのプロジェクトでHTTPSをセットアップしようとしています。 私は基本的に node.jsのドキュメント この例では
// curl -k https://localhost:8000/
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
今、私が
curl -k https://localhost:8000/
私は
hello world
は予想通りです。 しかし、もし私が
curl -k http://localhost:8000/
私は
curl: (52) Empty reply from server
振り返ってみると、このように動作するのは当然のことのように思えますが、同時に、最終的に私のプロジェクトに訪れる人は https ://yadayada, そして私は、サイトにアクセスした瞬間からすべてのトラフィックをhttpsにしたいのです。
どうすれば、node(および使用しているフレームワークである Express)は、指定されているかどうかにかかわらず、すべての受信トラフィックを https に渡すようになりますか? この問題に対処したドキュメントを見つけることができません。 それとも、本番環境では、node の前にこの種のリダイレクトを処理する何か(例えば nginx)があると想定しているのでしょうか?
これは私のWeb開発への最初の進出なので、これが明白な何かであれば、私の無知を許してください。
どのように解決するのですか?
Ryan、正しい方向性を示してくれてありがとう。 あなたの答え(2番目の段落)をいくつかのコードで少し肉付けして、それが動作するようにしました。 このシナリオでは、これらのコードスニペットは、私のexpressアプリに配置されています。
// set up plain http server
var http = express();
// set up a route to redirect http to https
http.get('*', function(req, res) {
res.redirect('https://' + req.headers.host + req.url);
// Or, if you don't want to automatically detect the domain name from the request header, you can hard code it:
// res.redirect('https://example.com' + req.url);
})
// have it listen on 8080
http.listen(8080);
https expressサーバはATMを3000でリッスンしています。 この iptables ルールは、ノードが root 権限で実行される必要がないように設定されています。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3000
これで、思い通りに動作するようになりました。
HTTP経由のCookieの盗難を防ぐには この回答 (コメントより)またはこのコードを使用してください。
const session = require('cookie-session');
app.use(
session({
secret: "some secret",
httpOnly: true, // Don't let browser javascript access cookies.
secure: true, // Only use cookies over https.
})
);
関連
-
[解決済み】AWS Lambdaでnodejsの「ref」モジュールを使用すると「invalid ELF header」と表示される件
-
[解決済み] TypeError: コールバックはnodejsの関数ではありません。
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] バルク更新を行う。
-
[解決済み] エラーです。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりません。
-
[解決済み] Node.jsで現在のスクリプトのパスを取得するにはどうしたらいいですか?
-
[解決済み] Node.jsのConnect、Express、「ミドルウェア」って何?
-
[解決済み] Node.jsでHTTPSサーバーを作成する方法とは?
-
[解決済み] node.jsのhttps.requestで無効な自己署名入りssl証明書を無視する?
-
[解決済み】htaccess で https://www にリダイレクトされる。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み] 再インストールを繰り返しても、npm run でモジュール 'sass' が見つからない。
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み】MongooseでEnumを作成し使用する方法
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
[解決済み] bodyParser は非推奨です express 4
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] エラー: ノード出力を "|head" にパイプするときに EPIPE を書き込む。