
Итак, у меня дома есть Synology NAS с запущенными службами, доступ к которым мне нужен из WWW, но я, по понятным причинам, не хочу открывать порты на своем домашнем IP для широкого интернета (особенно потому, что внешним службам нужен доступ к моему серверу через порт 443) — поэтому я решил развернуть экземпляр Always Free (подключение 0,48 Гбит/с, 1 ЦП, 1 ГБ ОЗУ) на Oracle Cloud с установленной Ubuntu 22.04 и установить на нем nginx, чтобы получить доступ к этим службам из-за пределов моей домашней сети. Затем я открыл порт на своем маршрутизаторе только для IP-адреса экземпляра облака.
У меня есть опыт управления серверами Linux через SSH, но это мой первый опыт работы с nginx в целом, не говоря уже об обратных прокси-серверах.
Во время тестирования я оставил порт открытым для всех IP-адресов, чтобы я мог тестировать входящий трафик в моей лаборатории как напрямую, так и через обратный прокси-сервер. Вот где я начинаю бороться:
- когда я напрямую обращаюсь к phpMyAdmin, запущенному на вышестоящем сервере (я просто запрашиваюhttps://pma.upstream.mydomain.xyz:openedPortв моем браузере) он загружается мгновенно - даже с очищенным кэшем
- когда я получаю доступ к phpMyAdmin, запущенному на вышестоящем сервере, через обратный прокси-сервер (путем запросаhttps://pma.reverseproxy.mydomain.xyz:443в моем браузере) загрузка занимает больше минуты после очистки кэша браузера. Когда кэш уже загружен, это не так медленно (может быть, 10 секунд), но все равно намного медленнее, чем прямой запрос к серверу upstream (что будет невозможно, когда я закрою порт для более широкого интернета). Проверив консоль браузера, больше всего времени занимают крошечные PNG, которые phpMyAdmin использует в качестве иконок (каждое изображение занимает максимум пару сотен байт) и более крупные файлы CSS/JS (пару десятков КБ).
Когда я захожу на другой сайт на вышестоящем сервере через обратный прокси-сервер, у меня, похоже, таких проблем не возникает, хотя, правда, он не обслуживает так много маленьких файлов JS и PNG, в основном это просто текст.
Ниже приведена моя конфигурация блока сервера nginx. Кто-нибудь знает, где я могу ошибаться? Любой совет был бы очень признателен.
server {
listen 443 ssl http2;
server_name pma.reverseproxy.mydomain.xyz;
sendfile on;
tcp_nodelay on;
tcp_nopush on;
ssl_certificate /etc/letsencrypt/live/reverseproxy.mydomain.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reverseproxy.mydomain.xyz/privkey.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
set $backend_server https://pma.upstream.mydomain.xyz:openedPort;
location / {
proxy_pass $backend_server;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host pma.upstream.mydomain.xyz;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffer_size 128k;
proxy_buffers 8 256k;
proxy_busy_buffers_size 256k;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
proxy_read_timeout 20s;
}
}