Как настроить SSL для всех служб на сервере с использованием NGINX?

Как настроить простой конфигурационный файл Nginx для перенаправления служб phpmyadmin, grafana, marzban и prometheus на URL вида https://api.example.ru/<service_name>/ без необходимости изменения корневого URL для каждой службы? Как обеспечить работоспособность служб, не требуя изменения root-url и стандартного входа каждой из них?
  • 30 апреля 2024 г. 4:00
Ответы на вопрос 2
Для настройки SSL для всех служб на сервере с использованием NGINX, вам следует выполнить следующие шаги:

1. Убедитесь, что у вас установлен SSL сертификат на сервере. Вы можете использовать бесплатные сертификаты от Let's Encrypt или купить платный у сертифицированных провайдеров.
2. Откройте конфигурационный файл nginx для вашего сайта (обычно находится в /etc/nginx/sites-available/your_site.conf) и добавьте следующие строки в блок server:

```
server {
    listen 443 ssl;
    server_name api.example.ru;

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    location / {
        proxy_pass http://localhost:8080; // Замените на нужный порт
        proxy_set_header Host $http_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-Proto $scheme;
    }
}
```

3. Перезапустите nginx, чтобы применились изменения:

```
sudo systemctl restart nginx
```

Теперь ваш сервер должен быть доступен по https://api.example.ru и использовать SSL сертификат.

Чтобы настроить перенаправление на нужные URL для служб phpmyadmin, grafana, marzban и prometheus, вы можете добавить следующие правила в ваш конфигурационный файл:

```
location /phpmyadmin/ {
    rewrite ^/phpmyadmin/(.*) /$1 break;
    proxy_pass http://localhost:8081/phpmyadmin/;
}

location /grafana/ {
    rewrite ^/grafana/(.*) /$1 break;
    proxy_pass http://localhost:3000/;
}

location /marzban/ {
    rewrite ^/marzban/(.*) /$1 break;
    proxy_pass http://localhost:8082/marzban/;
}

location /prometheus/ {
    rewrite ^/prometheus/(.*) /$1 break;
    proxy_pass http://localhost:9090/prometheus/;
}
```

После внесения изменений перезапустите сервер nginx:

```
sudo systemctl restart nginx
```

Теперь все службы должны быть доступны по URL вида https://api.example.ru/<service_name>/ без дополнительных изменений.
Не пробовали такое? 
location /marzban/ {
    alias /path/to/marzban/root/;
}


P.S. И в оба server_name нужно через пробел вписывать api.example.ru.
Похожие вопросы