HTTPS পরিষেবা তৈরি
প্রশ্ন:
Workerman কিভাবে একটি https পরিষেবা তৈরি করতে পারে, যাতে ক্লায়েন্ট https এর মাধ্যমে সংযোগ স্থাপন করতে পারে।
উত্তর:
https প্রোটোকল আসলে http+SSL, অর্থাৎ http প্রোটোকলের উপরে SSL স্তর যোগ করা। Workerman http প্রোটোকল সমর্থন করে, সেইসাথে SSL(Workerman সংস্করণ>=3.3.7), তাই শুধুমাত্র http প্রোটোকলের উপর ভিত্তি করে SSL চালু করতে হবে যাতে https প্রোটোকল সমর্থিত হয়।
Workerman-কে HTTPS সমর্থন করার জন্য দুটি সাধারণ পদ্ধতি আছে, একটি হচ্ছে Workerman সরাসরি SSL চালু করা, দ্বিতীয়টি হচ্ছে nginx দিয়ে SSL প্রোক্সি ব্যবহার করা। কোন এক পদ্ধতি নির্বাচন করা যেতে পারে, একসাথে সেট করা যাবে না।
Workerman-এ SSL চালু করা
প্রস্তুতিবিধি:
-
Workerman সংস্করণ>=3.3.7
-
PHP-তে openssl এক্সটেনশন ইনস্টল করা থাকতে হবে
-
সার্টিফিকেট (pem/crt ফাইল এবং key ফাইল) আবেদন করা হয়েছে এবং /etc/nginx/conf.d/ssl-এ স্থাপন করা হয়েছে
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// সার্টিফিকেটটি সম্ভবত আবেদন করা সার্টিফিকেট হওয়া উচিত
$context = array(
'ssl' => array(
'local_cert' => '/etc/nginx/conf.d/ssl/server.pem', // এটি crt ফাইলও হতে পারে
'local_pk' => '/etc/nginx/conf.d/ssl/server.key',
'verify_peer' => false,
'allow_self_signed' => true, // যদি এটি স্ব-স্বাক্ষরিত সার্টিফিকেট হয় তবে এই অপশনটি চালু করতে হবে
)
);
// এখানে http প্রোটোকল সেট করা হচ্ছে
$worker = new Worker('http://0.0.0.0:443', $context);
// SSL চালু করার জন্য transport সেট করা হচ্ছে, http+SSL অর্থাৎ https হয়ে যাবে
$worker->transport = 'ssl';
$worker->onMessage = function(TcpConnection $con, $msg) {
$con->send('ok');
};
Worker::runAll();
Workerman-এর মাধ্যমে উপরের কোড ব্যবহার করে HTTPS পরিষেবা তৈরি করা হয়েছে, ক্লায়েন্ট https প্রোটোকল মাধ্যমে Workerman-এর সাথে সংযোগ স্থাপন করে নিরাপদ এনক্রিপ্টেড যোগাযোগ করতে পারে।
পরীক্ষা:
ব্রাউজারের অ্যাড্রেস বারে https://ডোমেইন:443 প্রবেশ করুন।
মনে রাখবেন:
-
HTTPS পোর্ট অবশ্যই HTTPS প্রোটোকল দ্বারা ব্যবহার করতে হবে, HTTP প্রোটোকল দ্বারা ব্যবহার করা যাবে না।
-
সার্টিফিকেট সাধারণত ডোমেইনের সাথে বাঁধা থাকে, তাই পরীক্ষার সময় দয়া করে ডোমেইন ব্যবহার করুন, আইপি ব্যবহার করবেন না।
-
যে কোন কারণে HTTPS ব্যবহার করতে না পারলে সার্ভার ফায়ারওয়াল পরীক্ষা করুন।
Nginx-কে SSL প্রোক্সি হিসেবে ব্যবহার করা
Workerman এর নিজস্ব SSL ব্যবহারের পাশাপাশি, Nginx-কে SSL প্রোক্সি হিসেবেও ব্যবহার করে HTTPS বাস্তবায়ন করা যেতে পারে।
মনে রাখবেন
Nginx প্রোক্সি SSL এবং Workerman SSL সেটিংস একসাথে ব্যবহার করা যাবে না; একটি নির্বাচন করতে হবে।
যোগাযোগের মূলনীতি এবং প্রক্রিয়া হল:
-
ক্লায়েন্ট HTTPS সংযোগ নকশা করে Nginx-এ
-
Nginx HTTPS প্রোটোকলের ডেটা HTTP প্রোটোকলে রূপান্তর করে Workerman-এর HTTP পোর্টে ফরোয়ার্ড করে
-
Workerman ডেটা পাওয়ার পর ব্যবসায়িক লজিক প্রক্রিয়া করে এবং Nginx-এ HTTP প্রোটোকলের ডেটা ফেরত পাঠায়
-
Nginx- আবার HTTP অনুবাদ করে HTTPS তে, এটি ক্লায়েন্টে ফরোয়ার্ড করে
Nginx কনফিগারেশন রেফারেন্স
শর্তাবলী এবং প্রস্তুতি:
-
ধরুন Workerman 8181 পোর্টে (HTTP প্রোটোকল) মনিটর করছে
-
সার্টিফিকেট (pem/crt ফাইল এবং key ফাইল) আবেদন করা হয়েছে এবং /etc/nginx/conf.d/ssl-এ স্থাপন করা হয়েছে
-
Nginx ব্যবহার করে 443 পোর্ট খুলতে চাওয়া হচ্ছে ওয়েবসকেট সার্ভিস (পোর্ট প্রয়োজনে পরিবর্তন করা যেতে পারে)
Nginx কনফিগারেশন প্রায় এরকম দেখাবে:
upstream workerman {
server 127.0.0.1:8181;
keepalive 10240;
}
server {
listen 443;
server_name সাইটেরডোমেইন.com;
access_log off;
ssl on;
ssl_certificate /etc/nginx/conf.d/ssl/server.pem;
ssl_certificate_key /etc/nginx/conf.d/ssl/server.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
location /
{
proxy_pass http://workerman;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection "";
}
}