ฉันอยู่เบื้องหลัง cloudflare dns และฉันกำลังพยายามบล็อก ips ของลูกค้าเฉพาะรายที่สแปมเว็บไซต์ของฉัน ฉันเข้าใจว่าฉันสามารถทำได้โดย การเพิ่ม ตั้งค่าEnvIf
กฎภายในการกำหนดค่า virtualhost ของฉันที่ปฏิเสธการร้องขอเมื่อ ip บัญชีดำอยู่ใน X-ส่งต่อ-สำหรับ
ส่วนหัว ดังนั้นฉันจึงพยายามทำอย่างนั้น
ตอนนี้การกำหนดค่า virtuaHost มีลักษณะดังนี้
<VirtualHost *:80>
ServerName xxx
ServerAlias xxx
ServerAdmin xxx
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLProxyEngine on
SetEnv proxy-initial-not-pooled 1
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:5004/
ProxyPassReverse / http://localhost:5004
LogFormat '"%h" "%l" "%u" "%t" "%r" "%>s" "%b" "%{X-Forwarded-For}i" "%{CF-Connecting-IP}i" ' forwardedFor
CustomLog /var/log/apache2/forwardedFor.log forwardedFor
# part that should block the spam from the ip 185.237.14.42
<Location />
Order Allow,Deny
SetEnvIf X-Forwarded-For ^185\.237\.14\.42 DenyAccess
Allow from all
Deny from env=DenyAccess
</Location>
</VirtualHost>
ฉันได้ลองโดยกำหนดเป้าหมายไปที่ CF-เชื่อมต่อ-IP
ส่วนหัวแทนของ X-ส่งต่อ-สำหรับ
เนื่องจาก cloduflare ตั้งค่าส่วนหัวนั้นให้ชี้ไปที่ไคลเอนต์ ip
ในทั้งสองกรณีเมื่อใดก็ตามที่ฉันรัน apache2 ด้วยส่วนของการกำหนดค่าภายใน <Location>
แท็กคำขอจากลูกค้าทั้งหมดที่ถูกบล็อกด้วย 403
สถานะและภายใน บันทึกข้อผิดพลาด
ของ apache พิมพ์ต่อไปนี้
[อาทิตย์ 20 ก.พ. 13:17:28.494348 2022] [access_compat:error] [pid 65797] [client 162.158.103.169:48030] AH01797: ไคลเอ็นต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์: proxy:http://localhost:5004/token/
ดังนั้นฉันจะบล็อกเฉพาะคำขอที่มาจาก ip ได้สำเร็จได้อย่างไร 185.237.14.42
และไม่ใช่ทุกคำขอ ?