ฉันกำลังตั้งค่าโหลดบาลานเซอร์ที่ต้องสื่อสารกับโหนดอื่นโดยใช้ TLS สิ่งนี้มีความสำคัญเนื่องจากโหนดส่วนหลังไม่ได้อยู่ในเครือข่ายส่วนตัว การกำหนดค่าเป็นแบบด้านล่าง
ผลลัพธ์คือ Nginx กลับมา 502 เกตเวย์เสียและดูเหมือนว่า Nginx ไม่สามารถเปลี่ยนเส้นทางไปยังโดเมนของฉันได้ นอกจากนี้ ตั้งแต่ฉันใช้ โอเพ่นซอร์ส เวอร์ชั่น I ไม่ได้ ใช้ แก้ไข คำหลักภายในการกำหนดค่าอัพสตรีม ฉันจะเปลี่ยนการกำหนดค่านี้เพื่อให้ Nginx เข้ารหัสข้อมูลระหว่าง example.com -> backendX.example.com ได้อย่างไร
ข้อสังเกต: ถ้าฉันใช้ IP แทน URL ในอัพสตรีมบล็อก โหลดบาลานซ์จะทำงาน แต่ฉันไม่คิดว่ามันถูกเข้ารหัส
ข้อผิดพลาด:
*3 ข้อผิดพลาดในการตรวจสอบใบรับรอง SSL อัปสตรีม: (2:ไม่สามารถรับใบรับรองผู้ออก) ขณะจับมือ SSL ไปยังอัปสตรีม ไคลเอ็นต์: 0.0.0.0 เซิร์ฟเวอร์: lb.example.com
ผลลัพธ์ของ openssl s_client - เชื่อมต่อ backend1.example.com
:
ห่วงโซ่ใบรับรอง
0 วินาที:CN = backend1.example.com
i:C = US, O = Let's Encrypt, CN = R3
1 วินาที:C = US, O = Let's Encrypt, CN = R3
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
2 วินาที:C = US, O = Internet Security Research Group, CN = ISRG Root X1
i:O = Digital Signature Trust Co., CN = DST Root CA X3
ต้นน้ำ example.com{
little_conn;
เซิร์ฟเวอร์ backend1.example.com;
เซิร์ฟเวอร์ backend2.example.com;
}
เซิร์ฟเวอร์ {
ฟัง [::]:443 ssl ipv6only=เปิด;
ฟัง 443 ssl;
server_name lb.example.com;
ที่ตั้ง / {
proxy_pass https://example.com;
proxy_ssl_trusted_certificate /etc/letsencrypt/.../chain.pem;
เปิด proxy_ssl_session_reuse;
เปิด proxy_ssl_verify;
proxy_ssl_verify_ความลึก 2;
proxy_set_header โฮสต์ $host;
}
ssl_certificate /etc/letsencrypt/.../fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}
#### NGINX -T
ผู้ใช้ www-data;
worker_processes อัตโนมัติ
pid /run/nginx.pid;
รวม /etc/nginx/modules-enabled/*.conf;
เหตุการณ์ {
worker_connections 768;
# multi_accept บน;
}
http {
##
# การตั้งค่าพื้นฐาน
##
ส่งไฟล์บน;
tcp_nopush บน;
tcp_nodelay บน;
keepalive_timeout 65;
types_hash_max_size 2048;
# ปิด server_tokens;
# server_names_hash_bucket_size 64;
# server_name_in_redirect ปิด;
ตัวแก้ไข 8.8.8.8 8.8.4.4 ถูกต้อง = 30 วินาที;
รวม /etc/nginx/mime.types;
แอปพลิเคชัน default_type/octet-stream;
##
# การตั้งค่า SSL
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # วาง SSLv3 อ้างอิง: พุดเดิ้ล
เปิด ssl_prefer_server_ciphers;
##
# การตั้งค่าการบันทึก
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# การตั้งค่า Gzip
##
เปิด gzip;
# gzip_vary บน;
# gzip_proxyed ใด ๆ ;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types ข้อความ/ข้อความล้วน/แอปพลิเคชัน css/แอปพลิเคชัน json/ข้อความจาวาสคริปต์/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+rss ข้อความ/จาวาสคริปต์;
##
# การกำหนดค่าโฮสต์เสมือน
##
รวม /etc/nginx/conf.d/*.conf;
รวม /etc/nginx/sites-enabled/*;
}
ต้นน้ำ example.com{
little_conn;
เซิร์ฟเวอร์ backend1.example.com;
เซิร์ฟเวอร์ backend2.example.com;
}
เซิร์ฟเวอร์ {
ฟัง [::]:443 ssl ipv6only=เปิด;
ฟัง 443 ssl;
server_name lb.example.com;
ที่ตั้ง / {
proxy_pass https://example.com;
proxy_ssl_trusted_certificate /etc/letsencrypt/.../chain.pem;
เปิด proxy_ssl_session_reuse;
เปิด proxy_ssl_verify;
proxy_ssl_verify_ความลึก 2;
proxy_set_header โฮสต์ $host;
}
ssl_certificate /etc/letsencrypt/.../fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}
เซิร์ฟเวอร์ {
ถ้า ($host = lb.example.com) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
ฟัง 80 default_server;
ฟัง [::]:80 default_server;
server_name lb.example.com;
กลับ 404; # จัดการโดย Certbot
}
# ไฟล์กำหนดค่า /etc/letsencrypt/options-ssl-nginx.conf:
# ไฟล์นี้มีพารามิเตอร์ความปลอดภัยที่สำคัญ หากคุณแก้ไขไฟล์นี้
# ด้วยตนเอง Certbot จะไม่สามารถให้ความปลอดภัยในอนาคตได้โดยอัตโนมัติ
# อัปเดต Certbot จะพิมพ์และบันทึกข้อความแสดงข้อผิดพลาดพร้อมพาธไปที่แทน
# ไฟล์ล่าสุดที่คุณจะต้องอ้างถึงเมื่ออัปเดตด้วยตนเอง
#ไฟล์นี้.
ssl_session_cache แชร์:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ปิด ssl_session_tickets;
ssl_protocols TLSv1.2 TLSv1.3;
ปิด ssl_prefer_server_ciphers;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";
nginx -t
nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conf ไวยากรณ์ใช้ได้
nginx: การทดสอบไฟล์การกำหนดค่า /etc/nginx/nginx.conf สำเร็จ