同一服务器上的 HTTPS Web 服务和后端服务

同一服务器上的 HTTPS Web 服务和后端服务

有没有办法设置后端服务来监听已经在 HTTPS 上服务的现有 Web 服务的 HTTPS?

我最初使用 HTTP 为两者提供服务,但最近为 Web 服务添加了 CA。两者在 HTTP 上运行良好,但尝试从 HTTPS 访问后端(从端口 5000)时,我没有得到任何响应(我最初使用 PM2 为后端提供服务)。我需要更新前端的 ajax 调用以通过 HTTPS 而不是 HTTP 调用后端。

我研究过将 NGINX 应用于后端,但找不到适合我的具体情况的资源,而且我不知道如何配置 NGINX 来监听端口 5000 上的 HTTPS(这对我来说没有意义,因为 HTTPS 是端口 443)。

答案1

这是一个基本请求,我将以一般方式回答,因为用户没有提供足够的信息来更精确。提醒:因此,这将以一般方式回答。

预先信息

用户告诉他他想要监听或访问 https 的端口 5000

标准 http 到 https 重定向

server {
        server_name *.domain.tld domain.tld;
        #listen for Port 80
        listen 80;
        #redirect to https
        return 301 https://$host$request_uri; 
}

在端口 5000 上监听 NGINX

server {
        server_name *.domain.tld domain.tld;
        #listen for Port 5000, http
        listen 5000;
        #add stuff here
}

标准 https 服务器指令,使用 Certbot 生成证书

server {
        #listen on 443 for SSL (https) with http 1.0/1.1
        #listen 443 ssl;
        
        #Listen on 44 for SSL (https) with http 2
        listen 443 ssl http2;
        
        #What we listen for domain      
        server_name *.domain.tld domain.tld;
                location / {
                root /var/www/vhosts/domain.tld;
}
    ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; # managed by Certbot
}

基本反向代理侦听端口 80 http 和端口 443 SSL

server {
        #listen on 80 for https with http 1.0/1.1
        listen 80;
        
        #listen on 80 for https with http 2 (disabled, certbot does not understand it on port 80)
        #listen 80 http2;

        #listen on 443 for SSL (https) with http 1.0/1.1
        #listen 443 ssl;
        
        #Listen on 44 for SSL (https) with http 2
        listen 443 ssl http2;
        
        #What we listen for domain      
        server_name *.domain.tld domain.tld;
                location / {
                        proxy_pass              http://127.0.0.1:5000;

                        #https even works
                        #proxy_pass             https://127.0.0.1:5000;                            
                        proxy_set_header        Host $http_host;
}
    ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; # managed by 
    Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; # managed by 
    Certbot
}

结论

如果你想通过端口 5000 访问后端,你必须使用proxy_pass,如果你想让 NGINX 监听端口 5000,以防它未被使用,则监听listen 5000 ssl;

而且,正如其他人所说,SSL 是一种协议,并不绑定到特定端口,它通常使用 443,但它不能监听它,我也可以使用 61337。

如果原帖作者要更新问题,我会更新答案

相关内容