C#에서 PDF 렌더링을 위해 프록시 서버를 구성하는 방법

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF의 프록시 구성은 RenderHtmlAsPdf() 오버로드의 메서드 매개변수이며, ChromePdfRenderOptions의 속성이 아닙니다. 이 차이는 중요합니다. RenderHtmlAsPdf()에는 프록시 매개변수가 전혀 없기 때문에, 기업용 프록시 뒤에서 활성 URL을 렌더링해야 할 때 다른 전략이 필요하기 때문입니다. null(기본값)을 전달하면 IronPDF가 직접 연결됩니다.

이 가이드는 실제 운영 환경에서 마주하게 될 모든 프록시 시나리오를 다룹니다: 직접 프록시 문자열, 인증된 기업용 프록시, RenderUrlAsPdf 해결 방법, Docker 컨테이너 구성, CI/CD 파이프라인 통합, 그리고 SSL 가로채기 및 NTLM 인증에 대한 일반적인 문제 해결 패턴 등이 포함됩니다.

30일 무료 체험을 시작하여 귀하의 환경에서 프록시 구성을 테스트해 보세요.

빠른 시작: 프록시를 통해 PDF 렌더링하기

IronPDF의 선택적 proxy 매개변수를 사용하면 기업 프록시 뒤에서 제공되는 실시간 웹 페이지를 변환할 수 있습니다. 이 코드 스니펫을 사용하여 빠르게 시작해 보세요.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronPdf 설치하기

    PM > Install-Package IronPdf
  2. 다음 코드 조각을 복사하여 실행하세요.

    using IronPdf;
    
    var renderer = new ChromePdfRenderer();
    
    // Proxy is the third parameter — not a render option
    PdfDocument pdf = renderer.RenderHtmlAsPdf(
        "<h1>Hello from behind the proxy</h1>",
        baseUrlOrPath: null,
        proxy: "http://proxy.co/rp.local:8080"
    );
    pdf.SaveAs("proxied-output.pdf");
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronPDF 사용 시작하기

    arrow pointer

간단한 작업 흐름 (3단계)

  1. NuGet을 통해 IronPDF 설치: Install-Package IronPdf
  2. 프록시 문자열을 세 번째 매개변수로 RenderHtmlAsPdf에 전달하십시오.
  3. 형식: 인증된 프록시의 경우 http(s)://host:port 또는 http(s)://user:pass@host:port

RenderHtmlAsPdf에 프록시를 전달하는 방법은 무엇입니까?

Proxy 매개변수는 다음 네 가지 메서드 시그니처에서 선택적인 string입니다:

// Instance methods
PdfDocument RenderHtmlAsPdf(string Html, string BaseUrlOrPath, string Proxy = null)
PdfDocument RenderHtmlAsPdf(string Html, Uri BaseUrl = null, string Proxy = null)

// Static methods
PdfDocument StaticRenderHtmlAsPdf(string Html, ChromePdfRenderOptions Options = null, string Proxy = null)
PdfDocument StaticRenderHtmlAsPdf(string Html, string BaseUrlOrPath, ChromePdfRenderOptions Options = null, string Proxy = null)
// Instance methods
PdfDocument RenderHtmlAsPdf(string Html, string BaseUrlOrPath, string Proxy = null)
PdfDocument RenderHtmlAsPdf(string Html, Uri BaseUrl = null, string Proxy = null)

// Static methods
PdfDocument StaticRenderHtmlAsPdf(string Html, ChromePdfRenderOptions Options = null, string Proxy = null)
PdfDocument StaticRenderHtmlAsPdf(string Html, string BaseUrlOrPath, ChromePdfRenderOptions Options = null, string Proxy = null)
' Instance methods
Function RenderHtmlAsPdf(Html As String, BaseUrlOrPath As String, Optional Proxy As String = Nothing) As PdfDocument
End Function

Function RenderHtmlAsPdf(Html As String, Optional BaseUrl As Uri = Nothing, Optional Proxy As String = Nothing) As PdfDocument
End Function

' Static methods
Shared Function StaticRenderHtmlAsPdf(Html As String, Optional Options As ChromePdfRenderOptions = Nothing, Optional Proxy As String = Nothing) As PdfDocument
End Function

Shared Function StaticRenderHtmlAsPdf(Html As String, BaseUrlOrPath As String, Optional Options As ChromePdfRenderOptions = Nothing, Optional Proxy As String = Nothing) As PdfDocument
End Function
$vbLabelText   $csharpLabel

이 매개변수가 null(기본값)인 경우, IronPDF의 Chromium 엔진은 HTML에서 참조되는 스타일시트, 이미지, 글꼴 및 JavaScript 파일과 같은 외부 리소스에 직접 연결됩니다. 프록시 문자열을 지정하면 렌더링 엔진에서 발생하는 모든 HTTP/HTTPS 요청이 해당 프록시를 통해 전달됩니다.

using IronPdf;

var renderer = new ChromePdfRenderer();

// Direct connection (default — no proxy)
var pdfDirect = renderer.RenderHtmlAsPdf("<h1>Direct</h1>");

// Through an unauthenticated proxy
var pdfProxied = renderer.RenderHtmlAsPdf(
    "<h1>Proxied</h1>",
    baseUrlOrPath: null,
    proxy: "http://squid.internal:3128"
);

// Using the Uri overload
var pdfUri = renderer.RenderHtmlAsPdf(
    "<h1>Proxied via Uri overload</h1>",
    baseUrl: new Uri("https://assets.example.com/"),
    proxy: "https://proxy.co/rp.local:8443"
);
using IronPdf;

var renderer = new ChromePdfRenderer();

// Direct connection (default — no proxy)
var pdfDirect = renderer.RenderHtmlAsPdf("<h1>Direct</h1>");

// Through an unauthenticated proxy
var pdfProxied = renderer.RenderHtmlAsPdf(
    "<h1>Proxied</h1>",
    baseUrlOrPath: null,
    proxy: "http://squid.internal:3128"
);

// Using the Uri overload
var pdfUri = renderer.RenderHtmlAsPdf(
    "<h1>Proxied via Uri overload</h1>",
    baseUrl: new Uri("https://assets.example.com/"),
    proxy: "https://proxy.co/rp.local:8443"
);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Direct connection (default — no proxy)
Dim pdfDirect = renderer.RenderHtmlAsPdf("<h1>Direct</h1>")

' Through an unauthenticated proxy
Dim pdfProxied = renderer.RenderHtmlAsPdf(
    "<h1>Proxied</h1>",
    baseUrlOrPath:=Nothing,
    proxy:="http://squid.internal:3128"
)

' Using the Uri overload
Dim pdfUri = renderer.RenderHtmlAsPdf(
    "<h1>Proxied via Uri overload</h1>",
    baseUrl:=New Uri("https://assets.example.com/"),
    proxy:="https://proxy.co/rp.local:8443"
)
$vbLabelText   $csharpLabel

프록시 문자열은 http://https:// 형식을 모두 지원합니다. 애플리케이션과 프록시 서버 간의 연결에 프록시 자체에서 TLS 암호화가 필요한 경우 https://를 사용하십시오. 여기서 '스키마'는 최종 리소스가 아닌 프록시 연결을 의미합니다. 즉, http:// 프록시는 CONNECT 터널링을 통해 https:// 리소스를 여전히 가져올 수 있습니다.

정적 메서드 변형들은 동일한 프록시 매개변수를 받아들이며, 이는 콘솔 애플리케이션이나 단위 테스트에서 일회성 렌더링에 유용합니다:

// Static render with proxy — no renderer instance needed
var pdf = ChromePdfRenderer.StaticRenderHtmlAsPdf(
    "<h1>Static render through proxy</h1>",
    options: null,
    proxy: "http://proxy.co/rp.local:8080"
);
// Static render with proxy — no renderer instance needed
var pdf = ChromePdfRenderer.StaticRenderHtmlAsPdf(
    "<h1>Static render through proxy</h1>",
    options: null,
    proxy: "http://proxy.co/rp.local:8080"
);
' Static render with proxy — no renderer instance needed
Dim pdf = ChromePdfRenderer.StaticRenderHtmlAsPdf(
    "<h1>Static render through proxy</h1>",
    options:=Nothing,
    proxy:="http://proxy.co/rp.local:8080"
)
$vbLabelText   $csharpLabel

중요: Proxy에는 ChromePdfRenderOptions 속성이 없습니다. 거기서 찾지 마세요. 이 프록시는 RenderHtmlAsPdfFromHtml 오버로드의 메서드 매개변수로만 사용됩니다.

기업용 프록시를 통해 어떻게 인증하나요?

대부분의 Enterprise 프록시는 인증 정보가 필요합니다. http(s)://username:password@host:port 형식을 사용하여 프록시 URL에 직접 삽입합니다:

using IronPdf;

var renderer = new ChromePdfRenderer();

string proxyWithAuth = "http://svc-account:P%40ssw0rd%21@proxy.co/rp.local:8080";

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: @"C:\templates\assets\",
    proxy: proxyWithAuth
);
pdf.SaveAs("report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string proxyWithAuth = "http://svc-account:P%40ssw0rd%21@proxy.co/rp.local:8080";

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: @"C:\templates\assets\",
    proxy: proxyWithAuth
);
pdf.SaveAs("report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim proxyWithAuth As String = "http://svc-account:P%40ssw0rd%21@proxy.co/rp.local:8080"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: "C:\templates\assets\",
    proxy:=proxyWithAuth
)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

비밀번호에 포함된 특수 문자는 URL 인코딩해야 합니다. 비밀번호에 @, #, :, / 또는 기타 예약된 URI 문자가 포함된 경우, 반드시 퍼센트 인코딩해야 합니다. 일반적인 인코딩:

문자 인코딩됨
@ %40
# %23
: %3A
/ %2F
! %21
% %25

프로그래밍 방식으로 비밀번호를 인코딩하려면 Uri.EscapeDataString()을 사용하십시오:

string rawPassword = "P@ssw0rd!";
string encoded = Uri.EscapeDataString(rawPassword); // "P%40ssw0rd%21"
string proxy = $"http://svc-account:{encoded}@proxy.co/rp.local:8080";
string rawPassword = "P@ssw0rd!";
string encoded = Uri.EscapeDataString(rawPassword); // "P%40ssw0rd%21"
string proxy = $"http://svc-account:{encoded}@proxy.co/rp.local:8080";
Imports System

Dim rawPassword As String = "P@ssw0rd!"
Dim encoded As String = Uri.EscapeDataString(rawPassword) ' "P%40ssw0rd%21"
Dim proxy As String = $"http://svc-account:{encoded}@proxy.co/rp.local:8080"
$vbLabelText   $csharpLabel

프록시 인증과 웹 페이지 인증을 혼동하지 마십시오. ChromeHttpLoginCredentials.Net/workUsernameNetworkPassword 속성은 프록시 서버가 아닌, 렌더링 중인 웹 페이지(웹사이트와의 NTLM/Negotiate)에 대해 인증을 수행합니다. 프록시 인증의 경우, 위에서 보여준 것처럼 자격 증명을 프록시 URL 문자열에 포함시켜야 합니다.

프록시 뒤의 URL은 어떻게 렌더링하나요?

RenderUrlToPdf는 proxy 매개변수를 허용하지 않습니다. 이는 의도된 API 설계 선택입니다. NavigateUrl은 Chromium을 특정 URL로 이동시키며, 해당 이동에 대한 프록시 구성은 HTML 렌더링 중 리소스 로딩 시와 다르게 처리됩니다.

권장되는 해결 방법: HttpClientHttpProxy로 구성하여 HTML을 직접 가져온 다음, 해당 HTML 문자열을 proxy 매개변수와 함께 RenderHtmlAsPdf에 전달합니다(이렇게 하면 참조된 리소스(이미지, CSS, 폰트 등)도 프록시를 통해 라우팅됩니다).

using IronPdf;
using System.Net;
using System.Net.Http;

// Step 1: Configure HttpClient with the corporate proxy
var proxy = new WebProxy("http://proxy.co/rp.local:8080")
{
    Credentials = new NetworkCredential("svc-account", "P@ssw0rd!")
};

var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var httpClient = new HttpClient(handler);

// Step 2: Fetch the HTML from the target URL
string targetUrl = "https://dashboard.internal.co/rp/quarterly-report";
string html = await httpClient.GetStringAsync(targetUrl);

// Step 3: Render the fetched HTML, with the proxy for asset loading
var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    html,
    baseUrlOrPath: targetUrl,  // Resolves relative asset paths against the original URL
    proxy: "http://svc-account:P%40ssw0rd%21@proxy.co/rp.local:8080"
);
pdf.SaveAs("quarterly-report.pdf");
using IronPdf;
using System.Net;
using System.Net.Http;

// Step 1: Configure HttpClient with the corporate proxy
var proxy = new WebProxy("http://proxy.co/rp.local:8080")
{
    Credentials = new NetworkCredential("svc-account", "P@ssw0rd!")
};

var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var httpClient = new HttpClient(handler);

// Step 2: Fetch the HTML from the target URL
string targetUrl = "https://dashboard.internal.co/rp/quarterly-report";
string html = await httpClient.GetStringAsync(targetUrl);

// Step 3: Render the fetched HTML, with the proxy for asset loading
var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    html,
    baseUrlOrPath: targetUrl,  // Resolves relative asset paths against the original URL
    proxy: "http://svc-account:P%40ssw0rd%21@proxy.co/rp.local:8080"
);
pdf.SaveAs("quarterly-report.pdf");
Imports IronPdf
Imports System.Net
Imports System.Net.Http

' Step 1: Configure HttpClient with the corporate proxy
Dim proxy As New WebProxy("http://proxy.co/rp.local:8080") With {
    .Credentials = New NetworkCredential("svc-account", "P@ssw0rd!")
}

Dim handler As New HttpClientHandler With {
    .Proxy = proxy,
    .UseProxy = True
}

Using httpClient As New HttpClient(handler)
    ' Step 2: Fetch the HTML from the target URL
    Dim targetUrl As String = "https://dashboard.internal.co/rp/quarterly-report"
    Dim html As String = Await httpClient.GetStringAsync(targetUrl)

    ' Step 3: Render the fetched HTML, with the proxy for asset loading
    Dim renderer As New ChromePdfRenderer()

    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(
        html,
        baseUrlOrPath:=targetUrl,  ' Resolves relative asset paths against the original URL
        proxy:="http://svc-account:P%40ssw0rd%21@proxy.co/rp.local:8080"
    )
    pdf.SaveAs("quarterly-report.pdf")
End Using
$vbLabelText   $csharpLabel

baseUrlOrPath 매개변수는 가져온 HTML 내의 상대 경로(<img src="/images/logo.png">, <link href="/css/styles.css">)가 올바르게 해석되도록 원본 대상 URL로 설정됩니다. proxy 매개변수는 렌더링 중에 해당 자산 요청이 프록시를 통해 라우팅되도록 보장합니다.

이 패턴은 인증이 필요한 페이지에서도 작동합니다. 데이터를 가져오기 전에 HttpClient를 적절한 쿠키나 헤더로 구성한 다음, 인증된 HTML을 IronPDF로 전달하십시오. HTTP 요청 헤더 사용법에서는 인증된 요청에 대한 헤더 구성 방법을 다룹니다.

페이지가 렌더링에 JavaScript에 의존하는 경우(SPA, React 대시보드, Angular 앱), 가져온 HTML에는 초기 셸만 포함됩니다. HttpClient 가져오기 과정에서 클라이언트 측 렌더링은 실행되지 않습니다. 이러한 경우 두 가지 옵션이 있습니다: 시스템 수준의 HTTPS_PROXY 환경 변수를 설정하여(다음 섹션에서 다룸) RenderUrlAsPdf()가 OS 수준에서 프록시를 통과하도록 하거나, 헤드리스 브라우저를 사용하여 완전히 렌더링된 HTML을 가져온 후 RenderHtmlAsPdf()로 전달하는 방법입니다.

Docker 컨테이너에서 프록시를 어떻게 구성하나요?

컨테이너화된 환경에서는 메서드별 매개변수보다 시스템 수준의 프록시 구성을 선호할 수 있습니다. IronPDF의 Chromium 엔진은 Linux 컨테이너가 아웃바운드 트래픽 라우팅에 사용하는 표준 HTTP_PROXYHTTPS_PROXY 환경 변수를 준수합니다.

Dockerfile에 다음을 설정하십시오:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

# System-level proxy for all outbound HTTP/HTTPS traffic
ENV HTTP_PROXY=http://proxy.co/rp.local:8080
ENV HTTPS_PROXY=http://proxy.co/rp.local:8080
ENV NO_PROXY=localhost,127.0.0.1,.internal.co/rp

# Install IronPDF dependencies (fonts, etc.)
RUN apt-get update && apt-get install -y \
    libgdiplus \
    libc6-dev \
    fonts-liberation \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

이러한 환경 변수가 설정되어 있으면 프록시 매개변수 없이 RenderHtmlAsPdf를 호출할 수 있습니다. Chromium이 시스템 수준의 구성을 자동으로 감지합니다:

// No proxy parameter needed — Chromium uses HTTP_PROXY env var
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// No proxy parameter needed — Chromium uses HTTP_PROXY env var
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
' No proxy parameter needed — Chromium uses HTTP_PROXY env var
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

RenderHtmlAsPdf()는 내부 리소스에 있어 중요합니다. 그렇지 않으면 내부 서비스(예: 로컬 CSS 서버나 Kubernetes 클러스터 내에서 실행되는 이미지 CDN)에 대한 요청이 불필요하게 프록시를 통해 라우팅됩니다. 프록시를 우회해야 하는 호스트 이름과 도메인은 쉼표로 구분하십시오.

일반 트래픽을 위한 시스템 수준 프록시와 특정 렌더링을 위한 별도의 프록시가 모두 필요한 경우, 메서드 매개변수가 환경 변수보다 우선합니다. 이를 통해 필요할 때 렌더링 단위로 제어할 수 있습니다.

CI/CD 파이프라인에서 프록시는 어떻게 처리하나요?

기업 네트워크 내의 CI/CD 러너는 대개 프록시 뒤에 위치합니다. 프록시 URL은 빌드 변수나 시크릿으로 전달하십시오. 소스 제어에 자격 증명을 절대 하드코딩하지 마십시오.

GitHub Actions:

jobs:
  generate-pdf:
    runs-on: ubuntu-latest
    env:
      HTTP_PROXY: ${{secrets.CORP_PROXY_URL}}
      HTTPS_PROXY: ${{secrets.CORP_PROXY_URL}}
    steps:
      - uses: actions/checkout@v4
      - run: dotnet build
      - run: dotnet test
jobs:
  generate-pdf:
    runs-on: ubuntu-latest
    env:
      HTTP_PROXY: ${{secrets.CORP_PROXY_URL}}
      HTTPS_PROXY: ${{secrets.CORP_PROXY_URL}}
    steps:
      - uses: actions/checkout@v4
      - run: dotnet build
      - run: dotnet test
YAML

Azure DevOps:

variables:
  - group: proxy-settings  # Contains PROXY_URL secret

steps:
  - script: |
      export HTTP_PROXY=$(PROXY_URL)
      export HTTPS_PROXY=$(PROXY_URL)
      dotnet run --project PdfGenerator
    displayName: 'Generate PDFs behind proxy'
variables:
  - group: proxy-settings  # Contains PROXY_URL secret

steps:
  - script: |
      export HTTP_PROXY=$(PROXY_URL)
      export HTTPS_PROXY=$(PROXY_URL)
      dotnet run --project PdfGenerator
    displayName: 'Generate PDFs behind proxy'
YAML

Jenkins (선언적 파이프라인):

environment {
    HTTP_PROXY  = credentials('corp-proxy-url')
    HTTPS_PROXY = credentials('corp-proxy-url')
}

세 가지 경우 모두 Chromium은 환경 변수를 자동으로 읽습니다. 명시적인 제어를 원한다면, 환경에서 프록시 URL을 읽어와 메서드 매개변수로 전달하십시오:

string? proxy = Environment.GetEnvironmentVariable("HTTPS_PROXY");
var pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath: null, proxy: proxy);
string? proxy = Environment.GetEnvironmentVariable("HTTPS_PROXY");
var pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath: null, proxy: proxy);
Option Strict On



Dim proxy As String = Environment.GetEnvironmentVariable("HTTPS_PROXY")
Dim pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath:=Nothing, proxy:=proxy)
$vbLabelText   $csharpLabel

프록시 문제를 어떻게 해결하나요?

타임아웃 오류: 기업용 프록시는 지연 시간을 유발합니다. 기본값인 60초에서 렌더링 타임아웃을 늘리십시오:

renderer.RenderingOptions.Timeout = 120; // seconds
renderer.RenderingOptions.Timeout = 120; // seconds
renderer.RenderingOptions.Timeout = 120 ' seconds
$vbLabelText   $csharpLabel

이것은 RenderTimeout 속성입니다. 이 속성은 Chromium이 페이지 로딩과 리소스 가져오기를 합쳐서 얼마나 오래 대기할지 제어합니다. 프록시가 요청당 5~10초의 지연 시간을 추가하고, 페이지에 20개 이상의 외부 리소스가 로드된다면 60초는 충분하지 않을 수 있습니다.

SSL 가로채기(MITM 프록시): 많은 기업용 프록시는 기업 루트 CA 인증서를 사용하여 HTTPS 트래픽을 복호화하고 다시 암호화합니다. Chromium은 기본적으로 해당 기업 CA를 신뢰하지 않기 때문에 이러한 연결을 거부합니다. 두 가지 해결 방안:

  1. 컨테이너 또는 호스트의 신뢰할 수 있는 루트 저장소에 기업 CA 인증서를 설치합니다. Linux에서: .crt/usr/local/share/ca-certificates/로 복사한 후 update-ca-certificates를 실행하십시오.
  2. 개발 환경에서만 인증서 검증을 비활성화할 수 있습니다. 단, 실제 운영 환경에서는 절대 이 작업을 수행해서는 안 됩니다. 항상 적절한 인증서를 설치하는 것이 더 안전한 방법입니다.

NTLM 인증: 인라인 user:pass@host 형식은 Basic 및 Digest 프록시 인증을 지원합니다. NTLM(Windows 기반 Enterprise에서 흔히 사용됨)은 프록시 URL 문자열을 통해 지원되지 않습니다. 해결책은 호스트에서 또는 사이드카 컨테이너로 CNTLM과 같은 로컬 NTLM-to-Basic 전달 프록시를 실행하는 것입니다. NTLM 자격 증명으로 CNTLM을 구성한 후, IronPDF를 http://localhost:3128(CNTLM의 기본 포트)로 지정하십시오.

빈 PDF 또는 누락된 리소스: PDF는 표시되지만 이미지나 CSS가 누락된 경우, HTML이 프록시가 차단하는 리소스를 참조하거나 다른 프록시 경로가 필요한 리소스를 참조하고 있는 것입니다. baseUrlOrPath 매개변수가 프록시를 통해 올바르게 해결되는지 확인하고, 프록시의 액세스 로그에서 403 또는 407 응답이 있는지 확인하십시오.

로컬 자산에 대한 프록시 우회: HTML이 로컬 자산(번들 이미지, 인라인 CSS)과 원격 리소스(CDN 폰트, 외부 스크립트)를 혼합하여 참조하는 경우, 프록시는 원격 요청만 처리하면 됩니다. 파일 시스템 리소스를 위한 baseUrlOrPath을 로컬 디렉터리로 설정하고, 프록시가 네트워크 요청만 처리하도록 하십시오. 이를 통해 로컬 파일 읽기를 불필요하게 프록시를 통해 경유하는 것을 방지할 수 있습니다.

연결 상태 확인: IronPDF에서 프록시 문자열을 사용하기 전에 올바른지 확인하려면, 먼저 간단한 HttpClient 요청으로 테스트해 보십시오:

var proxy = new WebProxy("http://proxy.co/rp.local:8080");
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var client = new HttpClient(handler);

var response = await client.GetAsync("https://httpbin.org/ip");
Console.WriteLine(await response.Co/ntent.ReadAsStringAsync());
// Should return the proxy's external IP, not your machine's IP
var proxy = new WebProxy("http://proxy.co/rp.local:8080");
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var client = new HttpClient(handler);

var response = await client.GetAsync("https://httpbin.org/ip");
Console.WriteLine(await response.Co/ntent.ReadAsStringAsync());
// Should return the proxy's external IP, not your machine's IP
Imports System.Net.Http
Imports System.Net

Dim proxy As New WebProxy("http://proxy.co/rp.local:8080")
Dim handler As New HttpClientHandler With {.Proxy = proxy, .UseProxy = True}
Using client As New HttpClient(handler)
    Dim response = Await client.GetAsync("https://httpbin.org/ip")
    Console.WriteLine(Await response.Content.ReadAsStringAsync())
    ' Should return the proxy's external IP, not your machine's IP
End Using
$vbLabelText   $csharpLabel

이 작업이 성공했음에도 IronPDF가 여전히 작동하지 않는다면, 문제는 SSL 가로채기나 프록시와 Chromium의 CONNECT 터널링 간 프로토콜 불일치 때문일 가능성이 높습니다. 프록시가 HTTPS 리소스에 대해 HTTP CONNECT를 지원하는지 확인하십시오. 일부 프록시는 터널링을 허용하기 위해 별도의 구성이 필요합니다.

다음 단계

IronPDF의 프록시 지원은 RenderHtmlAsPdf()의 메서드 매개변수입니다. 프록시 문자열을 전달하면 Chromium 엔진이 모든 HTTP 트래픽을 이를 통해 라우팅합니다. RenderUrlAsPdf() 시나리오의 경우, 먼저 HttpClientWebProxy을 사용하여 HTML을 가져옵니다. 컨테이너 및 CI/CD의 경우, 시스템 수준의 HTTPS_PROXY 환경 변수를 사용하면 코드를 변경하지 않고도 인프라 수준에서 제어할 수 있습니다.

웹 페이지 인증(프록시 인증과는 별개)에 대한 로그인 및 인증 방법, 사용자 정의 헤더에 대한 HTTP 요청 헤더 가이드, 타임아웃 및 성능 조정을 위한 렌더링 옵션 참조 자료를 확인해 보세요.

$999부터 시작하는 라이선스 옵션을 확인하세요. ChromePdfRenderer API 레퍼런스는 모든 메서드 오버로드를 다루며, ChromePdfRenderOptions 레퍼런스는 모든 구성 가능한 속성을 다룹니다. RenderUrlAsPdf() ProxyAddress ChromePdfRenderOptions RenderHtmlAsPdf StaticRenderHtmlAsPdf RenderUrlAsPdf HttpClient WebProxy RenderHtmlAsPdf() ```yaml

사양: 컨테이너:

  • name: pdf-generator 이미지: myregistry/pdf-service:latest env:
    • name: HTTP_PROXY valueFrom: configMapKeyRef: name: proxy-config key: http-proxy
    • name: HTTPS_PROXY valueFrom: configMapKeyRef: name: proxy-config key: https-proxy
    • name: NO_PROXY value: "localhost,127.0.0.1,.internal.co/rp" <a href="https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderOptions.html">ChromePdfRenderOptions.Timeout`

자주 묻는 질문

C#에서 PDF 렌더링을 위한 프록시 서버를 어떻게 설정합니까?

C#에서 PDF 렌더링을 위한 프록시 서버를 설정하려면 IronPDF에서 RenderHtmlAsPdf 메서드를 호출할 때 프록시 매개변수를 사용할 수 있습니다. 이를 통해 웹 리소스에 접근하기 위한 프록시 설정을 지정할 수 있습니다.

IronPDF와 프록시를 사용하는 목적은 무엇입니까?

IronPDF와 프록시를 사용하면 PDF 렌더링 시 네트워크 요청을 관리하는 데 도움이 되며, 특히 방화벽 뒤나 회사 네트워크와 같이 인터넷 액세스가 제한된 환경에서 유용합니다.

IronPDF가 인증된 프록시를 처리할 수 있습니까?

네, IronPDF는 인증된 프록시를 처리할 수 있습니다. C# 코드에서 프록시 설정과 함께 필요한 인증 자격 증명을 제공해야 합니다.

Docker 컨테이너에서 프록시와 IronPDF를 사용할 수 있습니까?

네, IronPDF는 Docker 컨테이너에서 프록시와 함께 작동하도록 구성할 수 있습니다. Docker 환경 변수가 올바르게 설정되어 프록시 설정을 전달하도록 해야 합니다.

IronPDF의 프록시 문제를 어떻게 해결합니까?

IronPDF의 프록시 문제를 해결하려면 프록시 설정을 확인하고 인증 세부 정보가 정확한지 확인하며 네트워크 접근성을 확인하십시오. 로그에서 오류 메시지를 검토하면 문제를 파악하는 데 도움이 될 수 있습니다.

IronPDF를 프록시 구성을 사용하여 CI/CD 파이프라인에서 사용할 수 있습니까?

네, IronPDF는 프록시 구성을 사용하여 CI/CD 파이프라인에 통합될 수 있습니다. PDF 렌더링 프로세스 중에 필요한 프록시 설정을 전달하도록 빌드 환경이 설정되어야 합니다.

Enter 단체 환경에서 IronPDF와 프록시를 사용하는 이점은 무엇입니까?

단체 환경에서 IronPDF와 프록시를 사용하면 보안을 강화하고, 인터넷 접근을 제어하며, 대역폭 사용을 관리하여 조직의 IT 정책을 준수하는 데 용이합니다.

다리우스 세란트
풀스택 소프트웨어 엔지니어 (웹 운영)

다리우스 세런트는 마이애미 대학교에서 컴퓨터 과학 학사 학위를 받았으며, Iron Software에서 풀 스택 웹 운영 마케팅 엔지니어로 근무하고 있습니다. 어린 시절부터 코딩에 매료되었던 그는 컴퓨팅이 신비로우면서도 접근하기 쉬운 분야라고 생각했고, 창의력과 문제 해결 능력을 발휘하기에 완벽한 매체라고 여겼습니다.

Iron Software에서 다리우스는 새로운 것을 만들고 복잡한 개념을 단순화하여 더 쉽게 이해할 수 있도록 하는 것을 즐깁니다. 그는 사내 개발자로서 학생들을 가르치는 데에도 자원하여 차세대 인재들과 전문 지식을 공유하고 있습니다.

다리우스에게 있어 그의 일은 가치 있고 실질적인 영향을 미치기 때문에 보람 있는 일입니다.

시작할 준비 되셨나요?
Nuget 다운로드 19,014,616 | 버전: 2026.5 just released
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronPdf
샘플을 실행하세요 HTML이 PDF로 변환되는 것을 지켜보세요.