Я изо всех сил пытаюсь обеспечить безопасное обслуживание своего приложения FastAPI на сайте forge-code.com с помощью HTTPS.
Вот что я сделал на данный момент:
Развернул свое приложение FastAPI на экземпляре Google Cloud. Успешный доступ к приложению по протоколу HTTPS напрямую через IP-адрес экземпляра. Купил домен forge-code.com на Hostinger и настроил его для пересылки запросов на мой экземпляр. Установил сертификат SSL от Certbot и получил доступ к файлу Apache2 index.html на моем экземпляре через https://forge-code.com. Моя проблема: когда я захожу на https://forge-code.com, я вижу Apache2 index.html вместо моего приложения FastAPI. Мой файл 000-default.conf выглядит так:
GNU nano 7.2 000-default.conf
<VirtualHost *:80>
ServerName forge-code.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =forge-code.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
00-default-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://0.0.0.0:8000/
ProxyPassReverse / http://0.0.0.0:8000/
SSLEngine on
ServerName forge-code.com
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/forge-code.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/forge-code.com/privkey.pem
</VirtualHost>
</IfModule>
Вот еще немного информации Это выходные данные
systemctl status apache2
shivajay295@instance-20240221-193932:/etc/apache2/sites-available$ systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Fri 2024-02-23 18:37:43 UTC; 2h 30min ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 46449 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Process: 47594 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Main PID: 46455 (apache2)
Tasks: 55 (limit: 1141)
Memory: 12.5M
CPU: 1.008s
CGroup: /system.slice/apache2.service
├─46455 /usr/sbin/apache2 -k start
├─47598 /usr/sbin/apache2 -k start
└─47599 /usr/sbin/apache2 -k start
Feb 23 18:37:43 instance-20240221-193932 systemd[1]: Starting apache2.service - The Apache HTTP Server...
Feb 23 18:37:43 instance-20240221-193932 systemd[1]: Started apache2.service - The Apache HTTP Server.
Feb 23 20:56:01 instance-20240221-193932 systemd[1]: Reloading apache2.service - The Apache HTTP Server...
Feb 23 20:56:01 instance-20240221-193932 systemd[1]: Reloaded apache2.service - The Apache HTTP Server.
Feb 23 21:02:15 instance-20240221-193932 systemd[1]: Reloading apache2.service - The Apache HTTP Server...
Feb 23 21:02:15 instance-20240221-193932 systemd[1]: Reloaded apache2.service - The Apache HTTP Server.
shivajay295@instance-20240221-193932:/etc/apache2/sites-available$
sudo /usr/sbin/apache2ctl -S
shivajay295@instance-20240221-193932:/etc/apache2/sites-available$ sudo /usr/sbin/apache2ctl -S
VirtualHost configuration:
*:443 forge-code.com (/etc/apache2/sites-enabled/000-default-le-ssl.conf:2)
*:80 forge-code.com (/etc/apache2/sites-enabled/000-default.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir = "/var/run/apache2/" mechanism=default
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name = "www-data" id=33
Group: name = "www-data" id=33
shivajay295@instance-20240221-193932:/etc/apache2/sites-available$
Дополнительная информация:
Я использую Ubuntu в своем экземпляре Google Cloud. Я проверил, что у меня есть разрешения на чтение сертификата SSL и файлов ключей. Я не понимаю, почему мое приложение FastAPI не обслуживается через forge-code.com. Что мне нужно сделать, чтобы успешно обслуживать мое приложение FastAPI с помощью HTTPS на сайте forge-code.com?
@JohnHanley Я перезагружал несколько раз. Все еще не работает. sudo systemctl перезапустить apache2
Что показывает systemctl status apache2? Также apache2ctl -S. Отредактируйте свой вопрос и покажите эти команды и результаты.
@JohnHanley Внесены изменения
У вас включено пять виртуальных хостов. Отключите все виртуальные хосты. Затем настройте один файл конфигурации виртуального хоста для порта 80, а другой — для порта 443, а также конфигурацию SSL. У вас есть 443, настроенный в 000-default.conf, который должен находиться в 000-default-le-ssl.conf. Как только вы это сделаете, обновите свой вопрос, включите оба файла conf и обновите выходные данные команды.
@JohnHanley Я внес изменения

Развертывание приложения FastAPI в домене с помощью Apache и SSL:
1. Покупка домена и настройка DNS:
Приобретение домена. Приобретите доменное имя (например, forge-code.com) у авторитетного регистратора доменов. Точечные записи DNS. В настройках DNS вашего домена создайте запись A, которая сопоставит ваш домен с IP-адресом вашего экземпляра GCP:
Type: A
Name: @ (or leave blank)
Value: 34.131.190.233 (replace with your instance's IP)
TTL: 14400 (or a suitable value)
2. Установка SSL-сертификата:
Получите сертификат: используйте Certbot, чтобы получить бесплатный сертификат SSL от Let's Encrypt:
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d forge-code.com
3. Конфигурация Apache:
Редактирование виртуальных хостов. Измените следующие файлы в /etc/apache2/sites-available:
000-default-le-ssl.conf (для HTTPS): Убедитесь, что SSLEngine включен.
Установите имя_сервера в свой домен.
Включите сертификат SSL и файлы ключей.
ProxyPass и ProxyPassReverse используют порт вашего приложения FastAPI (8000).
Вот мой файл конфигурации
<IfModule mod_ssl.c>
<VirtualHost *:443>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://0.0.0.0:8000/
ProxyPassReverse / http://0.0.0.0:8000/
SSLEngine on
ServerName forge-code.com
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/forge-code.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/forge-code.com/privkey.pem
</VirtualHost>
</IfModule>
000-default.conf (для HTTP): Перенаправьте все HTTP-запросы на HTTPS с помощью RewriteRule.
Вот мой файл конфигурации
GNU nano 7.2 000-default.conf
<VirtualHost *:80>
ServerName forge-code.com
# Enable proxy modules
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:8000/
ProxyPassReverse / http://0.0.0.0:8000/
# Rewrite rule to redirect HTTP to HTTPS
RewriteEngine on
RewriteCond %{SERVER_NAME} =forge-code.com
SetEnv proxy-initial-not-pooled 1
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
4. Перезапуск Apache:
Перезагрузить конфигурацию:
sudo systemctl restart apache2
5. Запуск приложения FastAPI:
Запустите приложение FastAPI:
venv/bin/uvicorn app:app --host 0.0.0.0 --port 8000
Дополнительные соображения:
Правила брандмауэра: убедитесь, что ваш брандмауэр разрешает трафик через порты 80 и 443.
Конфигурация приложения FastAPI: убедитесь, что ваше приложение FastAPI настроено на прослушивание порта 8000.
Устранение неполадок: используйте журналы Apache (/var/log/apache2/error.log) для устранения любых проблем.
Управление процессами. Рассмотрите возможность использования диспетчера процессов, такого как systemd или supervisord, чтобы ваше приложение FastAPI работало в фоновом режиме. Альтернативный прокси. Если у Apache возникнут проблемы, изучите Nginx или HAProxy в качестве альтернативных прокси-решений.
Ключевые моменты:
Конфигурация домена. Точные настройки DNS имеют решающее значение для направления трафика на ваш сервер.
Сертификаты SSL. Для безопасной связи по протоколу HTTPS требуются действительные сертификаты SSL.
Конфигурация Apache. Правильная конфигурация позволяет Apache пересылать запросы к вашему приложению FastAPI и обрабатывать SSL.
Запуск приложения FastAPI: убедитесь, что ваше приложение работает и прослушивает правильный порт.
Устранение неполадок. Файлы журналов и управление процессами необходимы для выявления и решения проблем.
И Бинго, ваше приложение fastapi работает на вашем домене!!!
Вы перезагрузили или перезапустили Apache после смены виртуального хоста? В вашей конфигурации нет записей для обслуживания индексного файла Apache по умолчанию.