Nginx HTTP 요청 필터링 및 역방향 프록시 성능 분석
Nginx는 단순한 디자인과 뛰어난 성능으로 인해 업계에서 널리 사용되는 HTTP 서버 및 역방향 프록시 서버로, 수많은 웹 애플리케이션, 클라우드 시스템 및 모바일로 자리잡고 있습니다. 응용 프로그램을 선호합니다. 실제 애플리케이션에서 Nginx는 HTTP 요청 처리 및 응답을 담당할 뿐만 아니라 HTTP 요청 필터링 및 역방향 프록시도 수행합니다. 이 기사에서는 Nginx의 HTTP 요청 필터링 및 역방향 프록시 구현을 분석하고 성능 테스트 및 분석을 수행합니다.
Nginx는 정규 표현식을 기반으로 하는 HTTP 요청 필터링 모듈을 제공합니다. 이 모듈은 적격한 HTTP 요청을 가로채서 악성 요청을 필터링하거나 지정된 리소스를 보호할 수 있습니다. HTTP 요청 필터링을 활성화하려면 Nginx 구성 파일에 다음 코드를 추가하세요.
http { server { location / { if ($http_user_agent ~* Firefox) { return 403; } ... } } }
위 코드에서 $http_user_agent는 Nginx의 내장 변수로, HTTP 요청 헤더의 User-Agent 필드를 나타냅니다. 정규식 일치. Firefox 문자열이 일치하면 403 오류가 반환됩니다. 이러한 방식으로 하나 이상의 요청 유형을 필터링할 수 있습니다.
Nginx의 HTTP 요청 필터링 모듈은 HTTP 요청의 복잡한 필터링을 구현하는 데 사용할 수 있는 $http_referer, $request_method, $remote_addr 등과 같은 다른 유형의 변수 및 명령도 제공합니다. 독자는 관련 문서에서 내부를 확인할 수 있습니다. 깊은 이해.
Nginx의 역방향 프록시 기능은 클라이언트 요청 프록시를 백엔드 애플리케이션 서버로 전달할 수 있습니다. 백엔드 애플리케이션 서버가 결과를 반환한 후 Nginx는 결과를 클라이언트에 반환합니다. 부하 달성 성능 균형을 맞추고 향상시키는 것이 목적입니다.
다음은 간단한 역방향 프록시 구성입니다.
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
위 구성에서는 각각 포트 8080 및 8081을 수신하는 두 개의 백엔드 서버를 지정하는 myapp이라는 업스트림을 정의합니다. 서버 블록에서는 포트 80을 수신하고, 위치 /를 구성하고, Proxy_pass 지시어를 통해 myapp에 요청을 전달하고, myapp 프록시는 이를 백엔드 서버에 전달합니다.
Nginx의 역방향 프록시는 로드 밸런싱 알고리즘, 오류 처리, 세션 고정 등과 같은 몇 가지 고급 전략도 제공합니다. 독자는 관련 문서를 참조하여 자세히 알아볼 수 있습니다.
위의 분석을 통해 Nginx의 HTTP 요청 필터링 및 역방향 프록시 기능이 매우 강력하다는 것을 알 수 있지만 실제 애플리케이션에서는 여전히 성능에 주의해야 합니다. Nginx의 성능을 테스트하기 위해 ApacheBench(ab) 도구를 사용하여 Ubuntu 20.04 서버에서 테스트를 진행하였습니다.
첫 번째는 HTTP 요청 필터링 테스트입니다. 요청 헤더의 User-Agent 필드를 "Mozilla/5.0"으로 설정하고 Nginx 서버에 1000개의 요청을 보냅니다.
ab -n 1000 -H "User-Agent: Mozilla/5.0" http://localhost/
테스트 결과는 Nginx가 22.33 요청을 처리할 수 있음을 보여줍니다. 초당 요청당 평균 시간은 44.76ms이고 요청의 90%가 54ms 이내에 완료됩니다.
Concurrency Level: 1 Time taken for tests: 44.780 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 159000 bytes HTML transferred: 0 bytes Requests per second: 22.33 [#/sec] (mean) Time per request: 44.780 [ms] (mean) Time per request: 44.780 [ms] (mean, across all concurrent requests) Transfer rate: 3.47 [Kbytes/sec] received
다음은 역방향 프록시 테스트입니다. 간단한 백엔드 서버를 사용하여 실제 애플리케이션을 시뮬레이션했습니다. 각 요청 처리 시간은 10ms이고 요청은 동시에 두 개의 백엔드 서버에 시작됩니다.
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
ab -n 1000 http://localhost/
테스트 결과에 따르면 Nginx는 초당 966.41개의 요청을 처리할 수 있고 각 요청의 평균 시간은 1.03ms이며 요청의 90%는 2ms 이내 완료:
Concurrency Level: 1 Time taken for tests: 1.034 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 154000 bytes HTML transferred: 0 bytes Requests per second: 966.41 [#/sec] (mean) Time per request: 1.034 [ms] (mean) Time per request: 1.034 [ms] (mean, across all concurrent requests) Transfer rate: 145.42 [Kbytes/sec] received
테스트 결과에서 Nginx는 HTTP 요청을 가로채고 전달하는 능력이 매우 강력하며, 많은 수의 요청을 처리하고 높은 성능을 유지할 수 있음을 알 수 있습니다. 그러나 Nginx의 성능은 서버 하드웨어 기능, 운영 체제 매개변수 및 Nginx 구성과 같은 요인에 의해 제한되기도 합니다. 독자는 실제 애플리케이션의 실제 조건에 따라 조정하고 최적화해야 합니다.
결론
이 글에서는 Nginx의 HTTP 요청 필터링과 역방향 프록시 기능을 분석하고, 그 구현과 성능을 소개하고, 간단한 테스트와 분석을 진행합니다. 일반적으로 사용되는 HTTP 서버 및 역방향 프록시 서버인 Nginx는 강력한 웹 서비스 기능을 제공합니다. 독자는 실제 요구 사항과 환경에 따라 다양한 Nginx 모듈과 매개 변수를 선택하고 구성하여 최상의 성능과 효과를 얻을 수 있습니다.
위 내용은 Nginx HTTP 요청 필터링 및 역방향 프록시 성능 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!