2016-12-19 6 views
1

У меня был рабочий HTTP-сервер с использованием BaseHTTPServer в Python, поэтому я попытался добавить SSL-сертификат для https с использованием LetsEncrypt, и теперь он не будет обслуживать ни один файлы или отвечать. Никаких исключений или ошибок не было брошено, и он не будет обслуживать какой-либо контент.Попытка использования LetsEncrypt для запуска SSL-обернутого BaseHTTPServer в Python не удалась

server_address = ('0.0.0.0', 80) 
httpd = HTTPServer(server_address, MyHandler) 
# I can comment out the following line and it'll work 
httpd.socket = ssl.wrap_socket(httpd.socket, keyfile=ssl_key, certfile=ssl_cert, server_side=True) 
httpd.serve_forever() 

#ssl_key = '/etc/letsencrypt/live/example.com/privkey.pem' 
#ssl_cert = '/etc/letsencrypt/live/example.com/fullchain.pem' 

Где MyHandler следующий:

class MyHandler(BaseHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(204) 
     self.send_header("Content-Type", "text/html") 
     self.end_headers() 
     return 

    def do_POST(self): 
     self.send_response(204) 
     self.send_header("Content-Type", "text/html") 
     self.end_headers() 
     return 

Попытка получить доступ к сайту через веб-браузер от https://example.com возвращает качестве стандарта не-ответ «Сервер не найден».

Я следовал следующие инструкции для создания сертификата с помощью LetsEncrypt: https://certbot.eff.org/#ubuntuxenial-other

sudo apt-get install letsencrypt

Вслед за:

letsencrypt certonly --standalone -d example.com

Есть ли способ, я могу легко выяснить, в чем проблема? Использование Python 3.5. Приятно предоставить дополнительную информацию, если необходимо.

+0

Что делает MyHandler? Это вилка? Какой URL-адрес вы используете для доступа к нему? Учитывая код, URL должен включать протокол https, а также явно порт 80, потому что это не стандартный порт для https. Кроме того, любой доступ без HTTPS приведет к тому, что сервер остановится для всех пользователей, см. Http://stackoverflow.com/questions/26531146/truly-non-blocking-https-server-in-python. –

+0

@SteffenUllrich добавил код для MyHandler, а также информацию об URL-адресе, используемом для доступа к нему (протокол https). – ReactingToAngularVues

ответ

2
server_address = ('0.0.0.0', 80) 

Попытка получить доступ к сайту через веб-браузер от https://example.com возвращает качестве стандарта не-ответ «Сервер не найден».

https://host без явного задания порта означает, что сервер доступен порт по умолчанию для протокола HTTPS, который является 443. Но, как вы настроили сервер, чтобы использовать порт 80 в server_address.

Есть два способа исправить это: либо явно указать нестандартный порт для протокола HTTPS в URL, то есть https://host:80 или изменить порт в server_address от 80 до 443. Последний вариант, вероятно, лучше один.

+0

Ммм, мне удалось выяснить это вскоре. Однако теперь запросы на 'http: //' не работают, по-видимому, потому, что я не привязываюсь к порту 80. Как я могу поддерживать оба протокола? – ReactingToAngularVues

+0

@EchoLogic: тогда это другой вопрос. Но одним словом: вы должны слушать по обоим адресам. См. [Как написать HTTP-сервер python для прослушивания на нескольких портах?] (Http://stackoverflow.com/questions/60680/how-do-i-write-a-python-http-server-to-listen- на нескольких портов). –

 Смежные вопросы

  • Нет связанных вопросов^_^