使用 HTTPS 在家庭网络上运行服务器

使用 HTTPS 在家庭网络上运行服务器

正如标题所示,我正在尝试配置我的服务器以使用 HTTPS 提供流量。我已经能够公开服务器并从中接收信息,只是没有 HTTPS。

我会讲到一些有趣的细节,但这是主要目标。

  1. 我的家庭网络上的 Raspberry Pi 上运行着一个 Go 服务器,我将其用作个人 API。
  2. 我将家庭网络的 80 和 443 端口进行了端口转发,并将其指向我的 Raspberry Pi 的静态 IP 地址
  3. 我拥有一个域名,将其指向我的家庭网络 IP。
  4. 我的 go 服务器在端口 8088 上运行,所以我使用 Nginx 将来自基准 IP 的请求转发到我的服务器的端口。

到目前为止一切都运行正常,只是我想允许我的服务器使用 HTTPS。

我的问题是,在这个设置中有很多活动部件,那么什么负责确保 HTTPS:

  • 域名?
  • 我的 Nginx 配置?
  • 服务器本身?
  • 以上所有情况的组合。

我不确定。

只是想寻求一些为该服务器启用 HTTPS 的方向,谢谢!

答案1

您的 Nginx 可以处理 http 和 https 请求。

  1. 设置你的 nginx 监听端口 80,并将 80 请求重定向到 443。

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name example.com www.example.com;
        return 301 https://$server_name$request_uri;
    }
    
  2. 在您的 nginx 中添加您的证书并将来自 443 的请求代理到 GO 服务器。

    server {
       listen 443;
       ssl on;
       ssl_certificate /etc/ssl/ssl-bundle.crt;
       ssl_certificate_key /etc/ssl/ssl-tutorials.key;
       server_name ssl-tutorials.com;
       access_log /var/log/nginx/nginx.vhost.access.log;
       error_log /var/log/nginx/nginx.vhost.error.log;
    
       location / {
           proxy_redirect          off;
           proxy_set_header        Host            $host;
           proxy_set_header        X-Real-IP       $remote_addr;
           proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
           client_body_buffer_size 512k;
           proxy_connect_timeout   180;
           proxy_send_timeout      180;
           proxy_read_timeout      360;
           proxy_buffering         off
    
           #Proxy request to your GO app
           proxy_pass http://<ip_server>:<port>;
        }
     }
    

答案2

HTTPS 应由 nginx 服务器处理,该服务器应监听端口 443。它也可以监听端口 80,但最好提供 HTTP 或重定向到 HTTPS(端口 443),因为这是正常行为。您不需要任何 DNS 配置。应用程序通常会将默认端口 80 识别为 HTTP,将 443 识别为 HTTPS。

最好让 nginx 这样的应用程序处理好高性能 HTTP 和 HTTPS 的难题,这样您就无需为您的 Web 应用程序(即您的 Go API)考虑这些事情。请注意,您的 Nginx 和 Go 应用程序之间的连接不需要是 HTTPS,因为它们都在示例机器上。

看看这个Linode 指南为 Web 应用程序设置 HTTPS 和反向代理的 Nginx 配置。

此外,使用 HTTPS,您需要拥有由适当机构签名的密钥对(即证书链)。由于这只是您自己使用的东西,因此您可以成为适当的机构并生成自己的自签名证书。但最简单的方法也可能是使用让我们加密,它将利用您拥有域名的事实并向您颁发可用于您网站的有效证书(Linode 指南中也有解释)。

相关内容