นี่คือการใช้งานการทดลองใช้โปรโตคอล SPDY ของ Google ใน C.
ไลบรารีนี้ให้การใช้งานเลเยอร์เฟรม SPDY เวอร์ชัน 2, 3 และ 3.1 มันไม่ได้ดำเนินการ I/O ใด ๆ เมื่อไลบรารีต้องการพวกเขาจะเรียกฟังก์ชั่นการโทรกลับโดยแอปพลิเคชัน นอกจากนี้ยังไม่รวมกลไกการสำรวจเหตุการณ์ใด ๆ ดังนั้นแอปพลิเคชันสามารถเลือกวิธีการจัดการเหตุการณ์ได้อย่างอิสระ รหัสห้องสมุดนี้ไม่ได้ขึ้นอยู่กับไลบรารี SSL ใด ๆ (ยกเว้นตัวอย่างโปรแกรมที่ขึ้นอยู่กับ OpenSSL 1.0.1 หรือใหม่กว่า)
โครงการนี้ยังพัฒนาไคลเอนต์ SPDY เซิร์ฟเวอร์และพร็อกซีที่ด้านบนของไลบรารี SPDYLAY ดูส่วนโปรแกรมไคลเอนต์ SPDY และเซิร์ฟเวอร์
ส่วนใหญ่ของฟังก์ชั่น SPDY/2, SPDY/3 และ SPDY/3.1 ในทั้งสองเวอร์ชันการสนับสนุนโดยตรงของ Server-Push ยังไม่พร้อมใช้งาน แอปพลิเคชันสามารถทำให้เซิร์ฟเวอร์ชดเชยได้โดยใช้ API แบบดั้งเดิม
ตามที่อธิบายไว้ด้านล่างเราสามารถสร้างไคลเอนต์ SPDY และเซิร์ฟเวอร์ด้วย SPDYLAY API ปัจจุบัน
จำเป็นต้องมีแพ็คเกจต่อไปนี้เพื่อสร้างห้องสมุด:
ในการสร้างและเรียกใช้โปรแกรมทดสอบหน่วยจำเป็นต้องมีแพ็คเกจต่อไปนี้:
ในการสร้างและเรียกใช้โปรแกรมตัวอย่างจำเป็นต้องมีแพ็คเกจต่อไปนี้:
ในการเปิดใช้งานตัวเลือก -a (รับสินทรัพย์ที่เชื่อมโยงจากทรัพยากรที่ดาวน์โหลด) ใน spdycat (หนึ่งในโปรแกรมตัวอย่าง) จำเป็นต้องมีแพ็คเกจต่อไปนี้:
ในการสร้าง spdy/https เป็น http reverse proxy shrpx (หนึ่งในโปรแกรมตัวอย่าง) จำเป็นต้องมีแพ็คเกจต่อไปนี้:
หากคุณใช้ Ubuntu 12.04 คุณต้องติดตั้งแพ็คเกจต่อไปนี้:
$ apt-get ติดตั้ง autoconf autotools 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
ในการสร้างเอกสาร, Run:
$ ทำ html
เอกสารจะถูกสร้างขึ้นภายใต้ doc/manual/html/
เอกสารที่สร้างขึ้นจะไม่ถูกติดตั้งด้วย make install
ในส่วนนี้เราจะอธิบายวิธีการสร้าง Android Binary โดยใช้ Android NDK Cross Compiler บน Debian Linux
เรานำเสนอสคริปต์ android-config และ android-make เพื่อให้การสร้างง่ายขึ้น ในการทำให้สคริปต์เหล่านี้ทำงานได้ต้องติดตั้ง NDK Toolchain ด้วยวิธีต่อไปนี้ ก่อนอื่นให้แนะนำตัวแปรสภาพแวดล้อม ANDROID_HOME เราจำเป็นต้องติดตั้ง Toolchain ภายใต้ $ANDROID_HOME/toolchain ผู้ใช้สามารถเลือกเส้นทางสำหรับ ANDROID_HOME ได้อย่างอิสระ ตัวอย่างเช่นในการติดตั้ง Toolchain ภายใต้ $ANDROID_HOME/toolchain ให้ทำสิ่งนี้ในไดเรกทอรีที่ NDK เปิดออก:
$ build/tools/make-standalone-toolchain.sh-platform = Android-9-Install-Dir = $ Android_home/Toolchain
ระดับแพลตฟอร์มไม่สำคัญที่นี่เพราะเราไม่ได้ใช้ Android เฉพาะ C/C ++ API
ห้องสมุดที่ขึ้นอยู่กับเช่น OpenSSL และ LIBEVENT ควรสร้างด้วยเครื่องมือและติดตั้งภายใต้ $ANDROID_HOME/usr/local เราขอแนะนำให้สร้างไลบรารีเหล่านี้เป็นไลบรารีแบบคงที่เพื่อให้การปรับใช้ง่ายขึ้น การสนับสนุน LIBXML2 ถูกปิดใช้งานในขณะนี้
เราใช้ Zlib ซึ่งมาพร้อมกับ Android NDK ดังนั้นเราจึงไม่ต้องสร้างมันด้วยตัวเอง
ก่อนที่จะเรียกใช้ android-config และ android-make ตัวแปรสภาพแวดล้อม ANDOIRD_HOME จะต้องตั้งค่าให้ชี้ไปที่เส้นทางที่ถูกต้อง
หลังจาก android-config ให้ใช้ android-make เพื่อรวบรวมแหล่งที่มา android-make เป็นเพียงเส้นทางที่จะข้ามคอมไพเลอร์ใน PATH และเรียกใช้ทำ ดังนั้นหากคุณรวม Path to Corss Compiler ด้วยตัวเองคุณสามารถเรียกใช้ Make Make เพื่อสร้าง spdylay และเครื่องมือตามปกติ
การอ้างอิง API สาธารณะมีให้บริการทางออนไลน์ เยี่ยมชม http://tatsuhiro-t.github.io/spdylay/ API สาธารณะทั้งหมดอยู่ใน spdylay/spdylay.h ฟังก์ชั่น API สาธารณะทั้งหมดรวมถึงฟังก์ชั่นการเรียกกลับ typedefs ได้รับการบันทึกไว้
ไดเรกทอรี SRC มีการใช้งานไคลเอนต์ SPDY และเซิร์ฟเวอร์โดยใช้ไลบรารี SPDYLAY โปรแกรมเหล่านี้มีจุดประสงค์เพื่อให้แน่ใจว่า SPDYLAY API นั้นสามารถใช้งานได้อย่างเป็นทางการสำหรับการใช้งานจริงและเพื่อจุดประสงค์ในการดีบัก โปรดทราบว่าจำเป็นต้องมีการสนับสนุน NPN เพื่อสร้างและเรียกใช้โปรแกรมเหล่านี้ ในช่วงเวลาของการเขียนนี้ OpenSSL 1.0.1 รองรับ NPN
ไคลเอนต์ SPDY เรียกว่า spdycat มันเป็นตัวดาวน์โหลดที่เรียบง่ายเช่น wget/curl มันเชื่อมต่อกับเซิร์ฟเวอร์ SPDY และรับทรัพยากรที่ได้รับในบรรทัดคำสั่ง:
$ src/spdycat -h
การใช้งาน: spdycat [-oansv23] [-t <วินาที>] [-w <window_bits>] [---cert = <ert>]
[-key = <key>] [-no-tls] [-d <file>] [-m <n>] [-p <proxy_host>]
[-P <proxy_port>] <uri> ...
ตัวเลือก:
-v, -Verbose Print Debug ข้อมูลเช่นการรับ/
การส่งเฟรมและคู่ชื่อ/ค่า
-n,-null-out ทิ้งข้อมูลที่ดาวน์โหลด
-O,-remote-name บันทึกข้อมูลดาวน์โหลดในไดเรกทอรีปัจจุบัน
ชื่อไฟล์นั้นได้มาจาก URI ถ้า uri
ลงท้ายด้วย '/', 'index.html' ถูกใช้เป็น
ชื่อไฟล์ ยังไม่ได้ดำเนินการ
-2, -spdy2 ใช้ spdy/2 เท่านั้น
-3, --SPDY3 ใช้ SPDY/3 เท่านั้น
-SPDY3-1 ใช้ SPDY/3.1 เท่านั้น
-t, -timeout = <n> หมดเวลาแต่ละคำขอหลังจาก <n> วินาที
-w,--หน้าต่าง-บิต = <n>
ตั้งค่าขนาดหน้าต่างเริ่มต้นเป็น 2 ** <n>
-a,-get-assets ดาวน์โหลดสินทรัพย์เช่น Stylesheets, Images
และไฟล์สคริปต์ที่เชื่อมโยงจากไฟล์ที่ดาวน์โหลด
ทรัพยากร. ลิงก์เฉพาะที่มีต้นกำเนิดคือ
เช่นเดียวกับทรัพยากรการเชื่อมโยงจะเป็น
ดาวน์โหลด
-S, -สถิติการพิมพ์
-H, -หัวหน้าเพิ่มส่วนหัวลงในคำขอ
--Cert = <ert> ใช้ไฟล์ใบรับรองไคลเอนต์ที่ระบุ
ไฟล์ต้องอยู่ในรูปแบบ PEM
-key = <key> ใช้ไฟล์คีย์ส่วนตัวไคลเอนต์ ไฟล์
ต้องอยู่ในรูปแบบ PEM
-NO-TLS ปิดการใช้งาน SSL/TLS ใช้ -2, -3 หรือ -SPDY3-1 ถึง
ระบุรุ่นโปรโตคอล SPDY ที่จะใช้
-d, -data = <file> โพสต์ไฟล์ไปยังเซิร์ฟเวอร์ ถ้า - ได้รับข้อมูล
จะอ่านจาก Stdin
-m, -multiply = <n> ร้องขอแต่ละ URI <n> ครั้ง โดยค่าเริ่มต้นเดียวกัน
URI ไม่ได้รับการร้องขอสองครั้ง ตัวเลือกนี้
ปิดใช้งานด้วย
-p, -proxy = <mot> ใช้โฮสต์นี้เป็นพร็อกซี 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, escomplem_stream_id = 0, pri = 3)
: โฮสต์: www.google.com
: วิธี: รับ
:เส้นทาง: /
: โครงการ: https
: เวอร์ชัน: http/1.1
ยอมรับ: */*
ยอมรับการเข้ารหัส: gzip, deflate
ผู้ใช้ตัวแทน: spdylay/1.2.0-dev
[0.080] เฟรม Recv syn_reply <เวอร์ชัน = 3, แฟล็ก = 0, ความยาว = 619>
(stream_id = 1)
: สถานะ: 302 พบ
: เวอร์ชัน: http/1.1
Protocol ทางเลือก: 443: QUIC
แคชควบคุม: ส่วนตัว
ความยาวเนื้อหา: 262
ประเภทเนื้อหา: ข้อความ/html; charset = utf-8
วันที่: อังคาร, 19 พ.ย. 2013 13:47:18 GMT
สถานที่: https://www.google.co.jp/
เซิร์ฟเวอร์: GWS
X-frame-options: Sameorigin
การป้องกัน X-XSS: 1; โหมด = บล็อก
[0.080] เฟรมข้อมูล RECV (Stream_id = 1, Flags = 1, ความยาว = 262)
[0.080] ส่งเฟรม goaway <เวอร์ชัน = 3, flags = 0, ความยาว = 8>
(last_good_stream_id = 0)
SPDY Server เรียกว่า spdyd และให้บริการไฟล์คงที่ มันคือการเชื่อมต่อแบบเกลียวเดี่ยวและมัลติเพล็กซ์โดยใช้ซ็อกเก็ตที่ไม่ปิดกั้น ไฟล์คงที่ถูกอ่านโดยใช้การปิดกั้นการโทร I/O, read(2) มันพูด spdy/2 และ spdy/3:
$ src/spdyd -htdocs =/ของคุณ/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, escomplem_stream_id = 0, pri = 3)
: โฮสต์: localhost: 3000
: วิธี: รับ
: เส้นทาง: /readme
: โครงการ: https
: เวอร์ชัน: http/1.1
ยอมรับ: */*
ยอมรับการเข้ารหัส: gzip, deflate
ผู้ใช้ตัวแทน: spdylay/1.2.0-dev
[id = 1] [1.297] ส่งเฟรม syn_reply <เวอร์ชัน = 3, แฟล็ก = 0, ความยาว = 116>
(stream_id = 1)
: สถานะ: 200 ตกลง
: เวอร์ชัน: http/1.1
Cache-Control: Max-age = 3600
ความยาวเนื้อหา: 66
วันที่: อังคาร, 19 พ.ย. 2013 14:35:24 GMT
ล่าสุดแก้ไข: อังคาร, 17 ม.ค. 2012 15:39:01 GMT
เซิร์ฟเวอร์: spdyd spdylay/1.2.0-dev
[id = 1] [1.297] ส่งเฟรมข้อมูล (stream_id = 1, แฟล็ก = 0, ความยาว = 66)
[id = 1] [1.297] ส่งเฟรมข้อมูล (stream_id = 1, แฟล็ก = 1, ความยาว = 0)
[id = 1] [1.297] Stream_id = 1 ปิด
[id = 1] [1.297] เฟรม Recv Goaway <เวอร์ชัน = 3, แฟล็ก = 0, ความยาว = 8>
(last_good_stream_id = 0)
[id = 1] [1.297] ปิด
ปัจจุบัน spdyd ต้องการ epoll หรือ kqueue
สำหรับผู้ใช้ SHRPX ที่ใช้ SHRPX เป็นพร็อกซี SPDY: โปรดพิจารณาย้ายไปยัง NGHTTPX ที่พัฒนาขึ้นที่โครงการ NGHTTP2 NGHTTPX รองรับพร็อกซี SPDY ด้วย
shrpx เป็นพร็อกซีย้อนกลับแบบมัลติเธรดสำหรับ SPDY/HTTPS มันแปลงการรับส่งข้อมูล SPDY/HTTPS เป็น HTTP ธรรมดา มันได้รับการพัฒนาในขั้นต้นเป็นพร็อกซีย้อนกลับ แต่ตอนนี้มันมีโหมดการทำงานอื่น ๆ เช่นพร็อกซีไปข้างหน้าส่วนหน้า ตัวอย่างเช่นด้วยตัวเลือก --spdy-proxy ( -s ในชวเลข) มันสามารถใช้เป็นพร็อกซี SPDY ที่ปลอดภัยด้วยพร็อกซี (เช่นปลาหมึก) ในแบ็กเอนด์ ด้วยตัวเลือก --cliet-proxy ( -p ) มันทำหน้าที่เหมือนพร็อกซีไปข้างหน้าตามลำดับ แต่คาดว่าจะมีพร็อกซี SPDY ที่ปลอดภัยในแบ็กเอนด์ ดังนั้นจึงกลายเป็นอะแดปเตอร์เพื่อรักษาความปลอดภัยพร็อกซี SPDY สำหรับลูกค้าซึ่งไม่รองรับพร็อกซี SPDY ที่ปลอดภัย โหมดการทำงานที่โดดเด่นอีกประการหนึ่งคือ --spdy-relay ซึ่งเพิ่งถ่ายทอดการรับส่งข้อมูล SPDY/HTTPS ไปยังแบ็กเอนด์ใน SPDY ตารางต่อไปนี้สรุปโหมดการทำงาน
| ตัวเลือกโหมด | ส่วนหน้า | แบ็กเอนด์ | บันทึก |
|---|---|---|---|
| ค่าเริ่มต้น | 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 <โฮสต์, พอร์ต>] [-n <Cores>] [-c <num>] [-l <level>]
[ตัวเลือก ... ] [<vial_key> <serves>]
พร็อกซีย้อนกลับสำหรับ SPDY/HTTPS
ข้อโต้แย้งตำแหน่ง:
<private_key> ตั้งค่าพา ธ ไปยังคีย์ส่วนตัวของเซิร์ฟเวอร์ ที่จำเป็น
เว้นแต่จะมีการระบุ -p หรือ -ลูกค้า
<ert> ตั้งค่าพา ธ ไปยังใบรับรองของเซิร์ฟเวอร์ ที่จำเป็น
เว้นแต่จะมีการระบุ -p หรือ -ลูกค้า
ตัวเลือก:
การเชื่อมต่อ:
-b, -backend = <โฮสต์, พอร์ต>
ตั้งแบ็กเอนด์โฮสต์และพอร์ต
ค่าเริ่มต้น: '127.0.0.1,80'
-f, -frontend = <โฮสต์, พอร์ต>
ตั้งค่าโฮสต์ Frontend และพอร์ต
ค่าเริ่มต้น: '0.0.0.0,3000'
-backlog = <num> ตั้งค่าการฟังขนาด backlog
ค่าเริ่มต้น: 256
-Backend-IPv4 แก้ไขชื่อโฮสต์แบ็กเอนด์ไปยังที่อยู่ IPv4
เท่านั้น.
-Backend-IPv6 แก้ไขชื่อโฮสต์แบ็กเอนด์ไปยังที่อยู่ IPv6
เท่านั้น.
ผลงาน:
-n, -workers = <ores>
ตั้งค่าจำนวนเธรดคนงาน
ค่าเริ่มต้น: 1
-read-rate = <ated> ตั้งอัตราการอ่านเฉลี่ยสูงสุดในส่วนหน้า
การเชื่อมต่อ. การตั้งค่า 0 ถึงตัวเลือกนี้หมายถึง
อัตราการอ่านไม่ จำกัด
ค่าเริ่มต้น: 1048576
-read-burst = <size>
ตั้งค่าการอ่านขนาดสูงสุดในส่วนหน้า
การเชื่อมต่อ. การตั้งค่า 0 ถึงตัวเลือกนี้หมายถึง
อ่านขนาด Burst ไม่ จำกัด
ค่าเริ่มต้น: 4194304
--write-rate = <ated>
ตั้งค่าอัตราการเขียนเฉลี่ยสูงสุดในส่วนหน้า
การเชื่อมต่อ. การตั้งค่า 0 ถึงตัวเลือกนี้หมายถึง
อัตราการเขียนไม่ จำกัด
ค่าเริ่มต้น: 0
-write-burst = <size>
ตั้งค่าการเขียนขนาดสูงสุดบนส่วนหน้า
การเชื่อมต่อ. การตั้งค่า 0 ถึงตัวเลือกนี้หมายถึง
การเขียนขนาดระเบิดไม่ จำกัด
ค่าเริ่มต้น: 0
หมดเวลา:
-frontend-spdy-read-timeout = <ect>
ระบุการอ่านหมดเวลาสำหรับ Frontend SPDY
การเชื่อมต่อ. ค่าเริ่มต้น: 180
-frontend-read-timeout = <ect>
ระบุการหมดเวลาอ่านสำหรับส่วนหน้าแบบไม่ล้นหลาม
การเชื่อมต่อ. ค่าเริ่มต้น: 180
-Frontend-Write-Timeout = <ect>
ระบุการหมดเวลาเขียนสำหรับทั้ง SPDY และ
ส่วนหน้าแบบไม่ล้นเหลือ
การเชื่อมต่อ. ค่าเริ่มต้น: 60
-Backend-Read-Timeout = <ec
ระบุการหมดเวลาอ่านสำหรับการเชื่อมต่อแบ็กเอนด์
ค่าเริ่มต้น: 900
-Backend-write-timeout = <ect>
ระบุการหมดเวลาเขียนสำหรับแบ็กเอนด์
การเชื่อมต่อ. ค่าเริ่มต้น: 60
-Backend-Keep-Alive-Timeout = <ect>
ระบุการหมดเวลาแบบเก็บรักษาสำหรับแบ็กเอนด์
การเชื่อมต่อ. ค่าเริ่มต้น: 60
-Backend-http-proxy-uri = <uri>
ระบุพร็อกซี URI ในรูปแบบ
http: // [<ผู้ใช้>: <pass>@] <proxy>: <port> ถ้า
พร็อกซีต้องการการรับรองความถูกต้องระบุ
<ผู้ใช้> และ <pass> โปรดทราบว่าพวกเขาจะต้องเป็น
ร้อยละที่เข้ารหัสอย่างถูกต้อง พร็อกซีนี้ใช้
เมื่อการเชื่อมต่อแบ็กเอนด์เป็น spdy อันดับแรก,
ส่งคำขอเชื่อมต่อกับพร็อกซีและ
มันเชื่อมต่อกับแบ็กเอนด์ในนามของ
shrpx รูปแบบนี้ หลังจากนั้น shrpx
ดำเนินการจับมือกัน SSL/TLS ด้วย
ปลายน้ำผ่านอุโมงค์ หมดเวลา
เมื่อเชื่อมต่อและทำคำขอเชื่อมต่อ
สามารถระบุได้โดย-แบ็ก-แบ็ก-อ่านเวลา
และ-ตัวเลือกการตอบรับย้อนกลับ
SSL/TLS:
-ciphers = <suite> ตั้งค่ารายการรหัสที่อนุญาต รูปแบบของไฟล์
สตริงอธิบายไว้ใน openssl ciphers (1)
หากใช้ตัวเลือกนี้--Honor-cipher-order
เปิดใช้งานโดยปริยาย
-คำสั่งซื้อ
Honor Server Cipher Order ให้
ความสามารถในการลดการโจมตีของสัตว์ร้าย
-k, -ไม่ปลอดภัยเมื่อใช้กับ -p หรือ -ลูกค้าไม่ได้ตรวจสอบ
ใบรับรองเซิร์ฟเวอร์แบ็กเอนด์
-CACERT = <Path> เมื่อใช้กับ -P หรือ -ลูกค้าตั้งเส้นทางไปที่
ไฟล์ใบรับรอง CA ที่เชื่อถือได้
ไฟล์ต้องอยู่ในรูปแบบ PEM มันสามารถ
มีใบรับรองหลายใบ ถ้า
OpenSSL ที่เชื่อมโยงได้รับการกำหนดค่าเป็นระบบโหลด
ใบรับรองกว้างพวกเขาจะถูกโหลด
เมื่อเริ่มต้นโดยไม่คำนึงถึงตัวเลือกนี้
-PRIVATE-KEY-PASSWD-FILE = <TelePath>
พา ธ ไปยังไฟล์ที่มีรหัสผ่านสำหรับไฟล์
คีย์ส่วนตัวของเซิร์ฟเวอร์ หากไม่มีใครได้รับและ
คีย์ส่วนตัวคือการป้องกันรหัสผ่านมันจะ
ได้รับการร้องขอแบบโต้ตอบ
-SUBCERT = <Seypath>: <CertPath>
ระบุใบรับรองเพิ่มเติมและส่วนตัว
ไฟล์คีย์ SHRPX จะเลือกใบรับรอง
ขึ้นอยู่กับชื่อโฮสต์ที่ระบุโดยลูกค้า
ใช้ส่วนขยาย TLS SNI ตัวเลือกนี้สามารถ
ใช้หลายครั้ง
-Backend-tls-sni-field = <mot>
ตั้งค่าเนื้อหาของ TLS SNI อย่างชัดเจน
ส่วนขยาย. สิ่งนี้จะเริ่มต้นเป็นแบ็กเอนด์
ชื่อโฮสต์
-dh-param-file = <path>
พา ธ ไปยังไฟล์ที่มีพารามิเตอร์ dh ใน
รูปแบบ PEM หากไม่มีตัวเลือกนี้ Dhe Cipher
ห้องสวีทไม่มีให้บริการ
-ความต้องการ-ลูกค้าต้องการและตรวจสอบใบรับรองไคลเอนต์
-Verify-client-cacert = <path>
พา ธ ไปยังไฟล์ที่มีใบรับรอง CA
เพื่อตรวจสอบใบรับรองลูกค้า
ไฟล์ต้องอยู่ในรูปแบบ PEM มันสามารถ
มีใบรับรองหลายใบ
-ลูกค้า
พา ธ ไปยังไฟล์ที่มีไคลเอนต์ส่วนตัว
คีย์ที่ใช้ในการรับรองความถูกต้องของไคลเอนต์แบ็กเอนด์
-client-cert-file = <path>
พา ธ ไปยังไฟล์ที่มีไคลเอนต์
ใบรับรองที่ใช้ในแบ็กเอนด์ไคลเอนต์
การรับรองความถูกต้อง
-tls-proto-list = <list>
รายการคั่นเครื่องหมายจุลภาคของโปรโตคอล SSL/TLS เป็น
เปิดใช้งาน
มีโปรโตคอลต่อไปนี้:
TLSV1.2, TLSV1.1, TLSV1.0, SSLV3
การจับคู่ชื่อจะทำในกรณีที่ไม่ได้รับการตอบสนอง
มารยาท.
พารามิเตอร์จะต้องคั่นด้วยตัวเดียว
เครื่องหมายจุลภาคเท่านั้นและพื้นที่สีขาวใด ๆ ได้รับการปฏิบัติ
เป็นส่วนหนึ่งของสตริงโปรโตคอล
ค่าเริ่มต้น: TLSV1.2, TLSV1.1, TLSV1.0
spdy:
-c,-spdy-max-concurrent-streams = <um>
ตั้งค่าจำนวนสูงสุดของค่าพร้อมกัน
สตรีมในเซสชั่น SPDY หนึ่งครั้ง
ค่าเริ่มต้น: 100
-frontend-spdy-window-bits = <n>
ตั้งค่าขนาดหน้าต่างเริ่มต้นต่อสตรีมของ
การเชื่อมต่อ Frontend SPDY กับ 2 ** <n>
ค่าเริ่มต้น: 16
-frontend-spdy-connection-window-bits = <n>
ตั้งค่าขนาดหน้าต่างต่อการเชื่อมต่อของ spdy
การเชื่อมต่อส่วนหน้ากับ 2 ** <n>
ค่าเริ่มต้น: 16
-Frontend-spdy-no-tls
ปิดการใช้งาน SSL/TLS ใน Frontend SPDY
การเชื่อมต่อ ต้องระบุโปรโตคอล SPDY
ใช้-Frontend-Spdy-Proto ตัวเลือกนี้
ปิดใช้งานส่วนหน้า HTTP/1.1
-Frontend-Spdy-Proto
ระบุโปรโตคอล SPDY ที่ใช้ในส่วนหน้า
การเชื่อมต่อถ้า--frontend-spdy-no-tls คือ
ใช้แล้ว. ค่าเริ่มต้น: spdy/3.1
-Backend-spdy-window-bits = <n>
ตั้งค่าขนาดหน้าต่างเริ่มต้นต่อสตรีมของ
การเชื่อมต่อแบ็กเอนด์ spdy กับ 2 ** <n>
ค่าเริ่มต้น: 16
-Backend-spdy-connection-window-bits = <n>
ตั้งค่าขนาดหน้าต่างต่อการเชื่อมต่อของ spdy
การเชื่อมต่อแบ็กเอนด์กับ 2 ** <n>
ค่าเริ่มต้น: 16
-Backend-spdy-no-tls
ปิดการใช้งาน SSL/TLS ในการเชื่อมต่อ SPDY แบ็กเอนด์
ต้องระบุโปรโตคอล SPDY โดยใช้
-แบ็คก์-สไปสดี้-โปรโต
-แบ็คก์-สไปสดี้-โปรโต
ระบุโปรโตคอล SPDY ที่ใช้ในแบ็กเอนด์
การเชื่อมต่อถ้า-ใช้-Backend-spdy-no-TLS
ค่าเริ่มต้น: spdy/3.1
โหมด:
-S,--Spdy-Proxy เปิดใช้งานโหมดพร็อกซี SPDY ที่ปลอดภัย
-สะพาน-สะพานสื่อสารกับแบ็กเอนด์ใน SPDY ดังนั้น
การเชื่อมต่อ SPDY/HTTPS ที่เข้ามาคือ
แปลงเป็นการเชื่อมต่อ spdy และส่งไปเป็น
แบ็กเอนด์ ดู-Backend-http-proxy-uri
ตัวเลือกหากคุณอยู่เบื้องหลังพร็อกซีและต้องการ
เพื่อเชื่อมต่อกับพร็อกซี SPDY ภายนอก
-ลูกค้าแทนที่จะยอมรับการเชื่อมต่อ SPDY/HTTPS
ยอมรับการเชื่อมต่อ HTTP และสื่อสารกับ
เซิร์ฟเวอร์แบ็กเอนด์ใน SPDY เพื่อใช้ SHRPX เป็น
ตัวเลือกพร็อกซีไปข้างหน้าใช้ -P แทน
-p,-client-proxy like-client ตัวเลือก แต่ก็ต้องใช้
เส้นทางคำขอจากส่วนหน้าต้องเป็น
URI ที่สมบูรณ์แบบเหมาะสำหรับใช้เป็นไฟล์
ส่งต่อพร็อกซี
การบันทึก:
-l,-log-level = <level>
ตั้งค่าระดับความรุนแรงของเอาต์พุตบันทึก
ข้อมูลคำเตือนข้อผิดพลาดและถึงแก่ชีวิต
ค่าเริ่มต้น: คำเตือน
-AccessLog พิมพ์ Simple AccessLog เป็น Stderr
-Syslog ส่งข้อความบันทึกไปยัง syslog
--syslog-facility = <acity>
ตั้งค่าสิ่งอำนวยความสะดวก syslog
ค่าเริ่มต้น: daemon
MISC:
-ADD-X-Forwarded-for
ผนวกฟิลด์ส่วนหัวของ X-Forwarded-for
คำขอดาวน์สตรีม
-ไม่มี-Via ไม่ผนวกเข้ากับฟิลด์ส่วนหัว ถ้าผ่าน
ได้รับฟิลด์ส่วนหัวมันเหลืออยู่
ไม่เปลี่ยนแปลง
-d, -Daemon ทำงานในพื้นหลัง ถ้าใช้ -d
ไดเรกทอรีการทำงานปัจจุบันเปลี่ยนเป็น '/'
--pid-file = <path> Set Path เพื่อบันทึก PID ของโปรแกรมนี้
-user = <user> เรียกใช้โปรแกรมนี้เป็นผู้ใช้ ตัวเลือกนี้คือ
ตั้งใจที่จะใช้ในการวางสิทธิ์ของรูท
--CONF = <Path> โหลดการกำหนดค่าจาก PATH
ค่าเริ่มต้น: /etc/shrpx/shrpx.conf
-v, -เวอร์ชันพิมพ์เวอร์ชั่นและออก
-H, -help พิมพ์ความช่วยเหลือและออกนี้
สำหรับผู้ที่อยากรู้อยากเห็น shrpx เป็นตัวย่อของ "SPDY/HTTPS ถึง HTTP Reverse Proxy"
โดยไม่มีตัวเลือกใด ๆ ของ -s --spdy-bridge , -p และ --client , shrpx ทำงานเป็นพร็อกซีย้อนกลับไปยังเซิร์ฟเวอร์แบ็กเอนด์:
ไคลเอนต์ <-(spdy, https)-> shrpx <-(http)-> เว็บเซิร์ฟเวอร์
[Reverse Proxy]
ด้วยตัวเลือก -s มันทำงานเป็น Secure Spdy Proxy:
ไคลเอนต์ <-(spdy, https)-> shrpx <-(http)-> พร็อกซี
[Spdy Proxy] (เช่น Squid)
Client ในด้านบนจะต้องกำหนดค่าให้ใช้ SHRPX เป็นพร็อกซี SPDY ที่ปลอดภัย
ในช่วงเวลาของการเขียนนี้ Chrome เป็นเบราว์เซอร์เดียวที่รองรับพร็อกซี SPDY ที่ปลอดภัย วิธีหนึ่งในการกำหนดค่า Chrome เพื่อใช้ Secure SPDY Proxy คือสร้างสคริปต์ proxy.pac เช่นนี้:
ฟังก์ชั่น findproxyforurl (url, โฮสต์) {
ส่งคืน "HTTPS ServerAddr: พอร์ต";
-
SERVERADDR และ PORT เป็นชื่อโฮสต์/ที่อยู่และพอร์ตของเครื่อง SHRPX กำลังทำงานอยู่ โปรดทราบว่า Chrome ต้องการใบรับรองที่ถูกต้องสำหรับ Secure SPDY Proxy
จากนั้นเรียกใช้ Chrome ด้วยอาร์กิวเมนต์ต่อไปนี้:
$ google-chrome --proxy-pac-url = ไฟล์: ///path/to/proxy.pac-use-npn
บันทึก
ในช่วงเวลาของการเขียนนี้ Chrome 24 จำกัด การเชื่อมต่อสูงสุดพร้อมกันกับพร็อกซีถึง 32 และเนื่องจากข้อ จำกัด ของการจัดการสระว่ายน้ำซ็อกเก็ตในโครเมี่ยมมันจะถูกเติมเต็มอย่างรวดเร็วหากมีการใช้พร็อกซี SPDY และเซสชัน SPDY จำนวนมาก หากถึงขีด จำกัด การเชื่อมต่อใหม่จะถูกบล็อกเพียงจนกว่าการเชื่อมต่อที่มีอยู่จะหมดเวลา (ดูปัญหา Chrome 92244) วิธีแก้ปัญหาคือจำนวนการเชื่อมต่อสูงสุดสูงพูด, 99 ซึ่งสูงที่สุด ในการทำเช่นนี้คุณต้องเปลี่ยนการตั้งค่านโยบายที่เรียกว่า ดูเทมเพลตนโยบายสำหรับรายละเอียดวิธีการเปลี่ยนการตั้งค่านโยบายบนแพลตฟอร์มที่คุณใช้ ชื่อนโยบายที่เรากำลังมองหาคือ MaxConnectionsPerproxy ตัวอย่างเช่นหากคุณใช้ Linux ให้ทำตามคำสั่งที่อธิบายไว้ใน Linux Quick Start และสร้าง /etc/opt/chrome/policies/managed/test_policy.json พร้อมเนื้อหาต่อไปนี้
-
"MaxConnectionsPerproxy": 99
-
ด้วย --spdy-bridge จะยอมรับการเชื่อมต่อ SPDY/HTTPS และสื่อสารกับแบ็กเอนด์ใน SPDY:
ไคลเอนต์ <-(spdy, https)-> shrpx <-(spdy)-> เว็บหรือ spdy proxy ฯลฯ
[SPDY Bridge] (เช่น SHRPX -S)
ด้วยตัวเลือก -p มันทำงานเป็นพร็อกซีไปข้างหน้าและคาดว่าแบ็กเอนด์จะเป็นพร็อกซี SPDY ที่ปลอดภัย:
ไคลเอนต์ <-(http)-> shrpx <-(spdy)-> secure spdy proxy
[ส่งต่อพร็อกซี] (เช่น shrpx -s หรือ node -spdyproxy)
Client จะต้องกำหนดค่าให้ใช้ SHRPX เป็นพร็อกซีไปข้างหน้า
ในการกำหนดค่านี้ไคลเอนต์ที่ไม่รองรับ Secure SPDY Proxy สามารถใช้พร็อกซี SPDY ที่ปลอดภัยผ่าน shrpx การวาง shrpx ในกล่องเดียวกันหรือเครือข่ายเดียวกันกับลูกค้าการกำหนดค่านี้สามารถนำประโยชน์ของพร็อกซี SPDY ที่ปลอดภัยมาสู่ลูกค้าเหล่านั้น เนื่องจากจำนวนการเชื่อมต่อสูงสุดต่อเซิร์ฟเวอร์ยังคงใช้ในการเชื่อมต่อพร็อกซีการได้รับประสิทธิภาพจึงไม่ชัดเจน ตัวอย่างเช่นหากจำนวนการเชื่อมต่อสูงสุดต่อเซิร์ฟเวอร์คือ 6 หลังจากส่งคำขอ 6 รายการไปยังพร็อกซีบล็อกการร้องขอเพิ่มเติมซึ่งจะฆ่าประสิทธิภาพซึ่งอาจได้รับในการเชื่อมต่อ SPDY สำหรับลูกค้าที่สามารถปรับแต่งค่าเหล่านี้ (เช่น network.http.max-connections-per-server ใน Firefox) การเพิ่มพวกเขาอาจปรับปรุงประสิทธิภาพ
ด้วยตัวเลือก --client มันทำงานเป็นพร็อกซีย้อนกลับและคาดว่าแบ็กเอนด์เป็นเว็บเซิร์ฟเวอร์ที่เปิดใช้งาน SPDY:
ไคลเอนต์ <-(http)-> shrpx <-(spdy)-> เว็บเซิร์ฟเวอร์
[Reverse Proxy]
สำหรับโหมดการทำงานที่พูดคุยกับแบ็กเอนด์ใน SPDY การเชื่อมต่อแบ็กเอนด์สามารถถูกอุโมงค์ได้แม้ว่า HTTP พร็อกซี พร็อกซีถูกระบุโดยใช้ตัวเลือก --backend-http-proxy-uri รูปต่อไปนี้แสดงตัวอย่างของตัวเลือก --spdy-bridge และ --backend-http-proxy-uri เพื่อพูดคุยกับพร็อกซี SPDY ภายนอกผ่าน HTTP Proxy:
ไคลเอนต์ <-(spdy, https)-> shrpx <-(spdy)-
[สะพาน Spdy]
-==================== ---> spdy proxy
(อุโมงค์พร็อกซี http) (เช่น shrpx -s)
ไดเรกทอรี ตัวอย่าง มีการใช้งานไคลเอนต์ SPDY อย่างง่ายใน C.
ห้องสมุดมาพร้อมกับ Python wrapper python-spdylay ดูไดเรกทอรี python