Сертификация SSL установлена, но HTTPS не работает - PullRequest
0 голосов
/ 16 июня 2019

Я проверил много блогов, но нигде не могу разрешить.Пожалуйста, помогите

Проблема: у меня есть машина ec2 и запись A для моего субдомена subdomain.website.com.Мой код работает на порте 5000 на машине ec2.

Я сделал все шаги, чтобы сделать мой поддомен 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. У меня есть один файл conf в/etc/nginx/sites-available/webhook.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 например

1 Ответ

1 голос
/ 16 июня 2019

Здесь есть несколько неправильных настроек.

  • Основная проблема заключается в том, что у вас есть прокси-сервер к вашему бэкэнду (порт 5000) на сервере HTTP вместо его на сервере HTTPS.Вы перенаправляете HTTP-трафик на HTTPS (с return 301 https://$host$request_uri;), но ваша конфигурация HTTPS пуста.

  • Не забудьте создать символические ссылки внутри sites-enabled, указывающие на sites-available.

  • Конфигурация certbot не включена (только сертификаты), поэтому, возможно, у вас возникнут проблемы с обновлением, если вы используете проверку HTTP.

  • Лучше обрабатывать разные имена серверов на разных серверах, поэтому if ($host ...) можно удалить.

  • Нет необходимости помещать сертификаты SSL на серверы NON 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 или другим):

  • Создайте файл в /etc/nginx/sites-available с именем sudomain.website.com.conf с указанным выше содержимым.
  • Создайте символическую ссылку от /etc/nginx/sites-available/sudomain.website.com.conf до /etc/nginx/sites-available/sudomain.website.com.conf, чтобы включитьСайт.

Это было бы как:

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;
  }
}
...