EC2 वर website host करणं: web servers, Apache httpd, /var/www/html, port 80 आणि curl
चला, सुरू करूया. आत्तापर्यंत आपण Linux शिकलो: folders, files, users आणि permissions. आज हे सगळं वापरून cloud engineer चं खरं काम करायचं: server वर website live करायची. आधी बघू की कोणी website उघडतो तेव्हा नक्की काय होतं, web server म्हणजे काय, आणि website hosting आणि API hosting मध्ये फरक काय. मग आपल्या EC2 server वर Apache install करायचा, start करायचा, /var/www/html मध्ये आपलं स्वतःचं page ठेवायचं, port 80 उघडायचा आणि site कुठल्याही browser मधून, अगदी तुमच्या phone वरून सुद्धा, उघडायची. Server चालू ठेवा आणि प्रत्येक command माझ्यासोबत type करा.
या class मध्ये काय शिकणार
- Hosting कुठे येतं: development, test आणि production
- कोणी website उघडतो तेव्हा काय होतं
- Web server म्हणजे काय: Apache, Nginx आणि बाकीचे
- Website hosting vs API hosting
- Static vs dynamic websites
sudo yum install httpdने Apache install करणंhttpd -vने install check करणं- Software vs service: start, status आणि enable
- Apache start होत नसेल तर काय करायचं
/var/www/htmlमध्ये तुमचं पहिलं page- Security Group मध्ये port 80 उघडणं
- Site उघडणं, आणि
curlने debug करणं - आणखी pages add करणं
1. Hosting का: laptop पासून live website पर्यंत
का. Developers website त्यांच्या laptops वर लिहितात. तिथे ती जगात कोणालाच उघडता येत नाही. कोणीतरी ती अशा server वर ठेवायला पाहिजे जो दिवस-रात्र चालू असतो आणि internet वरून कोणीही गाठू शकतो. ते काम cloud engineer करतो, आणि त्याला hosting म्हणतात.
काय. Software साधारणपणे तीन ठिकाणांमधून जातं:
- Development: developers स्वतःच्या laptops वर code लिहितात.
- Test: testers ते test server वर check करतात.
- Production: खरे users जो उघडतात तो live server.
Cloud engineers website लिहीत नाहीत. ती ज्या servers वर राहते ते servers ते बनवतात आणि चालवतात. Hosting चे दोन प्रकार:
- Website hosting: server तयार web pages पाठवतो (HTML, CSS, JavaScript, images).
- API (backend) hosting: server backend code चालवतो आणि data पाठवतो, बहुतेक JSON मध्ये.
Figure 1. Code developers च्या laptops वरून test server वर आणि मग production वर जातो. Cloud engineer तो host करतो: website hosting pages पाठवतं, API hosting data पाठवतं.
या chapter मध्ये एका EC2 server वर website hosting सुरुवातीपासून शेवटपर्यंत करायचं.
2. कोणी website उघडतो तेव्हा काय होतं
का. Request कुठल्या रस्त्याने जाते हे माहीत असेल, तर site उघडत नसताना कुठे बघायचं ते कळतं.
काय. समजा तुमची site www.mysite.com आहे आणि कोणी http://www.mysite.com/about.html उघडतो:
- Browser DNS ला
www.mysite.comचा IP address विचारतो. DNS server चा public IP सांगतो. - Browser request त्या IP ला पाठवतो.
httpआहे आणि port number दिलेला नाही, म्हणून port 80, HTTP चा default.httpsसाठी default 443. - Server वर एक program port 80 वर 24 तास ऐकत बसलेला असतो. तो program म्हणजे web server.
- Web server request वाचतो ("मला
about.htmlदे") आणि ती file त्याच्या web folder मध्ये शोधतो. Amazon Linux वर Apache असेल तर तो folder/var/www/html. - File असेल तर ती browser कडे परत जाते, आणि browser ती दाखवतो. नसेल तर उत्तर 404 Not Found.
- URL मध्ये file चं नावच नसेल, जसं
http://www.mysite.com/, तर web server folder चं home page,index.html, पाठवतो.
Figure 2. Animation: DNS नावाचा public IP करतो, request port 80 ला पोचते, Apache /var/www/html मध्ये बघतो आणि file परत पाठवतो, file नसेल तर 404 Not Found.
Ports 80 आणि 443 तुम्ही Public आणि private IP, ports आणि IP classes मध्ये शिकलात. Domain names आणि DNS चा वेगळा chapter पुढे येईल; आज आपण server चा public IP सरळ वापरतोय.
Example 1: एकाच server वर तीन URLs.
http://PUBLIC_IP/ने/var/www/html/index.htmlमिळतं.http://PUBLIC_IP/about.htmlने/var/www/html/about.htmlमिळतं.http://PUBLIC_IP/contact.html, अशी file नसेल तर,404 Not Foundदेतं.
Classroom line
Whatever pages are in the html folder are what go back as the response.
Class मधलं वाक्य
html folder मध्ये जी pages आहेत, तीच response म्हणून जातात.
Classroom line – हिंदी
"HTML directory ke andar jo bhi pages hai, wo page hi response mein ja raha hai."
Correction
Web files /var/www/html मध्येच ठेवायच्या असा Linux चा कुठलाही नियम नाही. तो Amazon Linux वरचा Apache चा default web folder आहे, जो /etc/httpd/conf/httpd.conf मधल्या DocumentRoot "/var/www/html" या line ने ठरतो. Admin तो दुसरीकडे बदलू शकतो. /bin किंवा /etc सारखे folders operating system साठी आहेत, web files साठी कधीच नाहीत.
3. Web server म्हणजे काय
का. Server machine वर बरेच programs चालतात. Browser ला उत्तर फक्त एकाच प्रकारचा program देऊ शकतो: जो port 80 (किंवा 443) वर ऐकतो, HTTP request समजतो आणि response परत पाठवतो. तो program म्हणजे web server.
काय. नेहमीचे web servers:
- Apache HTTP Server: open source आणि free. Amazon Linux वर package आणि program दोघांचं नाव
httpd. - Nginx: हा पण open source आणि free. त्याच्यामागची company paid support आणि जास्तीचे features विकते.
- IIS: Windows वरचा Microsoft चा web server, .NET sites साठी खूप वापरला जातो.
- Lighttpd: छोटा, हलका web server.
अजून दोन नावं ऐकायला मिळतील:
- Gunicorn आणि Uvicorn हे app servers आहेत. ते Python backend code चालवतात, बहुतेक Nginx किंवा Apache च्या मागे.
- XAMPP आणि WAMP हे laptop वर practice साठीचे bundles आहेत. एका installer मधून Apache, MySQL किंवा MariaDB, आणि PHP मिळतात.
Figure 3. Web servers (Apache, Nginx, IIS, Lighttpd), Python code चालवणारे app servers (Gunicorn, Uvicorn), आणि laptop वर practice साठी bundles (XAMPP, WAMP).
या chapter मध्ये आपण Apache वापरतोय. Nginx पुढे येईल; concept तोच आहे.
Correction
Class board वरचे तीन मुद्दे, दुरुस्त करून:
- Nginx Apache च्या code पासून बनवलेला नाही. Igor Sysoev ने तो वेगळा लिहिला, एकाच वेळी खूप सारे connections handle करण्यासाठी.
- XAMPP आणि WAMP हे स्वतःचे web servers नाहीत. ते bundles आहेत, ज्यांच्या आत Apache असतो.
- Board वर Apache आणि Nginx चे speed चे आकडे (requests per second) होते. ते आपण काढून टाकलेत: खरा speed server, site आणि settings वर अवलंबून असतो, आणि कुठलाही एक आकडा खरा नसतो.
4. Website hosting vs API hosting
का. "Hosting" म्हणजे दोन वेगवेगळी कामं, आणि दोघांना server वर वेगवेगळ्या गोष्टी install कराव्या लागतात.
काय. समजा आपण Instagram आहोत. लोक ते वेगवेगळ्या size च्या phones, tablets, laptops, अगदी car screens वर उघडतात. Server ने ठरलेल्या layout चं एकच तयार HTML page पाठवलं, तर ते बऱ्याच screens वर बिघडलेलं दिसेल.
Classroom line
The layout will break.
Class मधलं वाक्य
Layout फाटेल, बिघडेल.
Classroom line – हिंदी
"Layout fat jayega."
म्हणून अशी apps काम वाटून घेतात:
- तुमच्या phone वरचं app server कडे फक्त data मागतं, उदाहरणार्थ user number 1001 चं profile.
- Server वर backend code (Python, Node.js, Java, .NET) तो data database मधून (MySQL, MongoDB) वाचतो.
- Server data JSON मध्ये परत पाठवतो, जो एक सोपा key-value format आहे.
- App ला स्वतःच्या screen ची size माहीत असते, आणि ते screen स्वतः काढतं.
Example 2: JSON उत्तर.
{"username": "ravi", "followers": 500}
Text values double quotes मध्ये असतात; numbers नाहीत.
Figure 4. Website hosting /var/www/html मधून पूर्ण HTML page पाठवतं. API hosting backend code आणि database मधून फक्त data (JSON) पाठवतं, आणि प्रत्येक app स्वतःची screen काढतं.
म्हणजे:
- Website hosting: server पूर्ण pages पाठवतो. Web server आणि files लागतात.
- API (backend) hosting: server data पाठवतो. Language (Python, Node.js, Java किंवा .NET), app server, बऱ्याचदा database, आणि समोर web server लागतो. तो code developers लिहितात; server तयार करून deploy करणं हे cloud engineer चं काम.
Correction
Board वर https://instagram.com/getprofile.py?id=1001 सारखा address दाखवला होता. तो फक्त "server कडे data मागणं" ही कल्पना दाखवण्यासाठी होता. खऱ्या apps त्यांच्या URLs मध्ये .py files दाखवत नाहीत. App server (Python साठी Gunicorn किंवा Uvicorn) साध्या, स्वच्छ addresses मागे code चालवतो.
5. Static vs dynamic websites
का. Site host करण्याआधी ती कुठल्या प्रकारची आहे ते माहीत पाहिजे, कारण dynamic site ला server वर खूप जास्त गोष्टी लागतात.
काय. Static website फक्त अशा files ची बनलेली असते ज्या browser ला समजतात:
- HTML: page ची रचना आणि content.
- CSS: ते कसं दिसतं (colours, fonts, layout).
- JavaScript: code जो browser मध्ये चालतो, server वर नाही.
- Images आणि videos.
प्रत्येक visitor ला त्याच files मिळतात. Server फक्त file शोधतो आणि पाठवतो.
Classroom line
(Static is the site) whose content doesn't change.
Class मधलं वाक्य
ज्याचा content बदलत नाही (ती static site).
Classroom line – हिंदी
"Jiska content change nahi hota."
Dynamic website ला यांच्याशिवाय हे पण लागतं:
- Server-side language, जसं Python, PHP, Node.js किंवा Java.
- Database.
Server प्रत्येक visitor साठी त्याच्या data वरून page बनवतो. समजा reels app: प्रत्येक user ला वेगळे reels दिसतात, त्याने आधी काय बघितलं त्यावरून निवडलेले, आणि ते database मध्ये ठेवलेलं असतं.
Classroom line
Everyone sees different reels. Not everyone sees the same reels.
Class मधलं वाक्य
प्रत्येकाला वेगवेगळे reels दिसतील... सगळ्यांना same reels नाही दिसणार.
Classroom line – हिंदी
"Sabko alag alag reels dikhenge... Sabhi ko same reels nahi dikhenge."
Figure 5. Static site म्हणजे HTML, CSS, JavaScript आणि media, सगळ्यांसाठी सारखी. Dynamic site मध्ये server-side language आणि database येतात आणि प्रत्येक visitor साठी page बनतं.
Example 3: HTML हिशोब करत नाही. हे HTML file मध्ये लिहा आणि उघडा:
a=2
b=3
c=a+b
Browser अगदी तेच text दाखवतो. तो 5 दाखवत नाही. HTML फक्त page वर काय आहे ते सांगतं; हिशोब करायला browser मध्ये JavaScript, किंवा server वर language लागते.
Correction
HTML ही markup language आहे: ती text ला headings, paragraphs, links वगैरे म्हणून mark करते. ती programming language नाही, आणि "view engine" पण नाही. आणि PHP server वर चालते, म्हणून PHP site dynamic असते, static नाही.
आज आपण static site host करतोय. Dynamic sites पुढच्या chapters मध्ये येतील.
6. Step 1: Amazon Linux server launch करा आणि connect करा
काय. हे तुम्ही Root user, IAM users, MFA आणि पहिला EC2 server आणि EC2 च्या आत मध्ये केलंय:
- EC2 console मध्ये Amazon Linux 2023 AMI ने instance launch करा.
- तुमचा key pair आणि SSH (port 22) allow करणारा Security Group वापरा.
ec2-userम्हणून SSH ने connect करा.
"Live" म्हणजे site अशा server वर आहे जो internet वरून कोणीही गाठू शकतो. Public IP असलेला तुमचा EC2 server अगदी तसाच आहे. Ubuntu servers थोडे वेगळे चालतात (दुसरा package manager, आणि package चं नाव apache2); हा chapter Amazon Linux साठी आहे.
7. Step 2: yum ने Apache install करा
का. नवीन server वर web server नसतो. आधी check करा:
[ec2-user@ip-172-31-xx-xx ~]$ httpd -v
-bash: httpd: command not found
command not found म्हणजे Linux ज्या folders मध्ये commands शोधतो, तिथे httpd नावाचा program नाही. सोप्या भाषेत: install नाही.
काय. एका command ने install होतो:
sudo yum install httpd
याचे चार भाग वाचा:
sudo: root म्हणून चालवा. पूर्ण system साठी software install करणं हे admin चं काम.yum: package manager, software install, update आणि remove करणारं tool.install: काय करायचं.removeने uninstall होईल.httpd: Apache चं package नाव.
Classroom line
Why sudo? Only root may install software, so we used sudo.
Class मधलं वाक्य
"Sudo kashyasathi? Software install karnyacha permission fakta root user kade ahe mhanun sudo waparlay."
Sudo कशासाठी? Software install करण्याची permission फक्त root user कडे आहे, म्हणून sudo वापरलाय.
Classroom line
Why sudo? Only root may install software, so we used sudo.
Figure 6. sudo yum install httpd -y चे भाग: sudo, package manager yum, action install, package httpd, आणि प्रश्नाला आपोआप उत्तर देणारा -y.

Class board वरून: sudo yum install httpd चे भाग: yum म्हणजे package manager, install म्हणजे action, httpd म्हणजे software package.
Package manager तुमच्यासाठी काय करतो.
- कुठून download करायचं ते त्याला माहीत असतं. Download चे addresses (repositories)
/etc/yum.repos.d/मधल्या.repofiles मध्ये ठरवलेले असतात. httpdला आणखी काय लागतं (त्याच्या dependencies) ते त्याला माहीत असतं, आणि तो ते आधी, बरोबर क्रमाने install करतो.- तो packages (compressed RPM files) download करतो आणि install करतो.
- तो कुठल्याही folder मधून चालतो; आधी कुठे
cdकरायची गरज नाही.
कसं दिसतं. Amazon Linux 2023 वरच्या खऱ्या output ची सुरुवात (लांब lines ... ने छोट्या केल्या आहेत):
[ec2-user@ip-172-31-xx-xx ~]$ sudo yum install httpd
...
Dependencies resolved.
...
Installing:
httpd x86_64 2.4.68-1.amzn2023.0.1 amazonlinux ...
Installing dependencies:
apr x86_64 ...
apr-util x86_64 ...
httpd-core x86_64 ...
httpd-filesystem noarch ...
httpd-tools x86_64 ...
...
Installing weak dependencies:
mod_http2 x86_64 ...
mod_lua x86_64 ...
...
Transaction Summary
...
Install 14 Packages
Total download size: ...
Installed size: ...
Is this ok [y/N]:
- Installing: तुम्ही मागितलेला package.
- Installing dependencies: ज्यांच्याशिवाय
httpdचालूच शकत नाही ते packages. - Installing weak dependencies: default ने सोबत येणाऱ्या उपयोगी extra गोष्टी.
- Total download size हा Installed size पेक्षा कमी असतो, कारण packages compressed download होतात आणि server वर उघडले जातात.
Is this ok [y/N]:तुम्हाला confirm करायला सांगतो. CapitalNहा default आहे: नुसता Enter दाबला तर नाही.
तुमच्या server वर version आणि packages ची संख्या वेगळी असू शकते; Amazon Linux चे updates येतात तसे ते बदलतात.
Classroom line
Whatever file is downloaded is compressed, so its size is smaller.
Class मधलं वाक्य
जी पण file download होते ना, ती compressed असते. म्हणून तिची size कमी असते.
Classroom line – हिंदी
"Jo bhi downloading file hota hai na, wo compressed file hota hai. Toh uska size kam rahega."
Example 4: आधी N, मग -y ने install. N type केलं तर काहीच install होत नाही:
Is this ok [y/N]: N
Operation aborted.
-y लावलं की आधीच yes उत्तर दिलं जातं. आपण हीच command वापरतो:
sudo yum install httpd -y
ते download करतं, install करतं आणि शेवटी हे दाखवतं:
Complete!
Correction
Class मध्ये सांगितलं की dnf हा yum पेक्षा नवीन आणि fast आहे. Amazon Linux 2023 वर ते एकच program आहेत: /usr/bin/yum आणि /usr/bin/dnf दोघं dnf-3 कडे point करतात. म्हणून speed मध्ये काहीच फरक नाही, आणि या course मधली प्रत्येक yum command dnf ने तशीच चालते. (जुन्या Amazon Linux 2 मध्ये खरा जुना yum होता.)
8. Step 3: install check करा
का. पुढे जाण्याआधी Apache खरंच आहे ना ते confirm करा.
कसं. त्याचं version विचारा:
[ec2-user@ip-172-31-xx-xx ~]$ httpd -v
Server version: Apache/2.4.68 (Amazon Linux)
Server built: ...
Version आलं म्हणजे install आहे. command not found म्हणजे नाही.
Version चे flags प्रत्येक program चे वेगळे असतात.
- बरेच programs
--versionघेतात. - Apache चा
httpdversion साठी-vवापरतो. httpd -V(capital V) version सोबत तो कसा build झाला तेही दाखवतो.
9. Step 4: software vs service, start आणि status
का. Install करणं पुरेसं नाही. Web server दिवस-रात्र चालू राहायला हवा आणि port 80 वर ऐकत राहायला हवा.
काय. काही software आपण उघडतो, वापरतो आणि बंद करतो, जसं editor. काही software background मध्ये सतत चालू राहतं आणि कामाची वाट बघतं. त्याला service म्हणतात. Apache, Nginx आणि MySQL या services आहेत.
Classroom line
Software that keeps running 24/7 in the background is what we call a service.
Class मधलं वाक्य
जे software 24/7 background मध्ये चालू राहतं, त्याला आपण service म्हणतो.
Classroom line – हिंदी
"Ek aisa software jo 24/7 background mein running mein rahega usko hum kahenge service."
कसं. Start करा, मग check करा:
[ec2-user@ip-172-31-xx-xx ~]$ sudo service httpd start
Redirecting to /bin/systemctl start httpd.service
पहिली line error नाही. Amazon Linux 2023 वर service हा एक छोटा helper आहे, जो काम systemctl कडे देतो (services सांभाळणारं tool), आणि तसं तुम्हाला सांगतो. sudo service httpd start आणि sudo systemctl start httpd एकच काम करतात.
आता status:
[ec2-user@ip-172-31-xx-xx ~]$ sudo service httpd status
Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; ...)
Active: active (running) since ...
...
... systemd[1]: Started httpd.service - The Apache HTTP Server.
... httpd[...]: Server configured, listening on: port 80
तीन गोष्टी वाचा:
Loaded: loaded: service install आहे आणि system ला माहीत आहे.Active: active (running)(तुमच्या screen वर हिरवं): ती आत्ता चालू आहे.listening on: port 80: ती browsers ची वाट बघतेय.

Class board वरून: आजच्या चार commands: -y ने install, httpd -v, -V किंवा --version ने version check, मग service start करून तिचा status check.
Example 5: status कडून मिळणारी तीन उत्तरं. httpd install च नसेल तेव्हा:
Redirecting to /bin/systemctl status httpd.service
Unit httpd.service could not be found.
बाकीची दोन:
- Install आहे पण start नाही:
Active: inactive (dead). उपाय:sudo service httpd start. - चालू:
Active: active (running).
प्रत्येक boot ला start. start ने Apache आत्ता चालू होतो, पण reboot नंतर (किंवा instance stop करून start केल्यावर) तो बंदच राहतो. नवीन install केलेला httpd boot ला start व्हायला set नसतो; Loaded: line मधलं disabled तेच सांगतं. ते एकदा चालू करा:
[ec2-user@ip-172-31-xx-xx ~]$ sudo systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Figure 7. Animation: web server च्या चार अवस्था. Install नाही, install पण बंद, चालू, आणि Security Group मध्ये port 80 उघडा, तेव्हा शेवटी browser मध्ये page दिसतं.
Correction
Board वर states "loaded, inactive" आणि "unloaded, inactive" अशा लिहिल्या होत्या. खरे शब्द वेगळे आहेत. Install आहे पण बंद असेल तर Active: inactive (dead) दिसतं. Install नसेल तर Unit httpd.service could not be found.
10. Apache start होत नसेल तर
का. start fail झालं तर status त्याचं कारण सांगतो. परत install करत बसण्याऐवजी तो वाचायला शिका.
काय. तीन नेहमीची कारणं:
- Install नाही. Status म्हणतो
Unit httpd.service could not be found.आधी install करा. - Port 80 आधीच कोणीतरी घेतलाय. एका port वर एकच program ऐकू शकतो. दुसरा web server, समजा Nginx, आधीच port 80 वापरत असेल, तर Apache ला तो मिळत नाही.
- Config file मध्ये चूक. नवीन install वर शक्यता कमी, पण edits केल्यावर होतं.
Example 6: port 80 आधीच वापरात. Start fail होतं, sudo service httpd status मध्ये failed दिसतं, आणि त्याच्या शेवटच्या lines मध्ये (किंवा sudo journalctl -u httpd मध्ये) हे असतं:
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
उपाय: दुसरा program बंद करा (Nginx असेल तर sudo service nginx stop), मग परत sudo service httpd start.
Ravindra Bagale's Tip
Apache च्या log मध्ये तुम्हाला AH00558: httpd: Could not reliably determine the server's fully qualified domain name ... Set the 'ServerName' directive globally to suppress this message पण दिसू शकतं. घाबरू नका, ती फक्त warning आहे: Apache तरीही start होतो आणि तुमची site दाखवतो. ServerName set केलं की ती जाते, आणि ते तुम्ही site ला domain मिळाल्यावर कराल.
11. Step 5: /var/www/html मध्ये तुमचं पहिलं page
का. Developer चा खरा code server वर ठेवण्याआधी, एका छोट्या page ने setup test करा. ते page उघडलं, तर web server, folder, home page आणि port सगळं चालतंय. मग पुढे कुठलाही problem आला तर तो code मध्ये असेल, server मध्ये नाही.
काय.
/var/www/htmlहा Apache चा web folder (त्याचाDocumentRoot).httpdpackage install होतानाच तो बनतो, आणि रिकामा असतो.- Home page चं नाव अगदी
index.htmlच पाहिजे. Apache चीDirectoryIndex index.htmlही setting file नाव नसलेल्या URL साठी तेच page देते. - तुम्ही
index.htmlठेवेपर्यंत Apache त्याचं स्वतःचं test page दाखवतो, ज्याचं title "It works! Apache httpd" असतं.
Example 7: folder मध्ये जा. cd /var/ type करा आणि प्रत्येक भाग पूर्ण करायला Tab दाबा:
[ec2-user@ip-172-31-xx-xx ~]$ cd /var/www/html
[ec2-user@ip-172-31-xx-xx html]$ pwd
/var/www/html
[ec2-user@ip-172-31-xx-xx html]$ ls
[ec2-user@ip-172-31-xx-xx html]$
रिकामा.
Example 8: sudo शिवाय save होत नाही. Folder root चा आहे:
[ec2-user@ip-172-31-xx-xx html]$ ls -ld /var/www/html
drwxr-xr-x. 2 root root 6 Jan 5 10:15 /var/www/html
rwxr-xr-x: फक्त owner, म्हणजे root, लिहू शकतो. हे तुम्ही chmod सविस्तर मध्ये शिकलात. म्हणून ec2-user म्हणून nano index.html केलं तर editor उघडतो, पण save करताना screen च्या खाली error येतो:
[ Error writing index.html: Permission denied ]
touch index.html पण तसंच fail होतं:
touch: cannot touch 'index.html': Permission denied
Classroom line
Will nano index.html open (and save) or not?
Class मधलं वाक्य
"nano index.html he file open hova ya nahi hova?"
nano index.html ही file open होईल की नाही होणार?
Classroom line
Will nano index.html open (and save) or not?
Example 9: sudo ने बनवा. Save न करता nano मधून बाहेर या (Ctrl+X, मग N), आणि मग:
sudo nano index.html
एक line type करा:
<h1>Hello from my EC2 server</h1>
Save करून बाहेर: Ctrl+X, मग Y, मग Enter. Check करा:
[ec2-user@ip-172-31-xx-xx html]$ ls -l
total 4
-rw-r--r--. 1 root root 34 Jan 5 10:15 index.html
File root ची आहे, आणि सगळे ती वाचू शकतात (others साठी r--). Apache ला एवढंच लागतं.
Correction
Class मधले दोन छोटे मुद्दे. httpd install होताच /var/www/html तयार असतो; service start केल्यावर तो बनत नाही. आणि ec2-user तिथे लिहू शकत नाही याचं कारण "/var मध्ये permission नाही" असं सगळीकडचं नाही: /var/www/html हाच folder root चा आहे, mode 755.
12. Step 6: Security Group मध्ये port 80 उघडा
का. Apache चालू आहे आणि page पण आहे, पण आत्ता http://PUBLIC_IP/ उघडलं, तर browser नुसता थांबून राहतो आणि मग हार मानतो. Server च्या समोरची एक गोष्ट request अडवते: Security Group.
काय. Security Group हा तुमच्या instance चा firewall आहे. त्यात rules च्या दोन lists असतात:
- Inbound rules: तुमच्या server कडे येणारं traffic. Launch ला बहुतेक एकच rule असतो: port 22 वर SSH. ज्याला rule नाही ते सगळं blocked.
- Outbound rules: तुमचा server internet कडे स्वतः सुरू करतो ते traffic, उदाहरणार्थ
yumpackages download करतो ते. Default ने सगळं outbound traffic allowed असतं.
आत allow झालेल्या request चं उत्तर आपोआप बाहेर जातं. तुमच्या website च्या उत्तरांसाठी outbound rule लागत नाही.

Class board वरून: Security Group हा firewall आहे, ज्यात दोन प्रकारचे rules: server कडे येणाऱ्या requests साठी inbound rules, आणि server बाहेर पाठवतो त्या requests साठी outbound rules.
Figure 8. Server समोरचा Security Group. Inbound SSH 22 (launch पासूनचा) आणि 0.0.0.0/0 कडून HTTP 80 आत येतात, बाकी सगळं blocked; outbound default ने उघडं.
कसं. EC2 console मध्ये:
- Instances उघडा आणि तुमचा instance select करा.
- Security tab उघडा.
- Security group च्या link वर click करा (त्याचा ID
sg-ने सुरू होतो). - Edit inbound rules वर click करा.
- Add rule वर click करा.
- Type: HTTP निवडा. Port 80 आपोआप भरतो.
- Source: Anywhere-IPv4 निवडा, म्हणजे
0.0.0.0/0, "कुठल्याही IP कडून". - Save rules वर click करा.

Class board वरून: Edit inbound rules: Add rule, type HTTP, port 80, source 0.0.0.0/0.
Classroom line
Don't touch the rule that's already there.
Class मधलं वाक्य
जो rule आधीपासून add आहे, त्याला हात लावायचा नाही.
Classroom line – हिंदी
"Jo rule pehle se add hai na unko hath nahi lagana hai."
Ravindra Bagale's Tip
खूप students HTTP add करताना आधीचा SSH rule edit किंवा delete करतात. मग त्यांचं स्वतःचं SSH connect होत नाही. नवीन rule add करा; port 22 चा rule आहे तसाच ठेवा. पुढे HTTPS साठी अजून एक rule add कराल: type HTTPS, port 443.
13. Step 7: तुमची website उघडा
कसं.
- EC2 console मधून तुमच्या instance चा Public IPv4 address copy करा.
- Browser मध्ये
http://आणि मग IP type करा:http://PUBLIC_IP/. - तुम्हाला Hello from my EC2 server दिसेल.
Classroom line
Now our website is live for the whole world.
Class मधलं वाक्य
आता आपली website पूर्ण जगासाठी live आहे.
Classroom line – हिंदी
"Abhi apna website puri duniya ke liye live hai."
Example 10: site खरंच live आहे याचे पुरावे.
- तोच address तुमच्या phone वर, mobile data वर उघडा. तिथेही चालतो.
- Browser मध्ये page वर right-click करून View Page Source निवडा. तुम्ही nano मध्ये type केलेली line अगदी तशीच दिसते.
- Server वर परत येऊन
historyचालवा, आज वापरलेल्या सगळ्या commands दिसतात. त्या notes म्हणून ठेवा.
Correction
http:// स्वतः लिहा. नुसता IP type केला तर काही browsers आधी https:// try करतात. आपल्या server वर अजून HTTPS (port 443) नाही, म्हणून तो प्रयत्न fail होतो आणि site बंद आहे असं वाटतं. पुढे http:// लिहिलं की browser port 80 वापरतो.
14. curl ने debugging
का. Browser मध्ये काहीच दिसत नसेल, तर कळायला पाहिजे: problem server च्या आत आहे की बाहेर? curl एका command मध्ये हे सांगतो.
काय. curl हा command-line program आहे जो web server कडे page मागतो, browser पाठवतो तशीच request, पण page काढण्याऐवजी raw HTML print करतो. localhost म्हणजे "हीच machine", म्हणून request Security Group मधून जातच नाही.
Example 11: server वर.
[ec2-user@ip-172-31-xx-xx ~]$ curl http://localhost
<h1>Hello from my EC2 server</h1>
- तुमचं HTML दिसलं: Apache आणि file बरोबर आहेत. Problem बाहेर आहे: Security Group चा HTTP 80 rule,
http://ऐवजीhttps://, किंवा चुकीचा public IP (stop आणि start नंतर तो बदलतो). - Apache चं test page किंवा error दिसलं: problem आत आहे. Service चा status, folder आणि file चं नाव check करा.
Example 12: test page म्हणजे "अजून index.html नाही".
[ec2-user@ip-172-31-xx-xx ~]$ curl -s http://localhost | grep title
<title>It works! Apache httpd</title>
Example 13: नसलेलं page.
[ec2-user@ip-172-31-xx-xx ~]$ curl http://localhost/about.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
Example 14: फक्त headers. -I page शिवाय status line आणि headers दाखवतो:
[ec2-user@ip-172-31-xx-xx ~]$ curl -I http://localhost
HTTP/1.1 200 OK
Date: ...
Server: Apache/2.4.68 (Amazon Linux)
...
Content-Type: text/html; charset=UTF-8
200 OK म्हणजे page सापडलं आणि पाठवलं.
Example 15: नेहमीची typo. curl दोनदा type केलं, तर curl दुसऱ्या curl ला website चं नाव समजतो:
[ec2-user@ip-172-31-xx-xx ~]$ curl curl http://localhost
curl: (6) Could not resolve host: curl
<h1>Hello from my EC2 server</h1>
पहिली line curl नावाच्या "site" चं fail होणं आहे; दुसरी तुमचं खरं page.
Figure 9. Server वर curl http://localhost चालवा. तुमचं HTML दिसलं तर problem बाहेर आहे (Security Group, http vs https, public IP); error किंवा test page दिसलं तर आत आहे (service, folder, file चं नाव).
Classroom line
I'll go through the errors you got; mostly everyone has the same one.
Class मधलं वाक्य
"Sagle error aale na sangto... jaast karun saglyanna toch error ahe."
सगळे errors आले ना, सांगतो... जास्त करून सगळ्यांना तोच error आहे.
Classroom line
I'll go through the errors you got; mostly everyone has the same one.
नेहमीच्या चुका, जास्त वेळा होणाऱ्या आधी:
- Security Group मध्ये port 80 add केला नाही.
http://ऐवजीhttps://type केलं.- File
/var/www/htmlऐवजी home folder (~) मध्ये बनवली. - File चं नाव चुकलं, जसं
Index.htmlकिंवाindex.htm. ते अगदीindex.htmlच पाहिजे. - Apache start केला नाही, किंवा reboot नंतर परत start झाला नाही (
sudo systemctl enable httpdवापरा).
Correction
Class मध्ये सांगितलं की browser "curl command वापरतो". तसं नाही. Browser आणि curl हे दोन वेगळे programs आहेत, जे दोघं एकाच प्रकारची HTTP request पाठवतात. Browser page काढून दाखवतो; curl HTML print करतो.
15. आणखी pages, आणि एक खरं page
का. Site मध्ये एकापेक्षा जास्त pages असतात, आणि developers तुम्हाला एका line पेक्षा खूप जास्त देतात.
Example 16: दुसरं page.
sudo nano about.html
Type करा, मग Ctrl+X, Y, Enter ने save करा:
<h1>About this site</h1>
IP नंतर file चं नाव लिहून उघडा:
http://PUBLIC_IP/अजूनहीindex.htmlच दाखवतो.http://PUBLIC_IP/about.htmlनवीन page दाखवतो.- Folder मध्ये नसलेलं कुठलंही नाव
404 Not Foundदेतं.
Example 17: home page च्या जागी पूर्ण page. sudo nano index.html ने index.html परत उघडा, जुनी line delete करा आणि पूर्ण page paste करा, उदाहरणार्थ:
<!DOCTYPE html>
<html>
<head>
<title>My first website</title>
<style>
body { font-family: sans-serif; text-align: center; }
h1 { color: #0b62a4; }
</style>
</head>
<body>
<h1>My first website</h1>
<p>Hosted on Amazon EC2 with Apache.</p>
<p>This page is served by Apache from /var/www/html.</p>
</body>
</html>
Save करा आणि browser refresh करा. Restart ची गरज नाही: प्रत्येक request ला Apache file परत वाचतो.
Ravindra Bagale's Tip
Practice साठी तुम्ही AI chat tool कडून एकाच file मधलं HTML page (HTML, CSS आणि JavaScript एकत्र) लिहून घेऊ शकता. Public server वर paste करण्याआधी ते वाचा: publish तुम्ही करताय. Company मध्ये page नेहमी developers कडून येतं, बहुतेक zip file म्हणून, जी तुम्ही server वर copy करून /var/www/html मध्ये unzip करता.
16. पूर्ण setup एका page वर
काय. या chapter मधली प्रत्येक command, क्रमाने:
| Step | Command किंवा action | काय करतं |
|---|---|---|
| Check | httpd -v |
command not found = अजून install नाही |
| Install | sudo yum install httpd -y |
Apache आणि त्याच्या dependencies |
| Verify | httpd -v |
Apache/2.4.x (Amazon Linux) दाखवतं |
| Start | sudo service httpd start |
Apache आत्ता चालू (systemctl कडे दिलं जातं) |
| Status | sudo service httpd status |
active (running), port 80 वर ऐकतोय |
| Boot | sudo systemctl enable httpd |
प्रत्येक boot ला Apache start |
| Page | cd /var/www/html, sudo nano index.html |
तुमचं home page |
| Firewall | Security Group: HTTP, 80, 0.0.0.0/0 add करा |
browsers ना आत येऊ देतं |
| Open | http://PUBLIC_IP/ |
site, कुठूनही |
| Debug | curl http://localhost |
problem आत की बाहेर? |
17. घरी करून बघा
Try at home
Task 1: install करा आणि चालवा
- नवीन Amazon Linux 2023 instance वर
httpd -vचालवा. Message लिहून ठेवा. sudo yum install httpdचालवा आणिIs this ok [y/N]:लाNउत्तर द्या. मग-yने install करा.sudo service httpd startच्या आधी आणि नंतरsudo service httpd statusचालवा. दोन्ही वेळेचीActive:line लिहा.sudo systemctl enable httpdचालवा.
Task 2: तुमचं page
ec2-userम्हणूनtouch /var/www/html/test.htmlकरून बघा. Error वाचा.sudo nanoनेindex.htmlबनवा आणिcurl http://localhostने check करा.
Task 3: जगासाठी उघडा
- HTTP rule add करण्याआधी
http://PUBLIC_IP/उघडा. काय होतं? - HTTP 80 rule add करा आणि परत try करा, phone वरून पण.
about.htmladd करून उघडा. मग नसलेलं page उघडून 404 वाचा.
Task 4: debug
sudo service httpd stopने Apache बंद करा. आता browser आणिcurl http://localhostकाय दाखवतात?- परत start करा.
झालं की instance stop करा. लक्षात ठेवा, परत start केल्यावर public IP बदलतो.
Recap
थोडक्यात सांगायचं तर
- Code development, test आणि मग production मध्ये जातो; cloud engineer तो host करतो.
- Request: नाव → IP (DNS) → port 80 → web server →
/var/www/htmlमधली file → परत browser कडे, नाहीतर 404. - Web server म्हणजे port 80/443 वर ऐकणारा program: Apache (
httpd), Nginx, IIS, Lighttpd. XAMPP आणि WAMP bundles आहेत, web servers नाहीत. - Website hosting pages पाठवतं; API hosting backend code आणि database मधून data (JSON) पाठवतं.
- Static = HTML, CSS, JavaScript, media, सगळ्यांसाठी सारखं. Dynamic = server-side language + database.
sudo yum install httpd -yApache install करतो. Amazon Linux 2023 वरyumआणिdnfएकच program.Is this ok [y/N]:: नुसता Enter म्हणजे नाही;-yyes उत्तर देतो.httpd -vversion दाखवतो;command not foundम्हणजे install नाही.sudo service httpd startने start (तोsystemctlकडे redirect करतो),statusने check, आणि प्रत्येक boot साठीsudo systemctl enable httpd./var/www/htmlroot चा folder आहे: pagessudo nanoने बनवा. Home pageindex.html.- Inbound rule HTTP 80,
0.0.0.0/0कडून add करा; SSH rule ला हात लावू नका. http://PUBLIC_IP/उघडा,http://सकट. Fail झालं तर server वरcurl http://localhostसांगतो की problem आत आहे की बाहेर.
Classroom line
With just that, we can host websites.
Class मधलं वाक्य
"Tevdhyane aapan websites host karu shakto."
तेवढ्याने आपण websites host करू शकतो.
Classroom line
With just that, we can host websites.
Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. Site चं नाव www.mysite.com, pages आणि user चं नाव ravi शिकण्यासाठीची उदाहरणं आहेत; PUBLIC_IP म्हणजे तुमच्या instance चा public IPv4 address. Commands आणि messages Amazon Linux 2023 च्या test copy वर (Apache httpd 2.4.68, nano 8.3) तपासले. Prompt मधलं hostname, dates आणि version numbers उदाहरणादाखल आहेत आणि updates सोबत बदलतात.