正如标题所示,我正在尝试配置我的服务器以使用 HTTPS 提供流量。我已经能够公开服务器并从中接收信息,只是没有 HTTPS。
我会讲到一些有趣的细节,但这是主要目标。
- 我的家庭网络上的 Raspberry Pi 上运行着一个 Go 服务器,我将其用作个人 API。
- 我将家庭网络的 80 和 443 端口进行了端口转发,并将其指向我的 Raspberry Pi 的静态 IP 地址
- 我拥有一个域名,将其指向我的家庭网络 IP。
- 我的 go 服务器在端口 8088 上运行,所以我使用 Nginx 将来自基准 IP 的请求转发到我的服务器的端口。
到目前为止一切都运行正常,只是我想允许我的服务器使用 HTTPS。
我的问题是,在这个设置中有很多活动部件,那么什么负责确保 HTTPS:
- 域名?
- 我的 Nginx 配置?
- 服务器本身?
- 以上所有情况的组合。
我不确定。
只是想寻求一些为该服务器启用 HTTPS 的方向,谢谢!
答案1
您的 Nginx 可以处理 http 和 https 请求。
设置你的 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; }
在您的 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 指南中也有解释)。