একটি তৃতীয় পক্ষের মডিউল রয়েছে nginx-auth-ldap
যা আপনি ব্যবহার করতে পারেন। আমি এটি এখনও চেষ্টা করি নি, তবে আমি আমার উত্তরটি পরে আপডেট করতে পারি।
এনগিনেক্স এক্স-এসিল ব্যবহার করে
ডকুমেন্টেশন X-accel
শুধু ব্যাখ্যা করেছেন যে একটি পৃষ্ঠায় একটি ফাইল পরিবেশন করা nginx আছে একটি শিরোলেখ ব্যবহার করতে পারেন (বরং PHP
বা django
বা ruby
বা নাম-আপনার নয় হিসাবে দক্ষ হিসাবে nginx-স্ট্যাক-এখানে )।
যেমন কর্মপ্রবাহ:
- ব্যবহারকারী দর্শন
/download.php?path=/data/file1.txt
,
download.php
রিটার্ন WWW-Authenticate
+ 401 Unauthorized
,
- ব্যবহারকারীর ব্রাউজার শো প্রমাণীকরণ ফর্ম এবং চেষ্টার ,
- ব্যবহারকারী দর্শন করেছেন
/download.php?path=/data/file1.txt
তবে এখন nginx
শংসাপত্র রয়েছে,
nginx
পাস হতে পারে $remote_user
এবং $http_authorization
করা fastcgi
স্ক্রিপ্ট,
download.php
প্রমাণীকরণটি করে এবং 403 Forbidden
শিরোনাম X-Accel-Redirect
শিরোনামটি ফিরতে বা সেট করতে হবে কিনা তা স্থির করে ।
nginx internal
অবস্থান নির্ধারণ
আপনি X-Accel
স্থিতিশীল সম্পদ পরিবেশন করতে ব্যবহার করতে পারেন , এখানে ব্যবহারের কেসটি হ'ল আমরা অনুরোধগুলি প্রমাণীকরণ করতে চাই, এজন্য আমরা ব্যবহার করি internal
।
location /protected/data/ {
internal;
alias /path/to/data/files/;
}
ডাউনলোড স্ক্রিপ্ট সেট আপ
এখানে আমরা যাচ্ছি:
location /download.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME /scripts/download.php;
fastcgi_param PHP_AUTH_USER $remote_user;
fastcgi_param PHP_AUTH_PW $http_authorization;
include fastcgi_params;
}
দয়া করে মনে রাখবেন : পিএইচপি স্ক্রিপ্ট ব্যবহার PHP_AUTH_USER
এবং PHP_AUTH_PW
, যার দ্বারা বন্দী করা হয়nginx
যাতে তাদের পিএইচপি স্ক্রিপ্টের মধ্যে ব্যবহার করার জন্য তাই হয়, আমরা স্পষ্টভাবে প্রদান দিতে হবে।
পিএইচপি মধ্যে একটি ldap প্রমাণীকরণ রান্না
আমার ব্যবহারের ক্ষেত্রে, আমি ইনস্টল করেছি php-fpm
এবং php-ldap
আমার সিস্টেমে।
এখানে একটি শালীন প্রমাণীকরণ কার্য রয়েছে:
function authenticate() {
// I'm watching you.
error_log("authreq: " . $_SERVER['REMOTE_ADDR']);
// mark that we're seeing the login box.
$_SESSION['AUTH'] = 1;
// browser shows login box
Header("WWW-Authenticate: Basic realm=LDAP credentials.");
Header("HTTP/1.0 401 Unauthorized");
die('Unauthorized.');
}
নিষিদ্ধ অ্যাক্সেসের জন্য এখানে একটি শালীন কোড পাথ রয়েছে:
function forbidden() {
error_log("forbidden: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER']);
// avoid brute force attacks
sleep(rand(0, 3));
// re-display login form
session_destroy();
// don't give too much info (e.g. user does not exist / password is wrong)
Header("HTTP/1.0 403 Forbidden");
// yes I did put the same message.
die('Unauthorized.');
}
এবং LDAP প্রমাণীকরণের মাংসের জন্য:
function ldap_auth() {
$ldap_server = 'ldap://ldap.example.com/';
$ldap_domain = 'dc=example,dc=com';
$ldap_userbase = 'ou=Users,' . $ldap_domain;
$ldap_user = 'uid=' . $_SERVER['PHP_AUTH_USER'] . ',' . $ldap_userbase;
$ldap_pass = $_SERVER['PHP_AUTH_PW'];
// connect to ldap server
$ldapconn = ldap_connect($ldap_server)
or die("Could not connect to LDAP server.");
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3) ;
if ($ldapconn) {
// try to bind/authenticate against ldap
$ldapbind = @ldap_bind($ldapconn, $ldap_user, $ldap_pass) || forbidden();
// "LDAP bind successful...";
error_log("success: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER']);
}
ldap_close($ldapconn);
}
এখানে আপনার কাছে স্ক্রিপ্টের মূল অংশ যা অনুরোধ ইউরি ব্যবহার করে।
if (@$_SESSION['AUTH'] != 1) {
authenticate();
}
if (empty($_SERVER['PHP_AUTH_USER'])) {
authenticate();
}
// check credentials on each access
ldap_auth();
// Get requested file name
// you can use the query string or a parameter
// or the full request uri if you like.
$path = $_GET["path"];
error_log("serving: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER'] . ', path: ' . $path);
header("Content-Type: ", true);
header("X-Accel-Redirect: /protected" . $path);
আধা স্বচ্ছ ফাইল ব্রাউজিং
আমি এটি সংক্ষেপে প্রকাশও করেছি :
location /protected/data/ {
internal;
autoindex on;
alias /path/to/data/files/;
}
location /data/ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME /scripts/auth.php;
fastcgi_param PHP_AUTH_USER $remote_user;
fastcgi_param PHP_AUTH_PW $http_authorization;
include fastcgi_params;
}
এবং শরীর ব্যতীত প্রায় একই পিএইচপি স্ক্রিপ্ট:
// Get requested file name
$path = $_SERVER["REQUEST_URI"];
error_log("serving: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER'] . ', path: ' . $path);
header("Content-Type: ", true);
header("X-Accel-Redirect: /protected" . $path);