【问题标题】:How do I configure an ssl certificate with Nginx on Ubuntu 18.04?如何在 Ubuntu 18.04 上使用 Nginx 配置 ssl 证书?
【发布时间】:2022-01-18 15:57:25
【问题描述】:

我正在尝试使用 Nginx 在 Ubuntu 服务器上安装 SSL 证书(我的项目在 Flask 服务器上)。当我尝试使用当前配置访问我的域时,无法访问该站点并出现 ERR_CONNECTION_TIMED_OUT。我也在尝试将所有 http 请求重定向到 https。这是我当前的 .conf 文件:


server {

    server_name backlogtracker.live www.backlogtracker.live;
    location / { 
        proxy_pass http://127.0.0.1:5000; 
        proxy_set_header Host $host;
    }

    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate /etc/letsencrypt/live/backlogtracker.live/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/backlogtracker.live/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 = www.backlogtracker.live) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = backlogtracker.live) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;
    listen [::]:80 default_server;
    server_name backlogtracker.live www.backlogtracker.live;
    return 301 https://$server_name$request_uri;
}

即使使用 https,我也无法访问该域。有什么我遗漏的吗?

【问题讨论】:

    标签: nginx ssl-certificate config ubuntu-18.04 nginx-reverse-proxy


    【解决方案1】:

    重定向http->https

    这是将所有内容重定向到 https 的简单模式:

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
    }
    

    它并不适合所有用例,但对于大多数情况来说,它是最简单的方法,没有奇怪的指令。

    订单

    在某些情况下,订单确实会对配置文件产生影响。 Nginx 是自上而下工作的,所以为了防止奇怪的行为,我建议总是把你的配置写成一个故事。例如。 return 立即停止执行,因此后面的内容不会被处理。我会建议顺序:

    1. 连接设置(listen,server_name)
    2. 常规配置(ssl、标头、日志等)
    3. 逻辑(如果,地图,..)
    4. 位置

    反向代理的标头

    我建议始终添加标头(可以放在服务器块中以适用于所有位置):

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Referer $http_referer;
    proxy_set_header X-Forwarded-Proto $scheme;
    

    SSL 协议

    禁用旧的 TLS 协议

    ssl_protocols       TLSv1.2 TLSv1.3;
    

    进一步检查

    如果不工作则:

    • /etc/letsencrypt/options-ssl-nginx.conf 中包含的内容
    • Flask 和 Nginx 的日志是什么?
    • 都在主机上运行(无容器)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多