在 nginx 中为自定义端口设置 SSL - letsencrypt

在 nginx 中为自定义端口设置 SSL - letsencrypt

我正在尝试在自定义端口上启用 SSL(不是 443),运行网页。经过一番搜索,我找不到太多有用的信息。

服务器有不可更改的端口,外部:26143,内部:80。

要进入服务器(不使用 SSL),您可以输入 example.com:26143,系统会将其视为与端口 80 的连接。

我该如何设置证书(让其加密)来在此端口上启用 SSL?


从测试来看,似乎无论我做什么,它都只能访问端口 80 上的服务器,即使我将其设置为 26143

以下是 nginx 站点启用配置:

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

    root /root/html;

    index index.php;
    server_name _;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
    
        # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known {
        root /var/www/ssl/example.com/;
    }
}

我尝试过的命令是:

certbot --nginx -d example.com:26143
certbot certonly --standalone --preferred-challanges http -d example.com:26143
certbot certonly --standalone --preferred-challenges http -d example.com
certbot certonly --standalone --preferred-challenges http --http-01-port 26143 -d example.com
certbot certonly --nginx --preferred-challenges http --http-01-port 26143 -d example.com
certbot certonly --noninteractive --agree-tos --cert-name slickstack -d example.com -m [email protected] --webroot -w /root/html
certbot certonly --noninteractive --agree-tos --cert-name slickstack -d example.com:26143 -m [email protected] --webroot -w /root/html
certbot certonly --noninteractive --agree-tos --cert-name slickstack -d example.com --http-01-port 26143 -m [email protected] --webroot -w /root/html
certbot certonly --noninteractive --agree-tos --cert-name slickstack -d example.com --preferred-challenges http --http-01-port 26143 -m [email protected] --webroot -w /root/html

经过反复调整,我遇到的最常见错误是:

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: example.com
   Type:   unauthorized
   Detail: Invalid response from
   https://example.com/.well-known/acme-challenge/ho73up1dR3KU4V37awccOw2T5xsSILWUM365ZnwVEN4
   [159.81.xxx.xxx]: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
   2.0//EN\">\n<html><head>\n<title>404 Not
   Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.

404 是不是从我的系统来看,它来自 example.com:80,而不是 example.com:26143。此​​外,我无权修改 DNS 记录。


以我的经验来看,加密和 SSL 有点令人困惑,再加上速率限制,我无法进行足够的故障排除来理解。

我知道这应该是可能的,我只是不知道如何做以及/或者我做错了什么。

任何帮助,将不胜感激

答案1

Let's encrypt http-01 挑战需要端口 80 来交换验证数据。https 服务器从未使用过。端口 80 是硬性要求。如果那不是一个选项,那么 DNS 是唯一的其他方法。

您应该先使用测试服务器,直到设置正确(较低的速率限制,甚至没有限制),然后再切换到生产服务器。

类似问题:https://community.letsencrypt.org/t/port-4434-instead-of-443/61349

相关内容