이것은 C에서 Google의 SPDY 프로토콜을 실험적으로 구현 한 것입니다.
이 라이브러리는 SPDY 버전 2, 3 및 3.1 프레임 레이어 구현을 제공합니다. I/O 작업을 수행하지 않습니다. 라이브러리가 필요할 때 응용 프로그램에서 제공하는 콜백 기능을 호출합니다. 또한 이벤트 폴링 메커니즘도 포함되지 않으므로 응용 프로그램은 이벤트 처리 방법을 자유롭게 선택할 수 있습니다. 이 라이브러리 코드는 특정 SSL 라이브러리에 의존하지 않습니다 (OpenSSL 1.0.1 이상에 의존하는 프로그램 제외).
이 프로젝트는 또한 Spdylay 라이브러리 위에서 SPDY 클라이언트, 서버 및 프록시를 개발합니다. SPDY 클라이언트 및 서버 프로그램 섹션을 참조하십시오.
SPDY/2, SPDY/3 및 SPDY/3.1 기능의 대부분이 구현되었습니다. 두 버전 모두에서 Server-Push의 직접 지원은 아직 사용할 수 없었습니다. 응용 프로그램은 원시 API를 사용하여 서버 푸시를 달성 할 수 있습니다.
아래에 설명 된 바와 같이, 현재 SPDYLAY API를 사용하여 SPDY 클라이언트 및 서버를 만들 수 있습니다.
라이브러리를 구축하려면 다음 패키지가 필요합니다.
단위 테스트 프로그램을 구축하고 실행하려면 다음 패키지가 필요합니다.
예제 프로그램을 구축하고 실행하려면 다음 패키지가 필요합니다.
spdycat (예제 프로그램 중 하나)에서 -a 옵션 (다운로드 된 자산에서 링크 된 자산 얻기)을 활성화하려면 다음 패키지가 필요합니다.
SPDY/HTTPS에서 HTTP 리버스 프록시 shrpx (예제 프로그램 중 하나)를 구축하려면 다음 패키지가 필요합니다.
Ubuntu 12.04를 사용하는 경우 다음 패키지를 설치해야합니다.
$ apt-get autoconf autokake autotools-dev libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libevent-dev
Git에서 건물은 쉽지만 최소한 AutoConf 2.68이 사용되는지 확인하십시오.
$ autoreconf -i $ Automake $ autoconf $ ./configure $ make
문서를 작성하려면 실행 :
$ HTML을 만듭니다
문서는 doc/manual/html/ 에 따라 생성됩니다.
생성 된 문서는 make install 로 설치되지 않습니다.
이 섹션에서는 Debian Linux에서 Android NDK 크로스 컴파일러를 사용하여 Android 바이너리를 구축하는 방법을 간략하게 설명합니다.
우리는 android-config 및 android-make 스크립트를 제공하여 빌드를보다 쉽게 만들 수 있습니다. 이러한 스크립트를 작동 시키려면 NDK 도구 체인을 다음 방법으로 설치해야합니다. 먼저 ANDROID_HOME 환경 변수를 소개하십시오. $ANDROID_HOME/toolchain 아래에 도구 체인을 설치해야합니다. 사용자는 ANDROID_HOME 경로를 자유롭게 선택할 수 있습니다. 예를 들어 $ANDROID_HOME/toolchain 아래에 도구 체인을 설치하려면 NDK가 포장되지 않은 디렉토리에서 다음을 수행하십시오.
$ 빌드/도구/make-standalone-toolchain.sh -platform = android-9-install-dir = $ android_home/툴체인
Android 특정 C/C ++ API를 사용하지 않기 때문에 플랫폼 수준은 중요하지 않습니다.
OpenSSL 및 Libevent와 같은 종속 라이브러리는 도구 체인과 함께 구축하고 $ANDROID_HOME/usr/local 아래에 설치해야합니다. 배포를보다 쉽게 만들기 위해 이러한 라이브러리를 정적 라이브러리로 구축하는 것이 좋습니다. LIBXML2 지원은 현재 비활성화되어 있습니다.
우리는 Android NDK와 함께 제공되는 Zlib을 사용하므로 스스로 구축 할 필요가 없습니다.
android-config 및 android-make 실행하기 전에 ANDOIRD_HOME 환경 변수는 올바른 경로를 가리 키야합니다.
android-config 후에는 android-make 실행하여 소스를 컴파일하십시오. android-make Path and Run PATH 에서 Cross Compiler로가는 경로를 포함합니다. 따라서 Corss Compiler 로의 Path를 직접 포함 시키면 Spdylay 및 도구를 평소와 같이 만들기 위해 Maite를 실행할 수 있습니다.
공개 API 참조는 온라인에서 제공됩니다. http://tatsuhiro-t.github.io/spdylay/를 방문하십시오. 모든 공개 API는 SPDYLAY/SPDYLAY.H 에 있습니다. 모든 공개 API 기능과 콜백 함수 typedefs가 문서화됩니다.
SRC 디렉토리에는 SPDYLAY 라이브러리를 사용한 SPDY 클라이언트 및 서버 구현이 포함되어 있습니다. 이 프로그램은 SPDYLAY API가 실제 구현 및 디버깅 목적으로 현실적으로 사용할 수 있도록하기위한 것입니다. 이러한 프로그램을 구축하고 실행하려면 NPN 지원이 포함 된 OpenSSL이 필요합니다. 이 글을 쓰는 시점에서 OpenSSL 1.0.1은 NPN을 지원합니다.
SPDY 클라이언트를 spdycat 라고합니다. wget/curl과 같은 죽은 간단한 다운로더입니다. SPDY 서버에 연결하고 명령 줄에 제공되는 리소스를 얻습니다.
$ src/spdycat -h
사용법 : spdycat [-oansv23] [-t <secons>] [-w <wind
[-key = <key>] [-no-tls] [-d <file>] [-m <n>] [-p <proxy_host>]
[-p <proxy_port>] <URI> ...
옵션 :
-v, -verbose print debug reception/
프레임 및 이름/값 쌍의 전송.
-n,-null-out 다운로드 데이터.
-o,-remote-name 현재 디렉토리에서 다운로드 데이터를 저장합니다.
파일 이름은 URI에서 불쾌합니다. URI
'/', 'index.html'으로 끝나면 a로 사용됩니다
파일 이름. 아직 구현되지 않았습니다.
-2, -pdy2는 spdy/2 만 사용합니다.
-3, -pdy3 만 SPDY/3 만 사용합니다.
-pdy3-1은 spdy/3.1 만 사용합니다.
-t, -timeout = <n> <n> 초 후 각 요청을 시간 초과합니다.
-w, -window-bits = <n>
초기 창 크기를 2 ** <n>로 설정합니다.
-a,-get-assets 스타일 시트, 이미지와 같은 자산을 다운로드합니다
다운로드 된 스크립트 파일
의지. 기원이있는 링크 만
링크 리소스와 동일합니다
다운로드.
-s, -스택 인쇄 통계.
-h, -헤더 요청에 헤더를 추가합니다.
--cert = <cert> 지정된 클라이언트 인증서 파일을 사용하십시오.
파일은 PEM 형식이어야합니다.
-key = <key> 클라이언트 개인 키 파일을 사용하십시오. 파일
PEM 형식이어야합니다.
-NO-TLS SSL/TLS를 비활성화합니다. -2, -3 또는 -pdy3-1을 사용하십시오
사용할 SPDY 프로토콜 버전을 지정하십시오.
-d, -data = <file> 파일을 서버로 게시합니다. 주어지면 데이터가 제공됩니다
Stdin에서 읽을 것입니다.
-m, -multiply = <n> 각 uri <n>을 요청하십시오. 기본적으로 동일합니다
URI는 두 번 요청되지 않습니다. 이 옵션
그것을 비활성화합니다.
-p, -proxy = <host>이 호스트를 spdy 프록시로 사용하십시오
-p, -proxy-port = <port>
이것을 SPDY 프록시의 포트로 사용하십시오.
하나는 설정되었습니다
-컬러 힘 색상 로그 출력.
$ src/spdycat -nv https://www.google.com/
[0.021] NPN 다음 프로토콜 선택 : 원격 서버가 제공합니다.
* SPDY/4A4
* spdy/3.1
* spdy/3
* HTTP/1.1
NPN은 프로토콜을 선택했습니다 : SPDY/3.1
[0.029] 핸드 셰이크 완료
[0.029] RECV 설정 프레임 <버전 = 3, 플래그 = 0, 길이 = 20>
(NIV = 2)
[4 (1) : 100]
[7 (0) : 1048576]
[0.029] recv window_update 프레임 <버전 = 3, 플래그 = 0, 길이 = 8>
(stream_id = 0, delta_window_size = 983040)
[0.029] syn_stream 프레임 <버전 = 3, 플래그 = 1, 길이 = 221>을 보내십시오
(stream_id = 1, Assoc_stream_id = 0, pri = 3)
: 호스트 : www.google.com
: 방법 : 얻습니다
:길: /
: 체계 : https
: 버전 : HTTP/1.1
수용하다: */*
인코딩 수락 : gzip, deflate
사용자 에이전트 : SPDYLAY/1.2.0-DEV
[0.080] recv syn_reply frame <버전 = 3, 플래그 = 0, 길이 = 619>
(stream_id = 1)
: 상태 : 302 발견
: 버전 : HTTP/1.1
대체 보호 콜 : 443 : Quic
캐시 제어 : 개인
내용 길이 : 262
내용 유형 : Text/HTML; charset = utf-8
날짜 : Tue, 2013 년 11 월 19 일 13:47:18 GMT
위치 : https://www.google.co.jp/
서버 : GWS
X- 프레임-옵션 : Sameorigin
X-XSS 보호 : 1; 모드 = 블록
[0.080] RECV 데이터 프레임 (stream_id = 1, 플래그 = 1, 길이 = 262)
[0.080] 보내기 프레임 보내기 <버전 = 3, 플래그 = 0, 길이 = 8>
(last_good_stream_id = 0)
SPDY 서버를 spdyd 라고하며 정적 파일을 제공합니다. 비 블로킹 소켓을 사용한 단일 스레드 및 멀티 플렉스 연결입니다. 정적 파일은 차단 I/O 시스템 호출, read(2) 사용하여 읽습니다. spdy/2와 spdy/3을 말합니다.
$ src/spdyd -htdocs =/your/htdocs/-v 3000 server.key server.crt
IPv4 : 포트 3000에서 듣습니다
IPv6 : 포트 3000에서 듣습니다
협상 된 다음 프로토콜 : SPDY/3.1
[id = 1] [1.296] 설정 프레임 <버전 = 3, 플래그 = 0, 길이 = 12>을 보내십시오
(NIV = 1)
[4 (0) : 100]
[id = 1] [1.297] recv syn_stream 프레임 <버전 = 3, 플래그 = 1, 길이 = 228>
(stream_id = 1, Assoc_stream_id = 0, pri = 3)
: 호스트 : LocalHost : 3000
: 방법 : 얻습니다
: 경로 : /readme
: 체계 : https
: 버전 : HTTP/1.1
수용하다: */*
인코딩 수락 : gzip, deflate
사용자 에이전트 : SPDYLAY/1.2.0-DEV
[id = 1] [1.297] send_reply frame <version = 3, flags = 0, 길이 = 116>을 보내십시오
(stream_id = 1)
: 상태 : 200 OK
: 버전 : HTTP/1.1
캐시 제어 : Max-AGE = 3600
컨텐츠 길이 : 66
날짜 : Tue, 2013 년 11 월 19 일 14:35:24 GMT
최종 수정 : Tue, 2012 년 1 월 17 일 15:39:01 GMT
서버 : SPDYD SPDYLAY/1.2.0-DEV
[id = 1] [1.297] 데이터 프레임 보내기 (stream_id = 1, flags = 0, 길이 = 66)
[id = 1] [1.297] 데이터 프레임 보내기 (stream_id = 1, flags = 1, 길이 = 0)
[ID = 1] [1.297] Stream_id = 1 닫혔습니다
[ID = 1] [1.297] RECV Goaway Frame <버전 = 3, 플래그 = 0, 길이 = 8>
(last_good_stream_id = 0)
[ID = 1] [1.297] 폐쇄
현재 spdyd epoll 또는 kqueue 필요합니다.
SHRPX를 SPDY 프록시로 사용하는 SHRPX 사용자의 경우 : NGHTTP2 프로젝트에서 개발 된 NGHTTPX로 마이그레이션하는 것을 고려하십시오. NGHTTPX는 SPDY 프록시도 지원합니다.
shrpx 는 SPDY/HTTPS의 다중 스레드 리버스 프록시입니다. SPDY/HTTPS 트래픽을 일반 HTTP로 변환합니다. 처음에는 리버스 프록시로 개발되었지만 이제는 프론트 엔드 포워드 프록시와 같은 다른 조작 모드가 있습니다. 예를 들어 --spdy-proxy ( -s in shorthand) 옵션을 사용하면 백엔드에 프록시 (예 : 오징어)가있는 안전한 SPDY 프록시로 사용할 수 있습니다. --cliet-proxy ( -p ) 옵션을 사용하면 서수 전진 프록시처럼 작동하지만 백엔드에서 안전한 SPDY 프록시를 기대합니다. 따라서 안전한 SPDY 프록시를 지원하지 않는 클라이언트를 위해 SPDY 프록시를 보호하는 어댑터가됩니다. 주목할만한 또 다른 작동 모드는 --spdy-relay 이며 SPDY의 백엔드로 SPDY/HTTPS 트래픽을 전달합니다. 다음 표는 조작 모드를 요약합니다.
| 모드 옵션 | 프론트 엔드 | 백엔드 | 메모 |
|---|---|---|---|
| 기본 | spdy/https | http | 역 프록시 |
--spdy | spdy/https | http | spdy 프록시 |
--spdy-relay | spdy/https | spdy | |
--client | http | spdy | |
--client-proxy | http | spdy | 전진 프록시 |
shrpx 는 구성 파일을 지원합니다. --conf 옵션 및 샘플 구성 파일 shrpx.conf.sample 참조하십시오.
우리는 여기에서 shrpx 의 아키텍처를 간단히 설명합니다. 서버 소켓을 듣는 전용 스레드가 있습니다. 들어오는 연결을 수락하면 들어오는 연결의 파일 디스크립터가 작업자 스레드 중 하나에 전달됩니다. 각 작업자 스레드에는 자체 이벤트 루프가 있으며 비 블로킹 I/O를 사용하여 많은 연결을 처리 할 수 있습니다. 작업자 스레드 수는 명령 줄 옵션을 사용하여 지정할 수 있습니다. Libevent는 저수준 네트워크 I/O를 처리하는 데 사용됩니다.
명령 줄 옵션은 다음과 같습니다.
$ src/shrpx -h
사용법 : shrpx [-dh] [-s | -Client | -p] [-b <호스트, 포트>]
[-f <host, port>] [-n <cores>] [-c <num>] [-l <level>]
[옵션 ...] [<private_key> <cert>]
SPDY/HTTPS의 역 프록시.
위치 논쟁 :
<Private_key> 서버의 개인 키로 경로를 설정하십시오. 필수의
-p 또는 --client가 지정되지 않는 한.
<ERT> 서버의 인증서 경로를 설정합니다. 필수의
-p 또는 --client가 지정되지 않는 한.
옵션 :
사이:
-B, -Backend = <호스트, 포트>
호스트 및 포트를 설정하십시오.
기본값 : '127.0.0.1,80'
-f, -frontend = <호스트, 포트>
프론트 엔드 호스트 및 포트를 설정하십시오.
기본값 : '0.0.0.0,3000'
-Backlog = <mum> 백 로그 크기를 들으십시오.
기본값 : 256
-Backend-IPV4 백엔드 호스트 이름을 IPv4 주소로 해결합니다
오직.
-Backend-IPV6 백엔드 호스트 이름을 IPv6 주소로 해결합니다
오직.
성능:
-n, -workers = <cores>
작업자 스레드 수를 설정하십시오.
기본값 : 1
--read-rate = <rate> 프론트 엔드에서 최대 평균 읽기 속도를 설정합니다
연결. 이 옵션으로 0을 설정합니다
읽기 속도는 무제한입니다.
기본값 : 1048576
--read-burst = <size>
프론트 엔드에서 최대 읽기 버스트 크기를 설정하십시오
연결. 이 옵션으로 0을 설정합니다
버스트 크기는 무제한입니다.
기본값 : 4194304
-write-rate = <rate>
프론트 엔드에서 최대 평균 쓰기 속도를 설정하십시오
연결. 이 옵션으로 0을 설정합니다
쓰기 속도는 무제한입니다.
기본값 : 0
-write-burst = <size>
프론트 엔드에서 최대 쓰기 버스트 크기를 설정하십시오
연결. 이 옵션으로 0을 설정합니다
쓰기 버스트 크기는 무제한입니다.
기본값 : 0
시간 초과 :
-frontend-spdy-read-timeout = <ec>
SPDY FrontEnd의 읽기 시간 초과를 지정하십시오
연결. 기본값 : 180
-frontend-read-timeout = <cec>
비 Spdy frontend에 대한 읽기 시간 초과를 지정하십시오
연결. 기본값 : 180
-Frontend-Write-Timeout = <cec>
SPDY와 모두에 대한 쓰기 시간 초과를 지정하십시오
비 스피드 프론트 엔드.
연결. 기본값 : 60
-Backend-Read-Timeout = <cec>
백엔드 연결에 대한 읽기 시간 초과를 지정하십시오.
기본값 : 900
-Backend-Write-Timeout = <cec>
백엔드에 대한 쓰기 시간 초과를 지정하십시오
연결. 기본값 : 60
-Backend-Keep-Alive Timeout = <cec>
백엔드에 대한 유지 시간 초과를 지정하십시오
연결. 기본값 : 60
-Backend-http-proxy-uri = <uri>
형식으로 프록시 URI를 지정하십시오
http : // [<user> : <pass>@] <proxy> : <port>. 만약에
프록시에는 인증이 필요합니다
<사용자> 및 <ass>. 그들은 있어야합니다
올바르게 인코딩. 이 프록시가 사용됩니다
백엔드 연결이 spdy 일 때. 첫 번째,
프록시에 연결 요청을하십시오
대신 백엔드에 연결됩니다
shrpx. 터널을 형성합니다. 그 후, shrpx
SSL/TLS 핸드 셰이크를 수행합니다
터널을 통해 하류. 타임 아웃
연결 및 연결 요청을 할 때
-Backend-Read-Timeout으로 지정할 수 있습니다
및-백 커드-씨트 타임 아웃 옵션.
SSL/TLS :
-사이퍼 = <Suite> 허용 암호 목록 세트. 의 형식
문자열은 OpenSSL 암호 (1)에 설명되어 있습니다.
이 옵션을 사용하는 경우-honor-cipher-order
암시 적으로 활성화됩니다.
-Honor-Cipher-Lorder
서버 암호 순서를 명예 섭취하고
짐승 공격을 완화하는 능력.
-k, -insecure -p 또는 -client와 함께 사용할 때는 확인하지 마십시오.
백엔드 서버의 인증서.
--cacert = <path> -p 또는 -client와 함께 사용하면 경로를 설정하십시오.
신뢰할 수있는 CA 인증서 파일.
파일은 PEM 형식이어야합니다. 할 수 있습니다
여러 인증서를 포함합니다. 만약
링크 된 OpenSSL은로드 시스템으로 구성됩니다
광범위한 인증서에는로드됩니다
이 옵션에 관계없이 시작시.
-private-key-passwd-file = <filepath>
에 대한 비밀번호가 포함 된 파일로가는 경로
서버의 개인 키. 아무것도 주어지지 않는다면
개인 키는 암호로 보호됩니다
대화식으로 요청하십시오.
--subcert = <kyypath> : <certpath>
추가 인증서 및 개인을 지정하십시오
키 파일. SHRPX는 인증서를 선택합니다
클라이언트로 표시된 호스트 이름을 기반으로합니다
TLS SNI 확장을 사용합니다. 이 옵션이 될 수 있습니다
여러 번 사용되었습니다.
-Backend-tls-sni-field = <host>
TLS SNI의 내용을 명시 적으로 설정하십시오
확대. 이것은 백엔드로 기본값이됩니다
호스트 이름.
-dh-param-file = <path>
DH 매개 변수를 포함하는 파일로가는 경로
PEM 형식. 이 옵션이 없으면 Dhe Cipher
스위트를 사용할 수 없습니다.
-Verify-Client는 클라이언트 인증서를 요구하고 확인합니다.
-Verify-Client-Cacert = <path>
CA 인증서가 포함 된 파일 경로
클라이언트 인증서를 확인합니다.
파일은 PEM 형식이어야합니다. 할 수 있습니다
여러 인증서를 포함합니다.
--client-private-key-file = <path>
클라이언트 개인이 포함 된 파일 경로
백엔드 클라이언트 인증에 사용되는 키.
-Client-Cert-File = <Path>
클라이언트가 포함 된 파일로가는 길
백엔드 클라이언트에서 사용되는 인증서
입증.
--tls-proto-list = <list>
Comma Dilimited SSL/TLS 프로토콜 목록
활성화됩니다.
다음 프로토콜을 사용할 수 있습니다.
TLSV1.2, TLSV1.1, TLSV1.0, SSLV3
일치하는 이름은 경우에 민감하지 않습니다
방법.
매개 변수는 단일로 구분해야합니다
쉼표 전용과 흰색 공간이 처리됩니다
프로토콜 문자열의 일부로.
기본값 : TLSV1.2, TLSV1.1, TLSV1.0
spdy :
-c, -pdy-max-concurrent-streams = <num>
동시의 최대 수를 설정하십시오
하나의 spdy 세션에서 스트림.
기본값 : 100
-frontend-spdy-window-bits = <n>
스트림 당 초기 창 크기를 설정합니다
2 ** <n>에 대한 spdy frontend 연결.
기본값 : 16
-Frontend-spdy-connection-window-bits = <n>
SPDY의 연결 당 창 크기를 설정합니다
2 ** <n>에 대한 프론트 엔드 연결.
기본값 : 16
-Frontend-spdy-no-tls
Frontend SPDY에서 SSL/TLS를 비활성화하십시오
사이. SPDY 프로토콜을 지정해야합니다
-Frontend-spdy-proto 사용. 이 옵션
또한 프론트 엔드 http/1.1을 비활성화합니다.
-프론트 스피드 프로토
Frontend에 사용 된 SPDY 프로토콜을 지정하십시오
연결 -Frontend-spdy-no-tls 인 경우 연결됩니다
사용된. 기본값 : SPDY/3.1
-Backend-Spdy-Window-Bits = <n>
스트림 당 초기 창 크기를 설정합니다
2 ** <n>에 대한 spdy backend 연결.
기본값 : 16
-Backend-spdy-connection-window-bits = <n>
SPDY의 연결 당 창 크기를 설정합니다
2 ** <n>에 대한 백엔드 연결.
기본값 : 16
-Backend-spdy-no-tls
백엔드 SPDY 연결에서 SSL/TLS를 비활성화하십시오.
SPDY 프로토콜을 사용하여 지정해야합니다
-Backend-Spdy-Proto
-Backend-Spdy-Proto
백엔드에 사용 된 SPDY 프로토콜을 지정하십시오
연결 -Backend-spdy-no-tls가 사용됩니다.
기본값 : SPDY/3.1
방법:
-s, -spdy-proxy를 활성화하여 안전한 SPDY 프록시 모드를 활성화합니다.
-Spdy-Bridge는 Spdy의 백엔드와 통신합니다. 따라서
들어오는 SPDY/HTTPS 연결은입니다
SPDY 연결로 변환하고 전환했습니다
백엔드. -Backend-HTTP-Proxy-uri를 참조하십시오
프록시 뒤에 있고 원하는 경우 옵션
외부 SPDY 프록시에 연결합니다.
-Client SPDY/HTTPS 연결을 수락하는 대신
HTTP 연결을 수락하고 통신하십시오
SPDY의 백엔드 서버. shrpx를 사용합니다
전방 프록시, 대신 -p 옵션을 사용하십시오.
-p, -Client-Proxy Like -Client 옵션이지만 또한 필요합니다
프론트 엔드의 요청 경로는이어야합니다
AS로 사용하기에 적합한 절대 URI
전진 프록시.
벌채 반출:
-l,-로그 레벨 = <level>
로그 출력의 심각도 수준을 설정하십시오.
정보, 경고, 오류 및 치명적.
기본값 : 경고
-AccessLog stderr에 간단한 액세스 글로그를 인쇄합니다.
-syslog syslog로 로그 메시지를 보냅니다.
--syslog-facility = <casility>
Syslog 시설을 설정하십시오.
기본값 : 데몬
기타 :
--add-x-forwarded-for
x-forwarded header 필드를 추가하십시오
다운 스트림 요청.
-NO-VIA는 비어 헤더 필드에 추가되지 않습니다. 비아
헤더 필드가 수신되고 남겨집니다
변경되지 않았습니다.
-d, - -데몬은 배경에서 실행됩니다. -D가 사용되면
현재 작업 디렉토리는 '/'로 변경됩니다.
-pid-file = <path>이 프로그램의 PID를 저장하기위한 경로를 설정하십시오.
--user = <user>이 프로그램을 사용자로 실행하십시오. 이 옵션은입니다
루트 권한을 떨어 뜨리는 데 사용됩니다.
--conf = <path> 경로에서 구성을로드합니다.
기본값 : /etc/shrpx/shrpx.conf
-v, -version print 버전 및 종료.
-h, -help이 도움말과 종료.
궁금한 분들에게 shrpx "SPDY/HTTPS에서 HTTP 리버스 프록시"의 약어입니다.
-s , --spdy-bridge , -p 및 --client 옵션이 없으면 shrpx 백엔드 서버의 리버스 프록시로 작동합니다.
클라이언트 <-(spdy, https)-> shrpx <-(http)-> 웹 서버
[리버스 프록시]
-s 옵션을 사용하면 안전한 SPDY 프록시로 작동합니다.
클라이언트 <-(spdy, https)-> shrpx <-(http)-> proxy
[SPDY Proxy] (예 : Squid)
위의 Client 는 SHRPX를 안전한 SPDY 프록시로 사용하도록 구성되어야합니다.
이 글을 쓰는 시점에서 Chrome은 Secure SPDY Proxy를 지원하는 유일한 브라우저입니다. CHROME를 안전한 SPDY 프록시를 사용하도록 구성하는 한 가지 방법은 다음과 같은 proxy.pac 스크립트를 작성하는 것입니다.
함수 findproxyforurl (url, host) {
"https serverAddr : port"를 반환합니다.
}
SERVERADDR 및 PORT 는 호스트 이름/주소이며 기계의 포트 SHRPX가 실행 중입니다. Chrome은 Secect Spdy Proxy에 대한 유효한 인증서가 필요합니다.
그런 다음 다음과 같은 논쟁으로 Chrome을 실행하십시오.
$ Google-CHROME -Proxy-pac-url = 파일 : //path/to/proxy.pac-use-npn
메모
이 글을 쓰는 시점에서 Chrome 24는 프록시의 최대 동시 연결을 32로 제한합니다. 그리고 Chrome에서 소켓 풀 처리의 제한으로 인해 SPDY 프록시가 사용되고 많은 SPDY 세션이 설정되면 신속하게 채워집니다. 한계에 도달하면 기존 연결이 시간이 초과 될 때까지 새로운 연결이 차단됩니다. (Chrome Issue 92244 참조). 해결 방법은 최대 연결 수를 높게 만드는 것입니다 (예 : 99). 이를 위해서는 소위 정책 설정을 변경해야합니다. 사용하는 플랫폼에서 정책 설정을 변경하는 방법에 대한 자세한 내용은 정책 템플릿을 참조하십시오. 우리가 찾고있는 정책 이름은 MaxConnectionsperProxy입니다. 예를 들어 Linux를 사용하는 경우 Linux Quick Start에 설명 된 명령을 따르고 /etc/opt/chrome/policies/managed/test_policy.json 파일을 다음 내용으로 작성하고 Chrome을 다시 시작하십시오.
{
"MaxConnectionsperProxy": 99
}
--spdy-bridge 사용하면 SPDY/HTTPS 연결을 허용하고 SPDY의 백엔드와 통신합니다.
클라이언트 <-(spdy, https)-> shrpx <-(spdy)-> 웹 또는 SPDY 프록시 등
[SPDY BRIDGE] (예 : SHRPX -S)
-p 옵션을 사용하면 Forward Proxy로 작동하며 백엔드가 Spdy Proxy를 안전하게 기대합니다.
클라이언트 <-(http)-> shrpx <-(spdy)-> 보안 SPDY 프록시
[정방향 프록시] (예 : SHRPX -S 또는 Node -SpdyProxy)
Client 는 SHRPX를 Forward Proxy로 사용하도록 구성되어야합니다.
이 구성에서 보안 SPDY 프록시를 지원하지 않는 클라이언트는 shrpx 통해 안전한 SPDY 프록시를 사용할 수 있습니다. shrpx 동일한 상자 또는 클라이언트와 동일한 네트워크에 넣으면이 구성은 해당 클라이언트에게 안전한 SPDY 프록시의 이점을 가져올 수 있습니다. 서버 당 최대 연결 수는 여전히 프록시 연결에 적용되므로 성능 게인은 분명하지 않습니다. 예를 들어, 서버 당 최대 연결 수가 6 인 경우 6 개의 요청을 프록시로 전송 한 후 클라이언트는 추가 요청을 차단하여 SPDY 연결에서 얻을 수있는 성능이 사라집니다. 이러한 값을 조정할 수있는 클라이언트 (예 : Firefox의 network.http.max-connections-per-server .
--client 옵션을 사용하면 리버스 프록시로 작동하며 백엔드가 SPDY 지원 웹 서버라고 기대합니다.
클라이언트 <-(http)-> shrpx <-(spdy)-> 웹 서버
[리버스 프록시]
SPDY의 백엔드와 대화하는 작동 모드의 경우 HTTP 프록시를 통해 백엔드 연결을 터널로 연결할 수 있습니다. 프록시는 --backend-http-proxy-uri 옵션을 사용하여 지정됩니다. 다음 그림은 http 프록시를 통해 외부 SPDY 프록시와 대화하기 위해 --spdy-bridge 및 --backend-http-proxy-uri 옵션의 예를 보여줍니다.
클라이언트 <-(spdy, https)-> shrpx <-(spdy)-
[Spdy Bridge]
-================== ---> SPDY 프록시
(HTTP 프록시 터널) (예 : SHRPX -S)
예제 디렉토리에는 C의 간단한 SPDY 클라이언트 구현이 포함되어 있습니다.
라이브러리에는 Python Wapper python-spdylay 함께 제공됩니다. python 디렉토리를 참조하십시오.