簡體   English   中英

在 Nginx 中使用代理傳遞時在 Express 上“無法獲取”

[英]'Cannot GET' on Express when using proxy pass in Nginx

我在 DigitalOcean Droplet 上運行了兩個網站,現在我已經將它們都升級到了 https。 在其中一個站點上,我正在向正在運行的節點服務器發出請求以發送電子郵件,但是由於我啟用了 https,它會阻止此請求,因為它不是 https(邏輯上)。 因此,我嘗試使用節點郵件服務器作為啟用 https 的站點之一的代理傳遞。

為了測試,我要代理傳遞的節點服務器如下所示:

exports.start = () => {
    app.use(bodyParser.json());
    app.use(cors());
    app.get('/', (req, res) => res.send('Hello World!'));
    app.listen(4004, () => console.log('Server listening on port 4004'));
};

this.start();

我的 Nginx sites-enabled/default如下所示:

server {

server_name mywebsite.nl www.website.nl;

location / {
    proxy_pass http://<PIVATE IP>:4000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /ws {
    proxy_pass http://<PIVATE IP>:4002;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
}


location /mailmeister {
            proxy_pass http://<PIVATE IP>:4004;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
}


listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mywebsite.nl/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mywebsite.nl/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

所以/mailmeister是我想將所有請求重定向到節點服務器的地方。 當我運行curl localhost:4004curl PRIVATE IP:4004我得到了預期的Hello World! 回復。 但是當我運行curl https://mywebsite.nl/mailmeister它返回一個網頁,上面寫着

Cannot GET /mailmeister

有人知道怎么修這個東西嗎?

簡而言之,因為你有:

location /mailmeister {
            proxy_pass http://<PIVATE IP>:4004;
}

應該這樣處理:

app.get('/mailmeister ', (req, res) => res.send('Hallo World!'));

未測試此特定設置。 有一個相關的答案,進一步解釋了這一點。 一旦你得到它, 文檔就更有意義了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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