簡體   English   中英

如何授予對 Heroku Procfile 的 root 訪問權限?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM