nginx 리버스 프록시를 통해 phpMyAdmin 로딩 속도가 엄청나게 느림

nginx 리버스 프록시를 통해 phpMyAdmin 로딩 속도가 엄청나게 느림

따라서 집에 Synology NAS가 있고 일부 서비스가 실행 중이므로 WWW에서 액세스할 수 있어야 하지만 당연히 내 집 IP의 포트를 넓은 인터넷에 열고 싶지 않습니다(특히 외부 서비스가 포트에서 내 서버에 액세스해야 하기 때문에). 443) - 그래서 저는 Ubuntu 22.04가 설치된 Oracle Cloud에서 Always Free 인스턴스(0.48Gbps 연결, 1 CPU, 1GB RAM)를 가동하고 여기에 nginx를 설치하여 홈 네트워크 외부에서 이러한 서비스에 액세스하기로 결정했습니다. 그런 다음 클라우드 인스턴스의 IP 주소에만 라우터의 포트를 열었습니다.

나는 SSH를 통해 Linux 서버를 관리한 경험이 있지만 역방향 프록시는 물론이고 nginx를 일반적으로 사용해 본 것은 이번이 처음입니다.

테스트하는 동안 포트를 모든 IP에 열어 두었으므로 직접 또는 역방향 프록시를 통해 연구실로 들어오는 트래픽을 테스트할 수 있습니다. 내가 어려움을 겪기 시작한 곳은 다음과 같습니다.

  • 업스트림 서버에서 실행 중인 phpMyAdmin에 직접 액세스할 때(단지 쿼리만 하면 됩니다.)https://pma.upstream.mydomain.xyz:openedPort내 브라우저에서는) 캐시가 지워진 경우에도 즉시 로드됩니다.
  • 역방향 프록시를 통해 업스트림 서버에서 실행 중인 phpMyAdmin에 액세스할 때(쿼리를 통해)https://pma.reverseproxy.mydomain.xyz:443내 브라우저에서는) 브라우저 캐시를 지운 후 로드하는 데 1분 이상 걸립니다. 캐시가 이미 로드되면 속도가 느리지는 않지만(아마도 10초) 업스트림 서버에 직접 쿼리하는 것보다 훨씬 느립니다(더 넓은 인터넷에 대한 포트를 닫으면 불가능함). 브라우저 콘솔을 확인한 결과 phpMyAdmin이 아이콘으로 사용하는 작은 PNG(각 이미지는 최대 수백 바이트)와 더 큰 CSS/JS 파일(몇 10KB)이 가장 오래 걸립니다.

역방향 프록시를 통해 업스트림 서버의 다른 사이트에 액세스할 때 이러한 문제가 발생하지 않는 것 같습니다. 그러나 많은 작은 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;
    }
}

관련 정보