【问题标题】:Adding an SSL (PORT 443) to an Nginx Reverse Proxy Server (PORT 80) - Nginx Config File将 SSL (PORT 443) 添加到 Nginx 反向代理服务器 (PORT 80) - Nginx 配置文件
【发布时间】:2018-11-15 23:37:28
【问题描述】:

使用 Ubuntu,我使用 Certbot 生成了 SSL。这已经自动更新了我的 Nginx 配置文件并添加了一个额外的监听端口。我担心我是否只需要监听一个端口(80 或 443)而不是两者,但我无法找到有关是否需要删除对端口 80 的监听的相关信息。请参阅下面的配置文件:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    server_name _;

    location / {
        proxy_pass http://localhost:3001;
        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;
    }
}

server {
    root /var/www/html;

    location / {
        try_files $uri $uri/ =404;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/my.domain.co.uk/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/my.domain.co.uk/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

}

server {
    if ($host = my.domain.co.uk) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 ;
    listen [::]:80 ;
    server_name my.domain.co.uk;
    return 404; # managed by Certbot
}

既然 Certbot 已将代码添加到单独的服务器块,我是否需要删除我的初始服务器块在端口 80 上侦听的位置?我遇到了一个问题,旧服务器在使用时会在一夜之间崩溃,我觉得这与 Nginx 配置文件有关,类似于此。

很抱歉,如果这个问题很愚蠢,我对此不是很有经验,并且发现它非常困难,不幸的是。感谢您提供任何见解。

【问题讨论】:

    标签: node.js ssl nginx reverse-proxy certbot


    【解决方案1】:

    您没有准确包含您想要的内容(例如,哪个应用程序应该在哪些端口上处理请求以及应该对 HTTP 请求执行什么操作),但我会假设

    1. 所有端口 80 请求都是 HTTP,所有 443 请求都是 HTTPS。
    2. 您希望将所有 HTTP 请求重定向到 HTTPS
    3. 应将所有 HTTPS 请求传递给节点

    如果是这样,这可能就是你真正想要的:

    server {
        root /var/www/html;
        server_name my.domain.co.uk;
    
        location / {
            proxy_pass http://localhost:3001;
            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;
        }
    
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/my.domain.co.uk/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/my.domain.co.uk/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
    
    }
    
    server {
        if ($host = my.domain.co.uk) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
        listen 80 ;
        listen [::]:80 ;
        server_name my.domain.co.uk;
        return 404; # managed by Certbot
    }
    

    第一个服务器块仅处理 HTTPS 请求并将所有请求传递给节点。第二个服务器块只处理 HTTP 请求并将它们重定向到 HTTPS。

    【讨论】:

    • 非常感谢。我想这就是我想要的,恐怕我对此很陌生。过去,第二个服务器块中的 443 是否会导致服务器崩溃问题?我想知道我是否设置了太多重定向。这是错误 - 2018/11/14 08:46:19 [error] 32527#32527: *852 connect() failed (111: Connection refused) while connecting to upstream, client: client_ip, server: , request: "GET / HTTP/1.1", upstream: "http://server_ip:3001/", host: "server_ip:443"
    • 我不是 100% 确定,但我认为 HTTPS 请求首先被传递到第二个块,然后它试图获取“/”但无法获取。所以它再次尝试了,但是在 HTTP 中,它进入了传递给 Node 应用程序的第一个块。我不确定为什么它被拒绝后(但可能是因为节点设置,例如不听 http)抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2020-09-29
    • 2019-07-15
    相关资源
    最近更新 更多