Tôi đang tìm cách sử dụng tập lệnh PHP để kiểm soát quyền truy cập vào tài nguyên trong Apache. Tôi muốn có quyền kiểm soát truy cập không phụ thuộc vào tài nguyên đích; tức là nó sẽ hoạt động cho html, các tệp, các tập lệnh khác và các chương trình cgi, giống như chỉ thị "Cho phép từ" hoặc "Từ chối" sẽ làm - ngoại trừ việc sử dụng logic tùy chỉnh.Cách sử dụng tập lệnh PHP để kiểm soát truy cập trong Apache
tôi đã xem xét một số cách để cố gắng quản lý này:
- Sử dụng một module apache như mod_auth_script (ok nhưng mô-đun này là cũ và tôi giả định không quy mô tốt) chỉ
- Sử dụng FastCGI FastCgiAccessChecker
- Tạo module apache của riêng tôi để gọi php và làm bất cứ điều gì tôi cần
trong số này # 2 nhìn hứa hẹn nhất, và cũng có thể cầm tay nhất cho sự phổ biến của FastCG TÔI. Vì vậy, tôi quản lý để trao đổi ra các mô-đun Linux Linux thông thường và nhận được php làm việc thông qua fastcgi thay thế. Đó là khó khăn hơn so với trên Windows nhưng đã nhận nó làm việc cuối cùng như một máy chủ bên ngoài, tức là sử dụng Apache chỉ
FastCGIExternalServer /var/www/html/thing -host 192.168.0.11:9000
và bắt đầu php daemon
php-cgi -q -b 192.168.0.11:9000 &
Vấn bước vào cố gắng tìm một cách để gọi một kịch bản PHP bằng cách sử dụng FastCgiAccessChecker.
Tôi đã thử nhiều cách khác nhau để thử truyền tên kịch bản mà tôi muốn chạy bằng cách thay đổi tên tệp trong chỉ thị FastCGIExternalServer và/hoặc FastCgiAccessChecker - không hoạt động. Tôi cũng đã cố gắng bắt đầu php-cgi với một specifier kịch bản, ví dụ:
php-cgi -q -b 192.168.0.11:9000 -f /var/www/html/thing/access.php &
Không có gì hoạt động. Tôi có thể nói apache nhận ra các chỉ thị của tôi, bởi vì khi tôi bao gồm FastCgiAccessChecker, sau đó truy cập trang php, thay đổi kiểu nội dung thành văn bản/plain và tôi mất ~ 8000 byte nội dung đầu tiên từ trang được phân phối nếu đó là tập lệnh (không ý tưởng tại sao). Nhưng nó không gọi kịch bản PHP mà tôi muốn chạy.
Theo như tôi có thể hình dung, điều đang xảy ra là FastCgiAccessChecker giả định rằng máy chủ fastcgi được chỉ định được biên dịch riêng để hoạt động như một bộ kiểm tra truy cập. Không có cách nào để nói với các máy chủ fastcgi (PHP trong trường hợp của tôi) những gì kịch bản để chạy để làm kiểm tra truy cập.
Tôi đã tìm kiếm trên web và theo như tôi có thể nói không ai từng cố gắng sử dụng tập lệnh PHP cho điều này trước đây hoặc không ai viết về nó.
Vì vậy, câu hỏi của tôi: tôi nên làm gì? tôi có thể thấy một vài khả năng:
1) Tôi đang thiếu cái gì, và có một số cách kỳ diệu để làm cho FastCgiAccessChecker làm những gì tôi muốn: chạy một kịch bản PHP để kiểm soát kiểm soát truy cập apache
2) Tôi viết máy chủ FastCGI của riêng tôi trong c và nhúng PHP, vì vậy tôi có thể chỉ định tập lệnh PHP mà tôi muốn chạy (tôi đã dành một vài phút để xem nó; nó trông phức tạp và đáng sợ, và tôi đã không làm việc trong c từ năm 1995)
3) Tôi từ bỏ FastCGI và viết mô-đun apache để gọi trực tiếp tập lệnh PHP của tôi để kiểm soát quyền truy cập. (Cũng có vẻ phức tạp, và kỹ thuật này sẽ yêu cầu một quy trình mới được sinh ra cho mọi yêu cầu để thực hiện PHP.)
Có ai có lời khuyên nào về cách để FastCGI làm những gì tôi muốn hoặc một cách hợp lý) thay thế đơn giản cho FastCGI?
Cám ơn bất cứ điều gì bạn có thể đề nghị
Tôi thích giải pháp đó! – Achronos