Ubuntu वेब सर्वर पूर्ण गाइड: Apache + SSL + अनुकूलन [सुरुवातीका लागि]

目次

1. परिचय

Ubuntu वेब सर्वर भनेको के हो?

वेब सर्वर भनेको इन्टरनेटमा वेबसाइटहरू प्रदान गर्नका लागि एक प्रणाली हो। वेब सर्वर सफ्टवेयरहरूमाApache, Nginx, LiteSpeedआदि छन्, तर Ubuntu मा सबैभन्दा व्यापक रूपमा प्रयोग गरिनेApacheहो। Ubuntuहल्का, स्थिरता उच्च र खुला स्रोतभएकोले, व्यक्तिगतबाट कम्पनीसम्म व्यापक रूपमा अपनाइएको छ। विशेष गरीLAMP वातावरण (Linux, Apache, MySQL/MariaDB, PHP)निर्माण गर्न सजिलो छ, र धेरै वेबसाइटहरू वा एप्लिकेसनहरूको सञ्चालनका लागि उपयुक्त छ।

यो लेखको लक्षित पाठकहरू

यो लेखवेब सर्वर पहिलो पटक निर्माण गर्ने शुरुआतीहरूका लागिहो। Ubuntu प्रयोग गरेर वेब सर्वर स्थापना गर्ने, Apache स्थापना गर्ने, भर्चुअल होस्ट वा SSL प्रमाणपत्र सेटअप गर्दै, अनुकूलन वा सुरक्षा मजबुत बनाउने विधिलाई विस्तृत रूपमा व्याख्या गर्दछ।

यो लेखबाट सिक्न सकिने कुराहरू

  • Ubuntu मा वेब सर्वर निर्माण गर्ने विधि (Apache को स्थापना – आधारभूत सेटिङ)
  • भर्चुअल होस्टको सेटिङ र बहु साइट सञ्चालन
  • Let’s Encrypt प्रयोग गरेर निःशुल्क SSL को स्थापना
  • वेब सर्वरको सुरक्षा मजबुत र अनुकूलन
  • सामान्य समस्या निवारण र तिनको समाधानहरू

2. Ubuntu को स्थापना र प्रारम्भिक सेटिङ

आवश्यक प्रणाली आवश्यकताहरू

Ubuntu लाई वेब सर्वरको रूपमा सञ्चालन गर्नका लागि, निम्न जस्तान्यूनतम स्पेक्ससिफारिस गरिन्छ।
आइटमन्यूनतम आवश्यकतासिफारिस आवश्यकता
OSUbuntu 22.04 LTSUbuntu 22.04 LTS
CPU1GHz भन्दा माथि2GHz भन्दा माथि
मेमोरी512MB2GB भन्दा माथि
स्टोरेज10GB भन्दा माथि20GB भन्दा माथि
नेटवर्कइन्टरनेट कनेक्सनउच्च गति लाइन सिफारिस

Ubuntu को डाउनलोड र स्थापना

Ubuntu आधिकारिक साइट (https://ubuntu.com/download/server) बाट डाउनलोड गर्न सकिन्छ। ISO फाइल प्राप्त गर्नुहोस्,VirtualBox वा VMwareमा भर्चुअल वातावरण सिर्जना गर्नुहोस् वासमर्पित सर्वर वा VPSमा स्थापना गर्नुहोस्।

स्थापना प्रक्रिया:

  1. स्थापना मिडियाको सिर्जना
  • USB मेमोरी (Rufus जस्ता उपकरण प्रयोग गरेर)
  • भर्चुअल मेसिनमा ISO फाइल माउन्ट गर्नुहोस्
  1. स्थापना विजार्ड अनुसार सेटिङ
  • भाषालाई “जापानी” मा सेट गर्नुहोस्
  • नेटवर्क कनेक्सन जाँच गर्नुहोस्
  • प्रयोगकर्ता नाम र पासवर्ड सेट गर्नुहोस्
  • SSH सर्वरको स्थापना (पछि पनि सम्भव)
  1. OS को सेटअप पूरा भएपछि, पुन: सुरु गर्नुहोस्
  2. लगइन गर्नुहोस् र प्रारम्भिक सेटिङ सुरु गर्नुहोस्

आधारभूत प्रारम्भिक सेटिङ

स्थापना तुरुन्तै गर्नुपर्ने प्रारम्भिक सेटिङहरू प्रस्तुत गर्दछ।
  1. प्याकेजको अपडेट
   sudo apt update && sudo apt upgrade -y
→ प्रणालीको सुरक्षा पैच वा सफ्टवेयर अपडेट गर्दछ।
  1. समय क्षेत्रको सेटिङ
   sudo timedatectl set-timezone Asia/Tokyo
→ जापानी समय (JST) मा सेट गर्दछ।
  1. फायरवालको सक्रियता
   sudo ufw enable
→ अनधिकृत पहुँच रोक्नका लागि, फायरवाललाई सक्रिय गर्दछ।
  1. SSH को सेटिङ (रिमोट व्यवस्थापनका लागि)
  • SSH सक्रिय छ कि जाँच गर्नुहोस् sudo systemctl status ssh
  • यदि निष्क्रिय छ भने सक्रिय गर्नुहोस् sudo systemctl enable --now ssh
यो प्रारम्भिक सेटिङ पूरा भएपछि, Ubuntu सर्वरलाई पूर्ण रूपमा वेब सर्वरको रूपमा प्रयोग गर्न तयार हुन्छ।

3. Apache को स्थापना र आधारभूत सेटिङ

Apache के हो?

Apache (औपचारिक नाम: Apache HTTP Server)एक ओपन सोर्स वेब सर्वर सफ्टवेयर हो, जसको स्थिरता, विस्तारिता र उच्च सुरक्षाको कारणलेदुनिया भरका सर्वरहरूको लगभग ३०% ले Apache प्रयोग गर्दछ

मुख्य विशेषताहरू:

  • निःशुल्क रूपमा प्रयोग गर्न सकिन्छ (ओपन सोर्स)
  • मोड्युलर संरचना ले विस्तार सजिलो बनाउँछ
  • SSL/TLS समर्थन ले HTTPS रूपान्तरण सम्भव बनाउँछ
  • भर्चुअल होस्ट (Virtual Host) मार्फत धेरै साइटहरू सञ्चालन गर्न सकिन्छ

Apache को स्थापना

Ubuntu मा, Apache लाई प्याकेज व्यवस्थापन प्रणालीaptप्रयोग गरेर सजिलै स्थापना गर्न सकिन्छ।

Apache स्थापना गर्ने

निम्न कमान्डहरू चलाएर Apache स्थापना गर्नुहोस्।
sudo apt update
sudo apt install apache2 -y

स्थापनाको सफलता जाँच्ने

स्थापना पछि, निम्न कमान्डले Apache को संस्करण जाँच गर्न सकिन्छ।
apache2 -v
आउटपुट उदाहरण:
Server version: Apache/2.4.52 (Ubuntu)
Server built:   2023-07-01T12:34:56
यदि यस्तो संस्करण जानकारी देखाइएको छ भने, सामान्य रूपमा स्थापना भएको छ।

Apache को सुरु गर्ने, रोक्ने र पुन: सुरु गर्ने

Apache लाईsystemctlकमान्ड प्रयोग गरेर व्यवस्थापन गरिन्छ।

Apache सुरु गर्ने

sudo systemctl start apache2
यसले Apache लाई सुरु गर्दछ र वेब अनुरोधहरू प्रक्रिया गर्न सक्ने अवस्थामा पुर्‍याउँछ।

Apache लाई स्वचालित सुरुवातमा सेट गर्ने

sudo systemctl enable apache2

Apache को अवस्था जाँच्ने

Apache सामान्य रूपमा सञ्चालन भइरहेको छ कि छैन जाँच्न, निम्न कमान्ड चलाउनुहोस्।
sudo systemctl status apache2
सामान्य रूपमा सञ्चालन भएमा, निम्न जस्तो सन्देश देखाइन्छ।
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since ...

Apache लाई पुन: सुरु गर्ने वा रोक्ने

सेटिङ परिवर्तन गर्दा Apache लाई पुन: सुरु गर्न निम्न कमान्ड प्रयोग गर्नुहोस्।
sudo systemctl restart apache2
Apache लाई अस्थायी रूपमा रोक्न चाहनुहुन्छ भने निम्न कमान्ड चलाउनुहोस्।
sudo systemctl stop apache2

Apache को सञ्चालन जाँच्ने

Apache ठीकसँग सञ्चालन भइरहेको छ कि छैन जाँच्न,सर्वरको IP ठेगाना पहुँच गर्नुहोस्

१. आफ्नो सर्वरको IP ठेगाना जाँच्ने

hostname -I
वा, निम्न कमान्ड चलाउँदा बाह्य IP जाँच्न सकिन्छ।
curl ifconfig.me

२. वेब ब्राउजरमा जाँच्ने

ब्राउजरको ठेगाना बारमा निम्नलाई प्रविष्ट गर्नुहोस्।
http://<सर्वरको IP ठेगाना>/
वा, स्थानीय वातावरणमा हो भने
http://localhost/
Apache को डिफल्ट पृष्ठ (/var/www/html/index.html) देखिनुपर्छ।डिफल्ट प्रदर्शन पृष्ठको उदाहरण:
Apache2 Ubuntu Default Page
It works!
यदि यो सन्देश देखाइएको छ भने, Apache सामान्य रूपमा सञ्चालन भइरहेको छ।

फायरवालको सेटिङ

Ubuntu माUFW (Uncomplicated Firewall)प्रयोग गरेर फायरवाल सेट गरिन्छ। Apache स्थापना गरेको अवस्थामा, बाहिरीबाट HTTP (पोर्ट ८०) र HTTPS (पोर्ट ४४३) पहुँच अवरुद्ध हुन सक्छ।

Apache का लागि फायरवाल नियम सेट गर्ने

sudo ufw allow 'Apache'
वा, HTTPS पनि अनुमति दिन चाहनुहुन्छ भने निम्न कमान्ड चलाउनुहोस्।
sudo ufw allow 'Apache Full'

फायरवालको अवस्था जाँच्ने

sudo ufw status
आउटपुट उदाहरण:
Status: active

To                         Action      From
--                         ------      ----
Apache                     ALLOW       Anywhere
Apache (v6)                ALLOW       Anywhere (v6)
यदि यस्तो देखाइएको छ भने, Apache को सञ्चार अनुमति प्राप्त भएको अवस्था हो।

सारांश

यहाँसम्ममा,Ubuntu मा Apache स्थापना गरी, आधारभूत सेटिङ सम्पन्नभयो। यो लेखमा व्याख्या गरिएका मुख्य सामग्री:
  • Apache को स्थापना विधि
  • Apache को सुरुवात र स्वचालित सुरुवात सेटिङ
  • Apache को सञ्चालन जाँच (ब्राउजरबाट पहुँच)
  • फायरवालको सेटिङ
  • Apache को आधारभूत सेटिङ फाइलको परिचय

4. भर्चुअल होस्टको सेटिङ (एकभन्दा बढी साइटहरूको व्यवस्थापन)

भर्चुअल होस्ट (Virtual Host) भनेको के हो?

भर्चुअल होस्ट भनेकोएउटा Apache सर्वरमा एकभन्दा बढी डोमेन (वा सबडोमेन) सञ्चालन गर्नका लागिको संयन्त्रहो। उदाहरणका लागि, एउटा सर्वरमाexample.comtest.comदुई फरक वेबसाइटहरू प्रदान गर्न सकिन्छ। भर्चुअल होस्टका प्रकारहरू निम्न दुई छन्।
  1. नाम-आधारित भर्चुअल होस्ट (Name-based Virtual Host)
  • एउटै IP ठेगानामा एकभन्दा बढी साइटहरू सञ्चालन
  • सामान्य वेबसर्भर सञ्चालन विधि
  1. IP-आधारित भर्चुअल होस्ट (IP-based Virtual Host)
  • फरक IP ठेगानाहरूका लागि फरक साइटहरू प्रदान
  • एउटा सर्वरमा एकभन्दा बढी नेटवर्क इन्टरफेस आवश्यक
सामान्यतया,Name-based Virtual Host (नाम-आधारित भर्चुअल होस्ट)प्रयोग गरिन्छ।

भर्चुअल होस्टको सेटिङ प्रक्रिया

1. आवश्यक डाइरेक्टरीहरू सिर्जना गर्नुहोस्

भर्चुअल होस्ट सेटिङ गर्नका लागि, प्रत्येक साइटका लागिविशेष डाइरेक्टरीसिर्जना गर्नुहोस्।
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

2. डाइरेक्टरीको स्वामित्व परिवर्तन गर्नुहोस्

Apache ले फाइलहरू उपयुक्त रूपमा पढ्न सकोस् भनेर, स्वामित्वलाईwww-dataमा सेट गर्नुहोस्।
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html

3. अस्थायी HTML फाइल सिर्जना गर्नुहोस्

कार्य परीक्षणका लागि, प्रत्येक वेबसाइटको होमपेजका लागिindex.htmlसिर्जना गर्नुहोस्।
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" | sudo tee /var/www/test.com/public_html/index.html

4. भर्चुअल होस्टको सेटिङ फाइल सिर्जना गर्नुहोस्

भर्चुअल होस्टको सेटिङ फाइल/etc/apache2/sites-available/डाइरेक्टरी भित्र सिर्जना गर्नुहोस्।

example.com को भर्चुअल होस्ट सेटिङ

निम्न कमान्डले सेटिङ फाइल सिर्जना गर्नुहोस् र सम्पादन गर्नुहोस्।
sudo nano /etc/apache2/sites-available/example.com.conf
सेटिङ फाइलको सामग्री:
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

test.com को भर्चुअल होस्ट सेटिङ

sudo nano /etc/apache2/sites-available/test.com.conf
निम्न सामग्री थप्नुहोस्:
<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html

    <Directory /var/www/test.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
    CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>

5. भर्चुअल होस्टलाई सक्रिय गर्नुहोस्

सेटिङ फाइल सिर्जना गरेपछि, भर्चुअल होस्टलाई सक्रिय गर्नa2ensiteकमान्ड चलाउनुहोस्।
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Apache को सेटिङ परीक्षण गर्नुहोस्

वाक्यसंरचनामा त्रुटि छैन भनेर जाँच्नुहोस्।
sudo apachectl configtest
आउटपुट परिणाम:
Syntax OK
समस्या नभएमा, Apache लाई पुन: सुरु गर्नुहोस्।
sudo systemctl restart apache2

6. स्थानीयमा कार्य परीक्षण (hosts फाइल सम्पादन)

भर्चुअल होस्ट सही रूपमा कार्य गरिरहेको छ भनेर जाँच्नका लागि, स्थानीय PC कोhostsफाइल सम्पादन गर्नुहोस्।
sudo nano /etc/hosts
निम्न लाइन थप्नुहोस्:
127.0.0.1 example.com
127.0.0.1 test.com
संग्रह गरेपछि, ब्राउजरमाhttp://example.com/मा पहुँच गर्नुहोस् र「Welcome to example.com」देखाइएको छ भनेर जाँच्नुहोस्। त्यस्तैhttp://test.com/मा पहुँच गर्नुहोस् र「Welcome to test.com」देखाइएमा सफल भएको हो।

7. समस्या निवारण

भर्चुअल होस्ट सही रूपमा कार्य नगरेमा, निम्न जाँच्नुहोस्।

1. Apache को त्रुटि लग जाँच्नुहोस्

sudo tail -f /var/log/apache2/error.log

2. सेटिङ फाइल सही रूपमा सक्रिय भएको छ भनेर जाँच्नुहोस्

ls /etc/apache2/sites-enabled/
उपयुक्त.confफाइलहरू सूचीबद्ध भएमा, भर्चुअल होस्ट सक्रिय छ।

3. Apache को पोर्ट सेटिङ जाँच्नुहोस्

भर्चुअल होस्टले पोर्ट ८० (HTTP) मा कार्य गरोस् भनेर,/etc/apache2/ports.confजाँच्नुहोस्।
sudo nano /etc/apache2/ports.conf
निम्न वर्णन छ भनेर जाँच्नुहोस्:
Listen 80

सारांश

यो खण्डमा,Ubuntu मा Apache को भर्चुअल होस्ट सेटिङ गर्ने विधिव्याख्या गरियो। यो लेखबाट सिकेका कुराहरू:
  • भर्चुअल होस्टको अवधारणा र उपयोग
  • भर्चुअल होस्टका लागि डाइरेक्टरी सिर्जना
  • भर्चुअल होस्ट सेटिङ फाइल सिर्जना र सक्रिय
  • स्थानीय वातावरणमा कार्य परीक्षण विधि
  • समस्या निवारण

5. SSL/TLS को परिचय (HTTPSकरण)

SSL/TLS भनेको के हो?

SSL (Secure Sockets Layer) र TLS (Transport Layer Security) इन्टरनेटमा सुरक्षित सञ्चार सुनिश्चित गर्नका लागि एन्क्रिप्शन प्रविधिहरू हुन्।

SSL/TLS परिचयका फाइदाहरू

सञ्चारको एन्क्रिप्शन(डाटा चोरी वा परिवर्तन हुने जोखिम कम गर्दछ) ✅गुगलको SEO मूल्यांकन सुधार(HTTPS साइटहरू खोज परिणामहरूमा प्राथमिकता पाउँछन्) ✅ब्राउजरको चेतावनीबाट बचाव(HTTP साइटहरूमा “असुरक्षित सञ्चार” देखाइन्छ) ✅अनलाइन भुक्तानी र लगइन जानकारीको सुरक्षाअहिले,TLS (TLS 1.2 / 1.3) लाई सिफारिस गरिएकोछ, र SSL 3.0 भन्दा पुरानालाई गैर-सिफारिस गरिएको छ।

Let’s Encrypt बाट निःशुल्क SSL प्रमाणपत्र प्राप्त गर्नुहोस्

Let’s Encrypt एक प्रमाणपत्र प्राधिकरण (CA: Certificate Authority) हो जसले निःशुल्क रूपमा SSL प्रमाणपत्र जारी गर्दछ।certbotप्रयोग गरेर सजिलै प्रमाणपत्र प्राप्त गर्न सकिन्छ र Apache मा लागू गर्न सकिन्छ।

Let’s Encrypt क्लाइन्ट (Certbot) को स्थापना

पहिले,certbot(Let’s Encrypt को आधिकारिक क्लाइन्ट) स्थापना गर्नुहोस्।
sudo apt update
sudo apt install certbot python3-certbot-apache -y

Apache को SSL सेटिङलाई स्वचालित गर्नुहोस्

Let’s Encrypt लेcertbot --apacheकमान्ड प्रयोग गर्दा Apache को सेटिङलाई स्वचालित रूपमा गर्दछ।
sudo certbot --apache -d example.com -d www.example.com
यो कमान्ड चलाउँदा निम्न प्रक्रियाहरू अगाडि बढ्छन्:
  1. डोमेनको प्रमाणीकरण (HTTP-01 च्यालेन्ज)
  2. SSL प्रमाणपत्र जारी
  3. Apache को SSL सेटिङ
  4. HTTPS को रिडाइरेक्ट सेटिङ

SSL को कार्य परीक्षण

निम्न URL मा पहुँच गर्नुहोस् र HTTPS सक्रिय भएको पुष्टि गर्नुहोस्।
https://example.com/
ब्राउजरको ठेगाना बारमाकुञ्जी आइकनदेखाइएको छ भने सफल भएको हो।

म्यानुअल रूपमा Apache मा SSL सेट गर्नुहोस्

certbot --apacheप्रयोग नगरी म्यानुअल रूपमा SSL सेट गर्न चाहनुहुन्छ भने, निम्न चरणहरू पालन गर्नुहोस्।

1. Apache को SSL मोड्युललाई सक्रिय गर्नुहोस्

sudo a2enmod ssl
sudo systemctl restart apache2

2. SSL भर्चुअल होस्टको सेटिङ

भर्चुअल होस्ट सेटिङ/etc/apache2/sites-available/example.com-le-ssl.confसम्पादन गर्नुहोस्:
sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf
सेटिङ सामग्री:
<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

3. सेटिङलाई सक्रिय गरेर Apache लाई पुन: सुरु गर्नुहोस्

sudo a2ensite example.com-le-ssl.conf
sudo systemctl restart apache2

SSL प्रमाणपत्रको स्वचालित अपडेट

Let’s Encrypt को प्रमाणपत्रहरू९० दिन मात्र वैधहुन्छन्। स्वचालित अपडेट सेट गरेर म्यानुअल अपडेटको झन्झट बचाउन सकिन्छ।

1. Certbot को स्वचालित अपडेट परीक्षण

sudo certbot renew --dry-run

2. प्रमाणपत्रको स्वचालित अपडेट तालिका जाँच

Certbot को स्वचालित अपडेट/etc/cron.d/certbotमा तालिका दर्ता गरिएको छ।
sudo systemctl list-timers | grep certbot

SSL को समस्या निवारण

1. SSL प्रमाणपत्र लागू नहुनु

समाधान: Apache लाई पुन: सुरु गर्नुहोस् र सेटिङ जाँच गर्नुहोस्
sudo systemctl restart apache2
sudo apachectl configtest

2. प्रमाणपत्रको वैधता अवधि सकियो

समाधान: म्यानुअल रूपमा प्रमाणपत्र अपडेट गर्नुहोस्
sudo certbot renew --force-renewal

3. Let’s Encrypt को प्रमाणीकरण विफल

समाधान: फायरवाल सेटिङ जाँच गर्नुहोस्
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

सारांश

यो खण्डमा,Let’s Encrypt प्रयोग गरेर निःशुल्क SSL को परिचय विधिलाई विस्तृत रूपमा व्याख्या गरियो। यो लेखबाट सिकेका कुराहरू:
  • SSL/TLS को आधारभूत ज्ञान
  • Let’s Encrypt प्रयोग गरेर Apache को SSL सेटिङ
  • म्यानुअल SSL सेटिङ
  • SSL प्रमाणपत्रको स्वचालित अपडेट
  • SSL को समस्या निवारण

6. वेब सर्वरको सुरक्षा सुदृढीकरण

फायरवाल (UFW) को सेटिङ

Ubuntu मा,UFW (Uncomplicated Firewall)प्रयोग गरेर, अनावश्यक सञ्चारहरूलाई ब्लक गर्नु महत्वपूर्ण छ।

वर्तमान फायरवाल सेटिङ जाँच्नुहोस्

sudo ufw status

आवश्यक पोर्टहरू मात्र अनुमति दिनुहोस्

डिफल्ट रूपमा, सबै कनेक्सनहरूलाई ब्लक गर्नुहोस् र आवश्यक पोर्टहरू मात्र खोल्नुहोस्।
sudo ufw default deny incoming
sudo ufw default allow outgoing
खोल्ने पोर्टहरू
  • SSH (२२ नम्बर पोर्ट)
  sudo ufw allow 22/tcp
  • HTTP (८० नम्बर पोर्ट)
  sudo ufw allow 80/tcp
  • HTTPS (४४३ नम्बर पोर्ट)
  sudo ufw allow 443/tcp

फायरवाललाई सक्रिय गर्नुहोस्

sudo ufw enable

SSH को सुरक्षा सुदृढीकरण

डिफल्ट रूपमा,SSH ब्रुट फोर्स आक्रमणको लक्ष्यबन्न सजिलो हुन्छ, त्यसैले उपयुक्त सेटिङ गर्नुहोस्।

SSH को पोर्ट परिवर्तन गर्नुहोस्

sudo nano /etc/ssh/sshd_config
परिवर्तन गर्ने स्थान:
Port 2222  # २२ → २२२२ मा परिवर्तन गर्नुहोस् (कुनै पनि पोर्ट नम्बर)
PermitRootLogin no  # रुटबाट लगइन निषेध गर्नुहोस्
PasswordAuthentication no  # पासवर्ड प्रमाणीकरणलाई असक्षम गर्नुहोस् (SSH कुञ्जी प्रमाणीकरण मात्र अनुमति)
परिवर्तन पछि, SSH लाई पुन: सुरु गर्नुहोस्:
sudo systemctl restart ssh

Fail2Ban को स्थापना

Fail2Ban ले SSH मा अनधिकृत लगइन प्रयास गर्ने IP ठेगानाहरूलाई अस्थायी रूपमा ब्लक गर्ने उपकरण हो।
sudo apt install fail2ban -y
सेटिङ फाइल सम्पादन गर्नुहोस्:
sudo nano /etc/fail2ban/jail.local
निम्न सेटिङ थप्नुहोस्:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 600
Fail2Ban लाई सक्रिय गर्नुहोस्:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Apache को सुरक्षा सेटिङ

संस्करण जानकारी लुकाउनुहोस्

sudo nano /etc/apache2/conf-available/security.conf
निम्न सेटिङ परिवर्तन गर्नुहोस्:
ServerTokens Prod
ServerSignature Off
सेटिङ लागू गर्नुहोस्:
sudo systemctl restart apache2

डाइरेक्टरीको सूची प्रदर्शन असक्षम गर्नुहोस्

sudo nano /etc/apache2/apache2.conf
निम्न लाइन खोज्नुहोस्,Indexesलाई हटाउनुहोस्:
<Directory /var/www/>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
सेटिङ लागू गर्नुहोस्:
sudo systemctl restart apache2

अनावश्यक Apache मोड्युलहरूलाई असक्षम गर्नुहोस्

sudo a2dismod autoindex
sudo a2dismod status
sudo systemctl restart apache2

सुरक्षा हेडरहरू थप्नुहोस्

वेबसाइटलाई सुरक्षित गर्नको लागि, उपयुक्त सुरक्षा हेडरहरू थप्नुहोस्।

mod_headers लाई सक्रिय गर्नुहोस्

sudo a2enmod headers
sudo systemctl restart apache2

हेडरहरू सेट गर्नुहोस्

sudo nano /etc/apache2/sites-available/example.com.conf
निम्नलाई<VirtualHost>भित्र थप्नुहोस्:
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
सेटिङ लागू गर्नुहोस्:
sudo systemctl restart apache2

समस्या निवारण

फायरवालको सेटिङ जाँच्नुहोस्

sudo ufw status

Apache को सेटिङ त्रुटि जाँच

sudo apachectl configtest
आउटपुट:
Syntax OK

SSH कनेक्सन हुन नसक्दा

पोर्ट परिवर्तन गरेपछि SSH कनेक्सन हुन नसक्दा, निम्नानुसार नयाँ पोर्ट निर्दिष्ट गरेर कनेक्ट गर्नुहोस्।
ssh -p 2222 user@server-ip

सारांश

यो सेक्सनमा,वेब सर्वरलाई सुरक्षित रूपमा सञ्चालन गर्नको लागि सुरक्षा सुदृढीकरण उपायहरूव्याख्या गरियो। यो लेखबाट सिकेका कुराहरू:
  • UFW (फायरवाल) को सेटिङ
  • SSH को सुरक्षा (पोर्ट परिवर्तन – Fail2Ban)
  • Apache को सुरक्षा सेटिङ (संस्करण जानकारी लुकाउने – डाइरेक्टरी सूची असक्षम)
  • सुरक्षा हेडरहरू थप्ने

7. कार्यसम्पादन अनुकूलन

Apache को समायोजन

Apache को पूर्वनिर्धारित सेटिङमा, अनुरोधहरूको प्रक्रिया दक्षता इष्टतम नहुन सक्छ। निम्न सेटिङहरूलाई समायोजन गरेर,उच्च कार्यसम्पादन प्राप्त गर्न सकिन्छ

MPM (मल्टिप्रोसेसिङ मोड्युल) को अनुकूलन

MPM (Multi-Processing Module) ले Apache ले अनुरोधहरूलाई कसरी प्रक्रिया गर्ने निर्णय गर्छ। MPM को वर्तमान सेटिङ जाँच गर्नुहोस्:
apachectl -M | grep mpm
आउटपुट उदाहरण:
mpm_prefork_module (shared)
यदिmpm_prefork_moduleछ भने, छिटोmpm_eventमा परिवर्तन गर्न सिफारिस गरिन्छ। परिवर्तन विधि:
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

KeepAlive को सक्रियता

KeepAlive (स्थायी कनेक्सन) लाई सक्रिय गरेर, क्लाइन्टले त्यही कनेक्सनलाई पुन: प्रयोग गर्न सक्छ र अनुरोधहरूको संख्या घटाउन सकिन्छ। सेटिङ फाइल सम्पादन गर्नुहोस्:
sudo nano /etc/apache2/apache2.conf
निम्न सेटिङ जाँच गर्नुहोस्:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
सेटिङ पछि, Apache लाई पुन: सुरु गर्नुहोस्:
sudo systemctl restart apache2

क्यासको उपयोग

ब्राउजर क्यास र सर्भर क्यासको उपयोग गरेर,अनावश्यक अनुरोधहरू घटाई प्रतिक्रिया गति सुधार गर्न सकिन्छ

mod_expires को सक्रियता (ब्राउजर क्यास)

sudo a2enmod expires
sudo systemctl restart apache2
सेटिङ फाइल/etc/apache2/sites-available/example.com.confमा निम्न थप्नुहोस्:
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>
सेटिङ पछि, Apache लाई पुन: सुरु गर्नुहोस्:
sudo systemctl restart apache2

mod_cache को सक्रियता (सर्भर क्यास)

sudo a2enmod cache cache_disk
sudo systemctl restart apache2
सेटिङ फाइल/etc/apache2/sites-available/example.com.confमा निम्न थप्नुहोस्:
<IfModule mod_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheDefaultExpire 86400
</IfModule>
Apache लाई पुन: सुरु गर्नुहोस्:
sudo systemctl restart apache2

संक्षेपणको परिचय

mod_deflateप्रयोग गरेर, वेबसाइटको डाटालाई संक्षेपण गरी ट्रान्सफर आकार घटाउन सकिन्छ।

mod_deflate को सक्रियता

sudo a2enmod deflate
sudo systemctl restart apache2
सेटिङ फाइल/etc/apache2/sites-available/example.com.confमा निम्न थप्नुहोस्:
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
सेटिङ पछि, Apache लाई पुन: सुरु गर्नुहोस्:
sudo systemctl restart apache2

स्रोत सीमा

ठूलो संख्यामा अनुरोध वा अनधिकृत पहुँचको लागि तयारी गर्दै,Apache को स्रोत सीमासेटिङ महत्वपूर्ण छ।

mod_ratelimit लाई सक्रिय गर्नुहोस्

sudo a2enmod ratelimit
sudo systemctl restart apache2
सेटिङ फाइल/etc/apache2/sites-available/example.com.confमा निम्न थप्नुहोस्:
<Location />
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200
</Location>
सेटिङ पछि, Apache लाई पुन: सुरु गर्नुहोस्:
sudo systemctl restart apache2

समस्या निवारण

कार्यसम्पादन समायोजन पछि समस्या उत्पन्न भएमा, निम्न उपायहरू प्रस्तुत गरिन्छ।

Apache को त्रुटि लग जाँच गर्नुहोस्

sudo tail -f /var/log/apache2/error.log

Apache को भार स्थिति जाँच गर्नुहोस्

sudo apachectl status

सर्भरको CPU-मेमोरी उपयोग दर जाँच गर्नुहोस्

top
वा
htop
(htopछैन भनेsudo apt install htopले स्थापना गर्नुहोस्)

सारांश

यो खण्डमा,वेब सर्भरको कार्यसम्पादन सुधार्ने विधिहरूव्याख्या गरियो। यो लेखबाट सिकेका कुराहरू:
  • Apache को समायोजन (MPM को अनुकूलन – KeepAlive को सेटिङ)
  • क्यासको उपयोग (ब्राउजर क्यास – सर्भर क्यास)
  • डाटा संक्षेपण (mod_deflate को परिचय)
  • स्रोत सीमा (mod_ratelimit बाट पहुँच नियन्त्रण)

8. समस्या निवारण

Apache सुरु हुँदैन वा बन्द हुन्छ

Apache को स्थिति जाँच गर्नुहोस्

sudo systemctl status apache2
आउटपुट उदाहरण:
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since ...
Active: failedको अवस्थामा त्रुटि भएको छ।

त्रुटि लग जाँच गर्नुहोस्

sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log

प्रयोग गरिएको पोर्ट जाँच गर्नुहोस्

sudo netstat -tulnp | grep ':80'
वा
sudo lsof -i:80
पोर्ट द्वन्द्व भएको अवस्थामा,/etc/apache2/ports.confसम्पादन गर्नुहोस् र उपयुक्त पोर्ट सेट गर्नुहोस्।

SSL प्रमाणपत्र सम्बन्धी त्रुटि

SSL प्रमाणपत्रको म्याद सकिएको

sudo certbot renew --force-renewal

AH02572: Failed to configure at least one certificate

Apache को कन्फिगरेसन फाइल/etc/apache2/sites-available/example.com-le-ssl.confखोल्नुहोस् र निम्नलाई जाँच गर्नुहोस्:
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
कन्फिगरेसन सही भएको अवस्थामा, Apache लाई पुन: सुरु गर्नुहोस्:
sudo systemctl restart apache2

वेबसाइट देखाइँदैन (४०३, ४०४, ५०० त्रुटि)

४०३ निषेधित

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html

४०४ फेला पारिएन

भर्चुअल होस्ट कन्फिगरेसन/etc/apache2/sites-available/example.com.confखोल्नुहोस् रDocumentRootको पथ जाँच गर्नुहोस्।
DocumentRoot /var/www/example.com/public_html
यसबाहेक,mod_rewriteनिष्क्रिय भएको अवस्थामा:
sudo a2enmod rewrite
sudo systemctl restart apache2

५०० आन्तरिक सर्वर त्रुटि

त्रुटि लग जाँच गर्नुहोस्:
sudo tail -f /var/log/apache2/error.log
.htaccessलाई नाम परिवर्तन गरेर टार्नुहोस्:
mv /var/www/example.com/public_html/.htaccess /var/www/example.com/public_html/.htaccess.bak

उच्च भार वा प्रदर्शन समस्या

Apache को भार स्थिति जाँच गर्नुहोस्

top
वा
htop

अनावश्यक Apache मोड्युलहरूलाई निष्क्रिय गर्नुहोस्

sudo a2dismod status
sudo a2dismod autoindex
sudo systemctl restart apache2

क्यासको अनुकूलन

sudo a2enmod cache cache_disk

नेटवर्क सम्बन्धी समस्या

सर्वरको IP ठेगाना जाँच गर्नुहोस्

ip a
वा
curl ifconfig.me

पोर्ट खुला छ कि जाँच गर्नुहोस्

sudo netstat -tulnp | grep LISTEN
वा
sudo lsof -i :80
८० नम्बर (HTTP) वा ४४३ नम्बर (HTTPS) सूचीमा नभएको अवस्थामा, फायरवाल समायोजन गर्नुहोस्:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

सारांश

यो खण्डमा,Ubuntu वेब सर्वर (Apache) मा सजिलै हुने त्रुटिहरूको कारण र समाधानव्याख्या गरियो। यो लेखबाट सिकेका कुराहरू:
  • Apache सुरु नहुने बेलाको समाधान
  • SSL प्रमाणपत्र सम्बन्धी त्रुटि समाधान
  • ४०३ / ४०४ / ५०० त्रुटिहरूको कारण र सुधार
  • प्रदर्शनको अनुकूलन
  • नेटवर्क जडान जाँच

9. सारांश

अहिलेसम्म सिकेका कुराहरू

प्रत्येक खण्डमा व्याख्या गरिएका सामग्रीहरूको समीक्षा गरौं।
खण्डसामग्री
1. सुरुवातUbuntu Web सर्वरको आधारभूत अवधारणा र यो लेखको उद्देश्य
2. Ubuntu को स्थापना र प्रारम्भिक सेटिङOS को स्थापना, अपडेट, फायरवाल सेटिङ
3. Apache को स्थापना र आधारभूत सेटिङApache को परिचय, सुरुवात, सञ्चालन जाँच
4. भर्चुअल होस्टको सेटिङएकभन्दा बढी वेबसाइटहरू होस्ट गर्ने सेटिङ
5. SSL/TLS को परिचयLet’s Encrypt प्रयोग गरेर HTTPS बनाउने
6. Web सर्वरको सुरक्षा मजबुत बनाउनेफायरवाल सेटिङ, SSH सुरक्षा, Apache को सुरक्षा
7. प्रदर्शन अनुकूलनक्यास, डाटा संपीडन, Apache को अनुकूलन सेटिङ
8. समस्या निवारणApache को त्रुटि सम्बोधन, SSL समस्या सुधार, लोड व्यवस्था

अर्को चरणहरू

Ubuntu Web सर्वरको आधारभूत सेटिङ सम्पन्न भएपछि, यस्ताप्रयोगात्मक सेटिङ वा प्रविधिहरूसिकेर, थप व्यावहारिक सर्वर वातावरण निर्माण गर्न सकिन्छ। ✅WordPress वा PHP एप्लिकेसनको परिचयडाटाबेस सर्वर (MySQL / MariaDB) को सेटअपरिभर्स प्रोक्सी (Nginx + Apache) को निर्माणअटोस्केल वातावरणको निर्माण(AWS, GCP, Azure को प्रयोग) ✅लग व्यवस्थापन र मोनिटरिङ(fail2ban वा logwatch को प्रयोग)

सामान्य प्रश्नहरू (FAQ)

Q1: Ubuntu मा Nginx र Apache मध्ये कुन छान्ने?

A1:स्थिर सामग्री वितरण मुख्य भए Nginx, गतिशील सामग्री (PHP आदि) धेरै भए Apacheसिफारिस। Nginx लाई रिभर्स प्रोक्सीको रूपमा पनि प्रयोग गर्न सकिन्छ, Apache सँग संयोजन पनि सम्भव।

Q2: SSL प्रमाणपत्रको अपडेट स्वचालित गर्न सकिन्छ?

A2:Certbot स्थापना गरेमा, स्वचालित अपडेट सम्भव छ।कमान्डsudo certbot renew --dry-runले परीक्षण गर्नुहोस्, तालिकामाcronसेट गर्नु राम्रो हुन्छ।

Q3: Web सर्वरको सुरक्षालाई थप मजबुत बनाउन कसरी?

A3:Fail2Ban ले ब्रुट फोर्स आक्रमण रोक्नुहोस्, Apache को संस्करण जानकारी लुकाउनुहोस्, अनावश्यक मोड्युलहरू निष्क्रिय गर्नुहोस्आधारभूत उपायहरू हुन्।

Q4: Apache को प्रदर्शन सुधार्ने विधि के छ?

A4:MPM को उपयुक्त छनोट (event / worker), क्यास सेटिङ (mod_cache), डाटा संपीडन (mod_deflate) गर्नुहोस्

Q5: वेबसाइटले “403 Forbidden” त्रुटि दिने कारण के हो?

A5:डाइरेक्टरीको स्वामित्व www-data मा सेट छ कि जाँच गर्नुहोस्, chmod -R 755 ले उपयुक्त अनुमति सेट गर्नुहोस्

सारांश

Ubuntu Web सर्वरको निर्माण आधारभूत सेटिङदेखि उन्नत अनुकूलनसम्म धेरै चरणहरू चाहिन्छ, तर एकपटक बुझ्न सकिएमा अत्यन्त शक्तिशाली वातावरण निर्माण गर्न सकिन्छ। 🚀यो लेखलाई सन्दर्भ गर्दै, थप सुरक्षित र छिटो Web सर्वर निर्माण गर्नुहोस्, सञ्चालन सीपहरू सुधार्नुहोस्!🚀
年収訴求