How To Make a Reverse Proxy with NGINX 2020
สารบัญ:
- ข้อกำหนดเบื้องต้น
- การใช้ Nginx เป็น Reverse Proxy
- ผ่านส่วนหัวคำขอ
- การกำหนดค่า Nginx เป็น Reverse Proxy ไปยังเซิร์ฟเวอร์พร็อกซีที่ไม่ใช่ HTTP
- ตัวเลือก Nginx Reverse Proxy สามัญ
- ข้อสรุป
พร็อกซีย้อนกลับคือบริการที่รับคำขอของลูกค้าส่งคำขอไปยังเซิร์ฟเวอร์พร็อกซีหนึ่งเครื่องขึ้นไปดึงการตอบสนองและส่งการตอบกลับของเซิร์ฟเวอร์ไปยังไคลเอนต์
เนื่องจากประสิทธิภาพและความสามารถในการปรับขนาดของมัน NGINX จึงถูกใช้เป็นพร็อกซีย้อนกลับสำหรับ HTTP และเซิร์ฟเวอร์ที่ไม่ใช่ HTTP การกำหนดค่าพร็อกซีย้อนกลับโดยทั่วไปคือการวาง Nginx ไว้หน้า Node.js, Python หรือ Java application
การใช้ Nginx เป็น reverse proxy ให้ประโยชน์เพิ่มเติมหลายประการแก่คุณ:
- โหลดบาลานซ์ - Nginx สามารถทำโหลดบาลานซ์เพื่อกระจายคำร้องขอของลูกค้าข้ามเซิร์ฟเวอร์พร็อกซีซึ่งปรับปรุงประสิทธิภาพความสามารถในการขยายและความน่าเชื่อถือ การแคช - ด้วย Nginx ในฐานะพร็อกซีย้อนกลับคุณสามารถแคชเวอร์ชันหน้าที่แสดงผลล่วงหน้าเพื่อเร่งความเร็วในการโหลดหน้าเว็บ มันทำงานได้โดยการแคชเนื้อหาที่ได้รับจากการตอบสนองของเซิร์ฟเวอร์ proxied และใช้มันเพื่อตอบสนองต่อลูกค้าโดยไม่ต้องติดต่อกับเซิร์ฟเวอร์ proxied สำหรับเนื้อหาเดียวกันทุกครั้ง การสิ้นสุด SSL - Nginx สามารถทำหน้าที่เป็นปลายทาง SSL สำหรับการเชื่อมต่อกับไคลเอนต์ มันจะจัดการและถอดรหัสการเชื่อมต่อ SSL ขาเข้าและเข้ารหัสการตอบสนองของเซิร์ฟเวอร์พร็อกซี การบีบอัด - หากเซิร์ฟเวอร์ proxied ไม่ส่งการตอบกลับที่ถูกบีบอัดคุณสามารถกำหนดค่า Nginx เพื่อบีบอัดการตอบสนองก่อนที่จะส่งไปยังไคลเอนต์ การบรรเทาการโจมตี DDoS - คุณสามารถ จำกัด การร้องขอขาเข้าและจำนวนการเชื่อมต่อต่อที่อยู่ IP เดียวให้เป็นค่าทั่วไปสำหรับผู้ใช้ปกติ Nginx ยังช่วยให้คุณสามารถบล็อกหรือ จำกัด การเข้าถึงตามสถานที่ตั้งของลูกค้าและค่าของส่วนหัวคำขอเช่น“ User-Agent” และ“ Referer”
บทความนี้แสดงขั้นตอนที่จำเป็นสำหรับการกำหนดค่า Nginx เป็น reverse proxy
ข้อกำหนดเบื้องต้น
เราสมมติว่าคุณมี Nginx ติดตั้งบนเซิร์ฟเวอร์ Ubuntu, CentOS หรือ Debian ของคุณ
การใช้ Nginx เป็น Reverse Proxy
ในการกำหนดค่า Nginx เป็นพร็อกซีย้อนกลับไปยังเซิร์ฟเวอร์ HTTP ให้เปิดไฟล์การกำหนดค่าบล็อกเซิร์ฟเวอร์ของโดเมนและระบุสถานที่และเซิร์ฟเวอร์พร็อกซีภายใน:
server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }
URL เซิร์ฟเวอร์พร็อกซีถูกตั้งค่าโดยใช้
proxy_pass
directive และสามารถใช้
HTTP
หรือ
HTTPS
เป็นโปรโตคอลชื่อโดเมนหรือที่อยู่ IP และพอร์ตทางเลือกและ URI เป็นที่อยู่
การกำหนดค่าด้านบนบอกให้ Nginx ส่งคำขอทั้งหมดไปยังตำแหน่ง
/app
ไปยังเซิร์ฟเวอร์ proxied ที่
http://127.0.0.1:8080
/etc/nginx/sites-available
ขณะที่ CentOS ในไดเร็กทอรี
/etc/nginx/conf.d
เพื่อแสดงให้เห็นถึงวิธีการทำงาน
location
และคำสั่ง
proxy_pass
ดีขึ้นลองมาตัวอย่างต่อไปนี้:
server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }
หากผู้เข้าชมเข้าถึง
http://example.com/blog/my-post
Nginx จะทำหน้าที่นี้ให้กับ
http://node1.com:8000/wordpress/my-post
เมื่อที่อยู่ของเซิร์ฟเวอร์พร็อกซีมี URI, (
/wordpress/
), URI คำขอที่ส่งผ่านไปยังเซิร์ฟเวอร์พร็อกซีจะถูกแทนที่ด้วย URI ที่ระบุในคำสั่ง หากที่อยู่ของเซิร์ฟเวอร์พร็อกซีถูกระบุโดยไม่มี URI คำร้องขอแบบเต็ม URI จะถูกส่งไปยังเซิร์ฟเวอร์พร็อกซี
ผ่านส่วนหัวคำขอ
เมื่อ Nginx ส่งคำขอคำขอจะกำหนดฟิลด์ส่วนหัวสองฟิลด์โดยอัตโนมัติในคำขอคำขอพร็อกซีจากไคลเอนต์
Host
และการ
Connection
และลบส่วนหัวที่ว่างเปล่าออก
Host
ถูกตั้งค่าเป็นตัวแปร
$proxy_host
และการ
Connection
ถูกตั้งค่าเป็นปิด
หากต้องการปรับหรือตั้งค่าส่วนหัวสำหรับการเชื่อมต่อพร็อกซีให้ใช้คำสั่ง
proxy_set_header
ตามด้วยค่าส่วนหัว คุณสามารถค้นหารายการส่วนหัวของคำขอทั้งหมดที่มีอยู่และค่าที่อนุญาตได้ที่นี่ หากคุณต้องการป้องกันไม่ให้ส่วนหัวถูกส่งไปยังเซิร์ฟเวอร์พร็อกซีให้ตั้งเป็นสตริงว่าง
""
ในตัวอย่างต่อไปนี้เรากำลังเปลี่ยนค่าของฟิลด์ส่วนหัว
$host
และลบฟิลด์ส่วนหัว
Accept-Encoding
โดยการตั้งค่าเป็นสตริงว่าง
location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }
เมื่อใดก็ตามที่คุณแก้ไขไฟล์กำหนดค่าคุณต้องรีสตาร์ทบริการ Nginx เพื่อให้การเปลี่ยนแปลงมีผล
การกำหนดค่า Nginx เป็น Reverse Proxy ไปยังเซิร์ฟเวอร์พร็อกซีที่ไม่ใช่ HTTP
ในการกำหนดค่า Nginx เป็น reverse proxy ไปยังเซิร์ฟเวอร์ที่ไม่ใช่ HTTP proxied คุณสามารถใช้คำสั่งต่อไปนี้:
-
fastcgi_pass
- reverse proxy ไปยังเซิร์ฟเวอร์ FastCGIuwsgi_pass
- reverse proxy ไปยังเซิร์ฟเวอร์ uwsgiscgi_pass
- reverse proxy ไปยังเซิร์ฟเวอร์ SCGImemcached_pass
- reverse proxy ไปยังเซิร์ฟเวอร์ Memcached
หนึ่งในตัวอย่างที่พบบ่อยที่สุดคือการใช้ Nginx เป็น reverse proxy to PHP-FPM:
server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }
ตัวเลือก Nginx Reverse Proxy สามัญ
การแสดงเนื้อหาผ่าน HTTPS กลายเป็นมาตรฐานในปัจจุบัน ในส่วนนี้เราจะให้ตัวอย่างของการกำหนดค่าพร็อกซีย้อนกลับ HTTPS Nginx รวมถึงพารามิเตอร์พร็อกซี Nginx ที่แนะนำและส่วนหัว
location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }
-
proxy_http_version 1.1
- กำหนดเวอร์ชันโปรโตคอล HTTP สำหรับการพร็อกproxy_http_version 1.1
โดยค่าเริ่มต้นจะถูกตั้งค่าเป็น 1.0 สำหรับ Websockets และการเชื่อมต่อแบบkeepalive
คุณต้องใช้เวอร์ชัน 1.1proxy_cache_bypass $http_upgrade
- ตั้งเงื่อนไขภายใต้การตอบสนองที่จะไม่นำมาจากแคชUpgrade $http_upgrade
และการConnection "upgrade"
- ฟิลด์ส่วนหัวเหล่านี้จำเป็นหากแอปพลิเคชันของคุณใช้ WebsocketsHost $host
- ตัวแปร$host
ตามลำดับความสำคัญต่อไปนี้ประกอบด้วย: ชื่อโฮสต์จากบรรทัดคำขอหรือชื่อโฮสต์จากฟิลด์ส่วนหัวคำขอHost
หรือชื่อเซิร์ฟเวอร์ที่ตรงกับคำขอX-Real-IP $remote_addr
- ส่งต่อที่อยู่ IP ของผู้เยี่ยมชมระยะไกลไปยังเซิร์ฟเวอร์พร็อกซีX-Forwarded-For $proxy_add_x_forwarded_for
- รายการที่มีที่อยู่ IP ของเซิร์ฟเวอร์ทุกเครื่องไคลเอนต์ที่ได้รับการพร็อกซีผ่านX-Forwarded-Proto $scheme
- เมื่อใช้ภายในบล็อกเซิร์ฟเวอร์ HTTPS แต่ละการตอบสนอง HTTP จากเซิร์ฟเวอร์พร็อกซีจะถูกเขียนใหม่เป็นX-Forwarded-Host $host
- กำหนดโฮสต์ดั้งเดิมที่ลูกค้าร้องขอX-Forwarded-Port $server_port
- กำหนดพอร์ตดั้งเดิมที่ลูกค้าร้องขอ
ข้อสรุป
คุณได้เรียนรู้วิธีใช้ Nginx เป็น Reverse Proxy นอกจากนี้เรายังแสดงวิธีการส่งพารามิเตอร์เพิ่มเติมไปยังเซิร์ฟเวอร์และเพื่อแก้ไขและตั้งค่าฟิลด์ส่วนหัวที่แตกต่างกันในคำขอพร็อกซี
Nginxช่องโหว่ที่สำคัญในซอฟต์แวร์เว็บเซิร์ฟเวอร์ของ Nginx

ทีมผู้พัฒนาซอฟต์แวร์โอเพ่นซอร์ส Nginx ที่เป็นที่นิยม แก้ไขช่องโหว่ที่มีความเสี่ยงสูงที่อาจถูกโจมตีโดยผู้โจมตีจากระยะไกลเพื่อรันโค้ดบนเซิร์ฟเวอร์ที่อ่อนแอได้
กำหนดค่า odoo ด้วย nginx เป็น reverse proxy

Odoo มาพร้อมกับเว็บเซิร์ฟเวอร์ในตัว แต่ในกรณีส่วนใหญ่แนะนำให้มี reverse proxy อยู่ข้างหน้าซึ่งจะทำหน้าที่เป็นตัวกลางระหว่างลูกค้าและเซิร์ฟเวอร์ Odoo คู่มือนี้ให้คำแนะนำเกี่ยวกับวิธีการใช้ Nginx เป็น reverse proxy ไปยัง Odoo
วิธีการติดตั้ง nginx บน debian 10 linux

Nginx เป็น HTTP แบบโอเพ่นซอร์สประสิทธิภาพสูงและพร็อกซีเซิร์ฟเวอร์ย้อนกลับที่ให้พลังบางไซต์ที่ใหญ่ที่สุดบนอินเทอร์เน็ต ในบทช่วยสอนนี้เราจะอธิบายวิธีการติดตั้งและจัดการ Nginx บน Debian 10 Buster