ใน nginx.conf ฉันได้เพิ่ม if clause เพื่อกรองการเชื่อมต่อ ssl ตาม cn
ตัวอย่างเช่น
แผนที่ $ssl_client_s_dn $ssl_client_s_dn_cn {
    ค่าเริ่มต้น "";
    ~/CN=(?<CN>[^/]+) $CN;
}
เซิร์ฟเวอร์ {
    ฟัง 80 default_server;
    server_name เซิร์ฟเวอร์ nginx;
    ส่งคืน 301 https://$server_name$request_uri;
    ฟัง 443 ssl;
    ฟัง [::]:443 ssl;
    
    server_name เซิร์ฟเวอร์ nginx;
    
    ssl_certificate /path/to/server/cert.pem
    ssl_certificate_key /path/to/nginx-server/privatekey.pem
    ที่ตั้ง / {
        ถ้า ($ssl_client_s_dn_cn !~ "ลูกค้า") {
            กลับ 403;
        }
        รูท /usr/share/nginx/html;
        ดัชนี index.html index.htm;
    }
}
ตอนนี้จากบรรทัดคำสั่งฉันพยายามขดโดยให้ใบรับรองที่มี DN คล้ายกับ C=GB,ST=ลอนดอน,L=เมือง,O=MyOrg,OU=myOU,CN=ไคลเอนต์ ฉันได้รับข้อผิดพลาด 403
ฉันลองใช้ใบรับรองอื่นด้วย โดยไม่คำนึงถึงใบรับรอง DN/CN ฉันสังเกตเห็นว่า Nginx ส่งคืน 403
ในบันทึกการเข้าถึง ฉันพยายามบันทึก $ssl_client_s_dn ค่าในบันทึก แต่เป็นค่าว่าง
ผมเอามาอ้างอิงจาก http://nginx.org/en/docs/http/ngx_http_ssl_module.html
ฉันพลาดอะไรไปที่นี่?
อัปเดต:
ถ้าฉันฮาร์ดโค้ดค่าในฟังก์ชันต่อไปนี้เพื่อส่งคืนไคลเอนต์ก็ใช้งานได้ดี:
แผนที่ $ssl_client_s_dn $ssl_client_s_dn_cn {
"ลูกค้า" เริ่มต้น;
}
ฉันสังเกตเห็นว่าค่าของ ssl_client_s_dn อาจเป็นค่าว่างตามบันทึกของ nginx มีบางอย่างเกี่ยวกับการเปิดใช้งานโมดูล ngx_http_ssl_module หรือไม่
ฉันตรวจสอบแล้ว $ nginx V ฉันคิดว่าโมดูลอยู่ในรายการ
เอาต์พุตแนบอยู่ในรูปภาพ

ไม่แน่ใจว่าฉันพลาดอะไรไป! ความช่วยเหลือใด ๆ โปรด?
ขอบคุณ,
เจ๊