gpt4 book ai didi

ubuntu - 已安装 SSL 证书但 HTTPS 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:56 26 4
gpt4 key购买 nike

查了很多博客,都没有办法解决。请帮忙

问题:我有一台 ec2 机器和我的子域 subdomain.website.com 的 A 记录。我的代码在 ec2 机器上的端口 5000 上运行。

我已经完成了创建我的子域 https 的所有步骤:


sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

sudo certbot --nginx -d sudomain.website.com
#Some QnA

#Finally received msg
Congratulations! You have successfully enabled https://sudomain.website.com
.... /etc/letsencrypt/live/sudomain.website.com/fullchain.pem
.... /etc/letsencrypt/live/sudomain.website.com/privkey.pem


然后我改变了我的nginx conf我在 /etc/nginx/sites-available/webhook.conf

中有一个 conf 文件

我将文件更新为

server {
if ($host = sudomain.website.com) {
return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
listen [::]:80;
server_name sudomain.website.com;

ssl_certificate /etc/letsencrypt/live/sudomain.website.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sudomain.website.com/privkey.pem;

location / {
proxy_pass http://localhost:5000;
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 {
listen 443 ssl;
server_name sudomain.website.com;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/sudomain.website.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/sudomain.website.com/privkey.pem; # managed by Certbot
}

然后我重启了nginx

sudo nginx -t
sudo service nginx restart

静止https://sudomain.website.com不工作,

如果我评论返回 301 行,http://sudomain.website.com工作正常

如果我遗漏了什么,你能告诉我吗?

注:以sudomain.website.com为例

最佳答案

这里有几个错误的配置。

  • 主要问题是您在 HTTP 服务器中拥有后端(端口 5000)的代理,而不是在 HTTPS 服务器上。您正在将 HTTP 流量重定向到 HTTPS(使用 return 301 https://$host$request_uri;),但您的 HTTPS 配置为空。

  • 记得在 sites-enabled 中创建指向 sites-available 的符号链接(symbolic link)。

  • 不包括 certbot 配置(仅包括证书),因此如果您使用 HTTP 验证,您可能会遇到翻新问题。

  • 为了更好地处理不同服务器的不同服务器名称,所以可以删除if ($host ...)

  • 无需将 SSL 证书放在非 HTTPS 服务器上。

配置应该是这样的:

server {
listen 80;
listen [::]:80;
server_name sudomain.website.com;

# Redirect all http traffic to https
return 301 https://$host$request_uri;

}

server {
listen 443 ssl;
server_name sudomain.website.com;
listen [::]:443 ssl;

ssl_certificate /etc/letsencrypt/live/sudomain.website.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/sudomain.website.com/privkey.pem; # managed by Certbot

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

}

我不确定你是否真的需要那些 proxy_set_headers

假定 Cerbot 验证不使用 HTTP(使用 DNS 或其他)进行协议(protocol)升级和代理到后端的一种常见且简单的方法是:

  • 使用上述内容在 /etc/nginx/sites-available 中创建一个名为 sudomain.website.com.conf 的文件。
  • 创建一个从 /etc/nginx/sites-available/sudomain.website.com.conf/etc/nginx/sites-available/sudomain.website.com.conf 的符号链接(symbolic link) 启用网站。

会是这样的:

server {
listen 80;
server_name sudomain.website.com;

# Redirect all http traffic to https
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name sudomain.website.com;

# Managed by Certbot
ssl_certificate /etc/letsencrypt/live/sudomain.website.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sudomain.website.com/privkey.pem;

location / {
include proxy_params;
proxy_pass http://localhost:5000;
}
}

关于ubuntu - 已安装 SSL 证书但 HTTPS 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com