У меня очень странная проблема с подключением к моему недавно настроенному сайту SSL. Это Ubuntu VPS на Amazon LightSail.

У меня есть докер-контейнер, обслуживающий порты 80 и 443, как вы можете видеть здесь:

CONTAINER ID        IMAGE                                                                           COMMAND                  CREATED             STATUS              PORTS                                      NAMES
ce7114e8383a        nginx:alpine                                                                    "nginx -g 'daemon of…"   43 minutes ago      Up 7 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app_nginx_1
ffe588588a67        registry.gitlab.com/example/example-personal-website:latest   "/bin/sh -c 'npm run…"   43 minutes ago      Up 7 minutes        0.0.0.0:9000->9000/tcp                     app_web_1

Внутри сервера я могу сделать запрос curl к этому контейнеру и получить правильный ответ по SSL. Я получаю такой же ответ на порт 80.

ubuntu@ip-172-26-13-199:~$ curl -k https://0.0.0.0:443
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/>
... // rest of served HTML

Я временно отключил брандмауэр, чтобы исключить его.

ubuntu:~$ sudo ufw disable
Firewall stopped and disabled on system startup
ubuntu:~$ sudo ufw status
Status: inactive

Но со стороны я не могу получить доступ к https://www.example.com/ только http://www.example.com/

Это моя конфигурация nginx по умолчанию. Это обратный прокси для другого образа докера.

upstream node-app {
  server web:9000;
}

server {
  listen 80;
  listen 443 ssl;

  server_name www.example.com;

  ssl_certificate /certbot/live/www.example.com/fullchain.pem;
  ssl_certificate_key /certbot/live/www.example.com/privkey.pem;

  location / {
    proxy_pass         http://node-app;
    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;
    proxy_set_header   X-Forwarded-Host $server_name;
  }
}

И это включено в стандартную конфигурацию nginx.

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
  worker_connections  1024;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;

  sendfile        on;
  #tcp_nopush     on;

  keepalive_timeout  65;

  #gzip  on;

  include /etc/nginx/conf.d/*.conf;
}

Редактировать # 1 - Вывод из Test-NetConnection

C:\Users\Richard> Test-NetConnection -Port 443 -ComputerName www.example.com -InformationLevel Detailed
WARNING: TCP connect to ([server_ip] : 443) failed
WARNING: Ping to [server_ip] failed with status: TimedOut


ComputerName            : www.example.com
RemoteAddress           : [server_ip]
RemotePort              : 443
NameResolutionResults   : [server_ip]
MatchingIPsecRules      :
NetworkIsolationContext : Internet
IsAdmin                 : False
InterfaceAlias          : WiFi
SourceAddress           : 192.168.1.103
NetRoute (NextHop)      : 192.168.1.1
PingSucceeded           : False
PingReplyDetails (RTT)  : 0 ms
TcpTestSucceeded        : False

C:\Users\Richard> Test-NetConnection -Port 80 -ComputerName www.example.com -InformationLevel Detailed


ComputerName            : www.example.com
RemoteAddress           : [server_ip]
RemotePort              : 80
NameResolutionResults   : [server_ip]
MatchingIPsecRules      :
NetworkIsolationContext : Internet
IsAdmin                 : False
InterfaceAlias          : WiFi
SourceAddress           : 192.168.1.103
NetRoute (NextHop)      : 192.168.1.1
TcpTestSucceeded        : True

1 ответ1

1

Если локальное соединение с портом 443 и портом 80 из локальной системы возможно, но из удаленного доступа может быть достигнут только порт 80, обычно есть две возможности: а) порт 443 связан с другим IP-адресом (здесь не так) или б) порт 443 заблокирован каким-то брандмауэром.

Обратите внимание, что здесь может быть несколько межсетевых экранов, поскольку между удаленной системой и локальной системой существует несколько переходов. Пока вы отключили брандмауэр в локальной системе, в вашей настройке есть, по крайней мере, еще один: общие порты сети и настройки брандмауэра в Amazon Lightsail.

В то время как некоторые могут счесть неприятным, что существует еще один брандмауэр, который необходимо явно открыть, этот вид глубокой защиты может фактически защитить несколько установок, когда пользователи по незнанию открывают базы данных или другие службы извне.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .