হোম সার্ভার (ডেভিয়ান + অ্যাপাচি) + ওয়্যারগার্ড + ভিপিএস (ফ্রিবিএসডি + এনজিনক্স) ব্যবহার করে রিভার্স প্রক্সি সেট আপ করার একটি স্মারকলিপি

মাউস দিয়ে শুধু আঁকা।
—-
আমার নিজের হোম সার্ভার থেকে আমার সাইট হোস্ট করতে চাই, কিন্তু আইপি ঠিকানা সরাসরি প্রকাশ হয়ে যাওয়াটা একটু ভীতিকর।
এবং আমি বাড়ি থেকে, ল্যানের ভেতর থেকে ডোমেইন থেকে সরাসরি অ্যাক্সেস করতে পারছিলাম না, এবং এই সিদ্ধান্তে উপনীত হয়েছিলাম যে এটি সম্ভব নয় কারণ আমার হোম রাউটারে NAT ফাংশন নেই।
বাড়ি থেকে অ্যাক্সেস আইপি ঠিকানা দিয়ে, বাইরে থেকে ডোমেইন দিয়ে। এটি অসুবিধাজনক, তাই আমি ভেবেছিলাম একটি আইপি-ভিত্তিক ভিপিএন সেট আপ করলে এটি সমাধান হতে পারে? এই দুটি সুবিধা থাকায় আমি এটি চেষ্টা করে দেখলাম।
শেষ পর্যন্ত, আমি একজন সম্পূর্ণ অপেশাদার হওয়ায় এটি কঠিন ছিল, কিন্তু একটি রিভার্স প্রক্সি ব্যবহার করে সার্ভারের লোড বিতরণ করা যায় এবং প্রক্রিয়াকরণও দ্রুত হয়, যা আমাকে খুব সন্তুষ্ট করেছে।
তারপর, সুওয়াকো-সান একটি নিবন্ধ আপডেট করেছেন!
[ডিজিটাল স্বায়ত্তশাসন] হোম সার্ভার থেকে ওয়্যারগার্ড ব্যবহার করে হোস্টিং পদ্ধতি
আমি অতীতে SSH সংযোগ করেছি, এবং ওয়্যারগার্ড সম্পর্কে আর্চ উইকিতেও তথ্য থাকায় আমি সহজেই এটি করতে পেরেছিলাম, তবে আমি যে অংশে আটকে গিয়েছিলাম এবং যখন আমি অন্য ভিপিএস-এ স্থানান্তরিত হয়েছিলাম তখন ব্যাকআপের জন্য যা পরিবর্তন করেছি তা রেকর্ড করব।
বিস্তারিত জানতে সুওয়াকো-সানের পৃষ্ঠা দেখুন।
এটি প্রায় সুওয়াকো-সানের মতোই, তাই আমি তার অপসারণের অনুরোধ মেনে চলব।
এটি উপরের আমার পরিবেশের জন্য একটি নোট রেকর্ড। বিশেষ করে, আমি ব্যক্তিগতভাবে এটি ওয়েবে রাখব কারণ আমি nginx ভুলে যেতে পারি।
ভিপিএস-এর দিকের সেটিংস
ফায়ারওয়াল সেটিংস
/etc/pf.conf
set skip on lo
exsrv1 = ভিপিএস মেশিনে বরাদ্দ করা গ্লোবাল আইপি ঠিকানা
insrv1 = 192.168.10.101 #ওয়্যারগার্ডে ভিপিএস-এর ব্যক্তিগত আইপি?
#insrv2 = 192.168.10.102 #ওয়্যারগার্ডে ভিপিএস-এর ব্যক্তিগত আইপি? যদি অন্য কিছু সংযোগ করার থাকে তবে যোগ করুন
block return
pass
#ওয়্যারগার্ডে পোর্ট 51820/UDP ব্যবহার করা হয়, তাই এটি খুলুন
pass in on wg0
pass in inet proto udp from any to any port 51820
# SSHWireGuard SSH সংযোগের জন্য
pass in on wg0 proto tcp from 192.168.10.0/24 to any port 22
block in on egress proto tcp from any to any port 22
/etc/wireguard/wg0.conf
[Interface]
Address = 192.168.10.1/24
PrivateKey = ভিপিএস-এ wg genkey দ্বারা তৈরি করাটি প্রবেশ করান
ListenPort = 51820
[Peer]
PublicKey = হোম সার্ভারে wg genkey দ্বারা তৈরি করাটি প্রবেশ করান
PreSharedKey = উপরের মতোই
AllowedIPs = 192.168.10.101/32
PersistentKeepalive = 25
*/nginx.conf
সম্ভবত এটি এলোমেলো, তবে যেহেতু এটি কাজ করছে, তাই ঠিক আছে!
worker_processes 1;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 300;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 100 8k;
proxy_cache_path /var/cache/nginx/cache/zone1 levels=1:2 keys_zone=zone1:64m inactive=7d max_size=2048m;
proxy_cache_path /var/cache/nginx/cache/zone2 levels=1:2 keys_zone=zone2:64m inactive=7d max_size=2048m;
proxy_cache_path /var/cache/nginx/cache/zone3 levels=1:2 keys_zone=zone3:64m inactive=7d max_size=2048m;
proxy_cache_path /var/cache/nginx/cache/zone4 levels=1:2 keys_zone=zone4:64m inactive=7d max_size=2048m;
proxy_temp_path /var/cache/nginx/temp;
server {
listen 80;
server_name #ডোমেইন নাম;
client_max_body_size 10240M;
location / {
proxy_pass http://192.168.10.101/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone1;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
server {
listen 443 ssl;
server_name ডোমেইন নাম;
client_max_body_size 10240M;
ssl_certificate # SSL সার্টিফিকেট;
ssl_certificate_key #উপরের মতোই
location / {
proxy_pass http://192.168.10.101;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone2;
proxy_cache_key $mobile$scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
server {
listen 80;
server_name soulminingrig.com;
client_max_body_size 500M;
location / {
proxy_pass http://192.168.10.101;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone3;
proxy_cache_key $mobile$scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
server {
listen 443 ssl;
server_name soulminingrig.com www.soulminingrig.com;
client_max_body_size 500M;
ssl_certificate # SSL সার্টিফিকেট;
ssl_certificate_key #উপরের মতোই
location / {
proxy_pass http://192.168.10.101; # রিভার্স প্রক্সি গন্তব্যের আইপি ঠিকানা দিয়ে প্রতিস্থাপন করুন
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone1;
proxy_cache_key $mobile$scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
}
এই ভিপিএস-এ ক্যাশে রেখে গতি বাড়ানোর চেষ্টা করছি। যদি কোনো সমস্যা হয়, তাহলে বন্ধ করে দেব।
বিশেষ করে, আমি এখানে আটকে গিয়েছিলাম:
client_max_body_size 500M;
nginx-এ ডিফল্টরূপে আপলোড করা ফাইলের আকার 1MB পর্যন্ত হয়, তাই হোম সার্ভারে আপলোড ফাইলের আকার বড় সেট করা থাকলেও, nginx সেট না করা থাকলে এটি সঠিকভাবে কাজ করবে না - এটি বুঝতে আমার কিছুক্ষণ সময় লেগেছিল।
এবং, জোন সেটিংস একসাথে রাখলে একটি ত্রুটি দেখা দেয়, তাই আমি mkdir দিয়ে ফোল্ডার তৈরি করে প্রতিটি ক্যাশে ফোল্ডার আলাদা করে দিয়েছি।
এবং, আমি nginx এবং হোম সার্ভারের মধ্যে SSH সংযোগও সেট আপ করেছি।
হোম সার্ভারের দিকের সেটিংস (Apache2)
/etc/wireguard/wg0.conf
[Interface]
PrivateKey = #হোম সার্ভারে wg genkey দ্বারা তৈরি করাটি প্রবেশ করান
ListenPort = 51820
Address = 192.168.10.101/24 #ওয়্যারগার্ডে এই মেশিনের ব্যক্তিগত আইপি
DNS = 8.8.8.8
[Peer]
PublicKey = #ভিপিএস-এ wg genkey দ্বারা তৈরি করাটি প্রবেশ করান
PreSharedKey = #হোম সার্ভারের PreSharedKey wg genkey দ্বারা তৈরি করাটি প্রবেশ করান
Endpoint = #ভিপিএস-এর গ্লোবাল আইপি ঠিকানা :51820
AllowedIPs = 192.168.10.0/24
PersistentKeepalive = 25
আমি একবার এই ওয়্যারগার্ড সেটিংসে আটকে গিয়েছিলাম কারণ ডিএনএস সেট না করলে এটি সংযোগ করছিল না।
আমি সাময়িকভাবে Google DNS ব্যবহার করছি, তবে সম্ভবত যখন আমি সুস্থ হব তখন এটি পরিবর্তন করব।
এবং বিবিধ নোট
উপরের সেটিংসের সাথে, এটি মাল্টি-ডোমেইনে কাজ করছিল না, এবং দ্বিতীয় ডোমেইন নিবন্ধন করলেও শুধুমাত্র প্রথম ডোমেইনটি প্রদর্শিত হচ্ছিল। পোর্ট পরিবর্তন করেও কাজ হচ্ছিল না, এবং আমি ভাবছিলাম কেন, তখন বুঝতে পারলাম যে আমি apache2.conf-এ নতুন ডোমেইনের জন্য ডিরেক্টরি নির্বাচন করিনি।
<Directory */নতুন ডোমেইনের ফাইল যেখানে আছে/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
আমি কি ধরে নিতে পারি যে এটি দ্বারা বিচ্ছেদ সম্ভব হয়েছে?
এছাড়াও, ওয়ার্ডপ্রেসে ডিফল্টরূপে রিভার্স প্রক্সি ব্যবহার করার সময়, SSL প্রমাণীকরণে বিভ্রান্তি দেখা দেয়, এবং HTTP-তে সঠিকভাবে প্রদর্শিত হলেও HTTPS সংযোগে CSS কাজ করা বন্ধ করে দেয়। আমি ভাবছিলাম কেন, এবং মনে হচ্ছে wp-config-এ নিম্নলিখিতটি যোগ করে এটি সমাধান করা যেতে পারে।
$_SERVER['HTTPS']='on';
অন্যান্য পদ্ধতিও ছিল, কিন্তু লগইন স্ক্রিন হঠাৎ করে HTTP যোগাযোগে পরিণত হওয়ায় এটিই সবচেয়ে ভালো কাজ করা পদ্ধতি ছিল।
সম্ভবত এটি এখনও বিরোধপূর্ণ।
পোর্ট পরিবর্তন করা উচিত, তবে আমি ক্লান্ত, তাই পরে করব।
এটি মোটেই সুসংগঠিত নয়, তবে আমি এটি একটি স্মারকলিপি হিসাবে রেখে দিচ্ছি যাতে ভুলে না যাই।