[英]How to give root access to Heroku Procfile?
我正在使用 NodeJS 創建一個網站,我正在努力為其添加 HTTPS 支持。但是,當我將其發布到 Heroku 時,我收到錯誤“錯誤:偵聽 EACCES:權限被拒絕 0.0.0.0:443”。 我看到這是因為它需要 root 訪問權限才能運行 HTTP 服務器。 有沒有辦法給 Procfile 進程授予 root 權限? 這是我的服務器代碼:
import https from "https";
import http from "http";
import node_static from "node-static"
import { headers } from './util/helpers.mjs'
import home from './pages/home.mjs'
import e404 from "./pages/404.mjs";
import * as fs from 'fs';
const PORT = "8000";
let fileServ = new node_static.Server('./public');
let publicd;
fs.readdir("./public", (err,files)=>{
if (err){
console.error(err);
} else {
publicd=files;
};
});
const options={
key: fs.readFileSync('./cert/CA/192.168.0.22/192.168.0.22.decrypted.key'),
cert: fs.readFileSync('./cert/CA/192.168.0.22/192.168.0.22.crt')
};
(async () => {
let httpsServer=https.createServer(options, async (req, res) => {
try{
fileServ.serve(req, res);
if (publicd.find(item =>{
if (item===req.url.split('/')[1]){
return true;
}else{
return false;
}
})){}else{
switch (req.url) {
case '/':
headers(home, res);
break;
default:
res.writeHead(404, 'NOT FOUND',{
'Content-Type': 'text/html',
'Content-Length': e404.length,
'Expires': new Date().toUTCString()
});
res.end(e404)
}
}
}catch(err){
res.writeHead(500,'ERROR');
res.end('Error 500');
console.error(err);
};
let today = new Date();
let statusMessage;
if (res.statusMessage){
statusMessage=res.statusMessage;
} else {
statusMessage="FILE" //File server gives no status message.
};
let date = `${today.getFullYear()}-${(today.getMonth()+1)}-\
${today.getDate()} ${today.getHours()}:${today.getMinutes()}`
console.log(`HTTPS: ${date} ${statusMessage} ${req.url} ${res.statusCode}`);
});
let httpServer=http.createServer(async (req, res) => {
try{
fileServ.serve(req, res);
if (publicd.find(item =>{
if (item===req.url.split('/')[1]){
return true;
}else{
return false;
}
})){}else{
switch (req.url) {
case '/':
headers(home, res);
break;
default:
res.writeHead(404, 'NOT FOUND',{
'Content-Type': 'text/html',
'Content-Length': e404.length,
'Expires': new Date().toUTCString()
});
res.end(e404)
}
}
}catch(err){
res.writeHead(500,'ERROR');
res.end('Error 500');
console.error(err);
};
let today = new Date();
let statusMessage;
if (res.statusMessage){
statusMessage=res.statusMessage;
} else {
statusMessage="FILE" //File server gives no status message.
};
let date = `${today.getFullYear()}-${(today.getMonth()+1)}-\
${today.getDate()} ${today.getHours()}:${today.getMinutes()}`
console.log(`HTTP: ${date} ${statusMessage} ${req.url} ${res.statusCode}`);
});
httpsServer.listen(443);
httpServer.listen(80)
})()
有沒有辦法做到這一點,還是我必須只為我的網站使用 HTTP? 無論如何,我必須在本地計算機上以 root 身份運行它。
如何授予對 Heroku Procfile 的 root 訪問權限?
你沒有。
你的應用程序不應該知道任何關於 HTTPS、證書文件等的信息。讓 Heroku 來處理。 只需在它通過PORT
環境變量提供給您的端口上偵聽 HTTP(不是 HTTPS)連接。
Heroku 在默認的yourapp.herokuapp.com
域上自動運行 HTTPS。 如果您想在自定義域上使用 HTTPS,請不要嘗試自己處理加密連接。 要么使用ACM (最簡單,但需要付費的測功機),要么使用Heroku SSL自帶證書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.