{"id":10921,"date":"2026-04-10T13:46:24","date_gmt":"2026-04-10T13:46:24","guid":{"rendered":"https:\/\/bitep.net\/blog\/2026\/04\/10\/ubuntu-24-04-nginx-tutorial\/"},"modified":"2026-04-10T15:25:50","modified_gmt":"2026-04-10T15:25:50","slug":"ubuntu-24-04-nginx-tutorial","status":"publish","type":"post","link":"https:\/\/bitep.net\/blog\/2026\/04\/10\/ubuntu-24-04-nginx-tutorial\/","title":{"rendered":"Ubuntu 24.04-d\u0259 Nginx nec\u0259 qurulur? \u0130lk web server v\u0259 sayt setup \u00fc\u00e7\u00fcn praktik tutorial"},"content":{"rendered":"<p>Ubuntu 24.04 server qura\u015fd\u0131rd\u0131qdan sonra \u0259n \u00e7ox edil\u0259n i\u015fl\u0259rd\u0259n biri web server qurmaqd\u0131r. Bu m\u0259rh\u0259l\u0259d\u0259 \u0259n \u00e7ox se\u00e7il\u0259n h\u0259ll\u0259rd\u0259n biri <strong>Nginx<\/strong>-dir. Nginx h\u0259m sad\u0259 statik sayt servisi, h\u0259m reverse proxy, h\u0259m d\u0259 sonradan SSL, caching v\u0259 performans optimizasiyas\u0131 \u00fc\u00e7\u00fcn \u00e7ox yax\u015f\u0131 baza verir.<\/p>\n<p>Bu m\u0259qal\u0259d\u0259 Ubuntu 24.04-d\u0259 Nginx-in nec\u0259 quruldu\u011funu, servisin nec\u0259 yoxland\u0131\u011f\u0131n\u0131, firewall-da hans\u0131 portlar\u0131n a\u00e7\u0131ld\u0131\u011f\u0131n\u0131 v\u0259 ilk sad\u0259 sayt\u0131n nec\u0259 yay\u0131mland\u0131\u011f\u0131n\u0131 add\u0131m-add\u0131m g\u00f6st\u0259r\u0259c\u0259y\u0259m. M\u0259qs\u0259d sad\u0259c\u0259 paketi qurmaq deyil, i\u015fl\u0259k v\u0259 t\u0259miz ba\u015flan\u011f\u0131c m\u00fchitini qurmaqd\u0131r.<\/p>\n<h2>Bu tutorial kim \u00fc\u00e7\u00fcnd\u00fcr?<\/h2>\n<ul>\n<li>Yeni Ubuntu 24.04 VPS quranlar<\/li>\n<li>\u0130lk d\u0259f\u0259 Nginx il\u0259 i\u015fl\u0259y\u0259nl\u0259r<\/li>\n<li>Statik sayt, landing page v\u0259 ya reverse proxy bazas\u0131 qurmaq ist\u0259y\u0259nl\u0259r<\/li>\n<li>WordPress, Node.js v\u0259 ya ba\u015fqa servisl\u0259r \u00fc\u00e7\u00fcn web server bazas\u0131 haz\u0131rlayanlar<\/li>\n<\/ul>\n<h2>Bu tutorial-da n\u0259 \u00f6yr\u0259n\u0259c\u0259ksiniz?<\/h2>\n<ul>\n<li>Nginx n\u0259dir v\u0259 niy\u0259 istifad\u0259 olunur<\/li>\n<li>Ubuntu 24.04-d\u0259 Nginx nec\u0259 qurulur<\/li>\n<li>Servisin statusu nec\u0259 yoxlan\u0131l\u0131r<\/li>\n<li>UFW il\u0259 HTTP\/HTTPS nec\u0259 a\u00e7\u0131l\u0131r<\/li>\n<li>Sad\u0259 sayt \u00fc\u00e7\u00fcn root qovlu\u011fu nec\u0259 haz\u0131rlan\u0131r<\/li>\n<li>Yeni server block nec\u0259 yarad\u0131l\u0131r<\/li>\n<li>Konfiqurasiya nec\u0259 test olunur<\/li>\n<li>Nginx restart v\u0259 reload m\u0259ntiqi<\/li>\n<li>\u018fn \u00e7ox rast g\u0259lin\u0259n probleml\u0259r<\/li>\n<\/ul>\n<h2>Nginx n\u0259dir?<\/h2>\n<p>Nginx y\u00fcks\u0259k performansl\u0131 web server v\u0259 reverse proxy-dir. Praktik olaraq bunlar \u00fc\u00e7\u00fcn \u00e7ox istifad\u0259 olunur:<\/p>\n<ul>\n<li>statik fayllar\u0131 serve etm\u0259k<\/li>\n<li>bir v\u0259 ya bir ne\u00e7\u0259 sayt host etm\u0259k<\/li>\n<li>Node.js, Python, PHP v\u0259 dig\u0259r backend-l\u0259r \u00fc\u00e7\u00fcn reverse proxy olmaq<\/li>\n<li>HTTPS termination v\u0259 load balancing bazas\u0131 yaratmaq<\/li>\n<\/ul>\n<p>\u018fg\u0259r m\u0259qs\u0259diniz serverd\u0259 t\u0259miz v\u0259 etibarl\u0131 web qat\u0131n\u0131 qurmaqd\u0131rsa, Nginx \u00e7ox yax\u015f\u0131 ba\u015flan\u011f\u0131cd\u0131r.<\/p>\n<h2>\u018fvv\u0259lc\u0259d\u0259n n\u0259 laz\u0131md\u0131r?<\/h2>\n<ul>\n<li>Ubuntu 24.04 server<\/li>\n<li>Sudo s\u0259lahiyy\u0259ti olan istifad\u0259\u00e7i<\/li>\n<li>Server\u0259 SSH giri\u015f<\/li>\n<li>M\u00fcmk\u00fcns\u0259 UFW art\u0131q qurulmu\u015f olsun<\/li>\n<\/ul>\n<h2>Add\u0131m 1: Paket siyah\u0131s\u0131n\u0131 yenil\u0259yin v\u0259 Nginx qura\u015fd\u0131r\u0131n<\/h2>\n<pre><code>sudo apt update\nsudo apt install nginx -y<\/code><\/pre>\n<p>Bu \u0259mrd\u0259n sonra Nginx ad\u0259t\u0259n avtomatik qura\u015fd\u0131r\u0131l\u0131r v\u0259 servis kimi sistem\u0259 \u0259lav\u0259 olunur.<\/p>\n<h2>Add\u0131m 2: Servis statusunu yoxlay\u0131n<\/h2>\n<pre><code>sudo systemctl status nginx<\/code><\/pre>\n<p>Burada normal halda <code>active (running)<\/code> g\u00f6rm\u0259lisiniz.<\/p>\n<p>\u018fg\u0259r servis aktiv deyils\u0259, bunu i\u015f\u0259 sal\u0131n:<\/p>\n<pre><code>sudo systemctl enable nginx\nsudo systemctl start nginx<\/code><\/pre>\n<p>Sonra yenid\u0259n statusa bax\u0131n:<\/p>\n<pre><code>sudo systemctl status nginx<\/code><\/pre>\n<h2>Add\u0131m 3: Firewall qaydalar\u0131n\u0131 a\u00e7\u0131n<\/h2>\n<p>\u018fg\u0259r UFW aktivdirs\u0259, HTTP v\u0259 HTTPS \u00fc\u00e7\u00fcn icaz\u0259 verilm\u0259lidir.<\/p>\n<p>\u018fvv\u0259l profil siyah\u0131s\u0131na bax\u0131n:<\/p>\n<pre><code>sudo ufw app list<\/code><\/pre>\n<p>Ad\u0259t\u0259n bel\u0259 profill\u0259r g\u00f6r\u00fcn\u00fcr:<\/p>\n<ul>\n<li><code>Nginx Full<\/code><\/li>\n<li><code>Nginx HTTP<\/code><\/li>\n<li><code>Nginx HTTPS<\/code><\/li>\n<\/ul>\n<p>\u018fg\u0259r h\u0259m 80, h\u0259m 443 a\u00e7maq ist\u0259yirsinizs\u0259:<\/p>\n<pre><code>sudo ufw allow 'Nginx Full'<\/code><\/pre>\n<p>Yaln\u0131z HTTP \u00fc\u00e7\u00fcn:<\/p>\n<pre><code>sudo ufw allow 'Nginx HTTP'<\/code><\/pre>\n<p>Sonra statusu yoxlay\u0131n:<\/p>\n<pre><code>sudo ufw status<\/code><\/pre>\n<h2>Add\u0131m 4: Server IP il\u0259 Nginx-in i\u015fl\u0259diyini yoxlay\u0131n<\/h2>\n<p>Serverin IP \u00fcnvan\u0131n\u0131 brauzerd\u0259 a\u00e7\u0131n. Default Nginx welcome page g\u00f6r\u00fcn\u00fcrs\u0259, qura\u015fd\u0131rma i\u015fl\u0259yir.<\/p>\n<p>Terminaldan da yoxlamaq olar:<\/p>\n<pre><code>curl http:\/\/SERVER_IP<\/code><\/pre>\n<p>N\u0259tic\u0259d\u0259 default HTML \u00e7\u0131x\u0131\u015f\u0131 g\u00f6rm\u0259lisiniz.<\/p>\n<h2>Add\u0131m 5: Sad\u0259 sayt qovlu\u011fu yarad\u0131n<\/h2>\n<p>\u0130ndi \u00f6z sayt qovlu\u011fumuzu yaradaq. M\u0259s\u0259l\u0259n:<\/p>\n<pre><code>sudo mkdir -p \/var\/www\/example-site\nsudo chown -R $USER:$USER \/var\/www\/example-site<\/code><\/pre>\n<p>Sonra test \u00fc\u00e7\u00fcn sad\u0259 <code>index.html<\/code> yarad\u0131n:<\/p>\n<pre><code>nano \/var\/www\/example-site\/index.html<\/code><\/pre>\n<p>\u0130\u00e7in\u0259 bel\u0259 sad\u0259 n\u00fcmun\u0259 yaza bil\u0259rsiniz:<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"az\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"UTF-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n  &lt;title&gt;Hello Nginx&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;h1&gt;Nginx i\u015fl\u0259yir&lt;\/h1&gt;\n  &lt;p&gt;Ubuntu 24.04 server \u00fcz\u0259rind\u0259 ilk sayt u\u011furla quruldu.&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<h2>Add\u0131m 6: Yeni server block yarad\u0131n<\/h2>\n<p>Nginx-d\u0259 ayr\u0131ca sayt konfiqurasiyas\u0131 \u00fc\u00e7\u00fcn yeni server block yarad\u0131n:<\/p>\n<pre><code>sudo nano \/etc\/nginx\/sites-available\/example-site<\/code><\/pre>\n<p>N\u00fcmun\u0259 konfiqurasiya:<\/p>\n<pre><code>server {\n    listen 80;\n    listen [::]:80;\n\n    server_name example.com www.example.com;\n\n    root \/var\/www\/example-site;\n    index index.html;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}<\/code><\/pre>\n<p>\u018fg\u0259r h\u0259l\u0259 real domain yoxdursa, m\u00fcv\u0259qq\u0259ti olaraq server IP v\u0259 ya test domain m\u0259ntiqi il\u0259 davam ed\u0259 bil\u0259rsiniz. Amma real publish \u00fc\u00e7\u00fcn sonradan <code>server_name<\/code> d\u00fczg\u00fcn domain il\u0259 d\u0259yi\u015film\u0259lidir.<\/p>\n<h2>Add\u0131m 7: Konfiqurasiyan\u0131 aktiv edin<\/h2>\n<p>Bu fayl\u0131 <code>sites-enabled<\/code> alt\u0131na link edin:<\/p>\n<pre><code>sudo ln -s \/etc\/nginx\/sites-available\/example-site \/etc\/nginx\/sites-enabled\/<\/code><\/pre>\n<p>\u018fg\u0259r default sayt art\u0131q laz\u0131m deyils\u0259, onu da s\u00f6nd\u00fcr\u0259 bil\u0259rsiniz:<\/p>\n<pre><code>sudo rm \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<p><strong>Diqq\u0259t:<\/strong> bunu yaln\u0131z n\u0259 etdiyinizi ba\u015fa d\u00fc\u015f\u0259nd\u0259 edin. \u018fg\u0259r serverd\u0259 ba\u015fqa aktiv sayt yoxdur v\u0259 siz \u00f6z sayt\u0131n\u0131z\u0131 d\u00fczg\u00fcn aktiv etmisinizs\u0259, problem olmaz.<\/p>\n<h2>Add\u0131m 8: Konfiqurasiyan\u0131 test edin<\/h2>\n<p>Nginx reload etm\u0259zd\u0259n \u0259vv\u0259l sintaksisi yoxlamaq vacibdir:<\/p>\n<pre><code>sudo nginx -t<\/code><\/pre>\n<p>\u018fg\u0259r h\u0259r \u015fey d\u00fczg\u00fcnd\u00fcrs\u0259, bel\u0259 bir \u00e7\u0131x\u0131\u015f g\u00f6r\u0259c\u0259ksiniz:<\/p>\n<pre><code>nginx: the configuration file \/etc\/nginx\/nginx.conf syntax is ok\nnginx: configuration file \/etc\/nginx\/nginx.conf test is successful<\/code><\/pre>\n<h2>Add\u0131m 9: Reload edin<\/h2>\n<p>Konfiqurasiya testd\u0259n ke\u00e7dis\u0259:<\/p>\n<pre><code>sudo systemctl reload nginx<\/code><\/pre>\n<p>Bu, servisi tam dayand\u0131rmadan yeni konfiqurasiyan\u0131 t\u0259tbiq edir.<\/p>\n<p>Tam restart laz\u0131m olsa:<\/p>\n<pre><code>sudo systemctl restart nginx<\/code><\/pre>\n<p>Amma adi konfiqurasiya d\u0259yi\u015fiklikl\u0259rind\u0259 \u00e7ox vaxt <code>reload<\/code> daha yax\u015f\u0131 yana\u015fmad\u0131r.<\/p>\n<h2>Add\u0131m 10: Sayt\u0131 yoxlay\u0131n<\/h2>\n<p>\u0130ndi domain v\u0259 ya IP-ni a\u00e7\u0131n. \u018fg\u0259r h\u0259r \u015fey d\u00fczg\u00fcn qurulubsa, \u00f6z yaratd\u0131\u011f\u0131n\u0131z s\u0259hif\u0259 g\u00f6r\u00fcnm\u0259lidir.<\/p>\n<p>Terminaldan yoxlama:<\/p>\n<pre><code>curl -I http:\/\/example.com<\/code><\/pre>\n<p>v\u0259 ya<\/p>\n<pre><code>curl -I http:\/\/SERVER_IP<\/code><\/pre>\n<p>N\u0259tic\u0259d\u0259 <code>HTTP\/1.1 200 OK<\/code> g\u00f6rm\u0259lisiniz.<\/p>\n<h2>Nginx-d\u0259 faydal\u0131 \u0259sas \u0259mrl\u0259r<\/h2>\n<pre><code>sudo systemctl status nginx\nsudo systemctl reload nginx\nsudo systemctl restart nginx\nsudo nginx -t\nsudo journalctl -u nginx<\/code><\/pre>\n<p>Bunlar g\u00fcnd\u0259lik idar\u0259etm\u0259 \u00fc\u00e7\u00fcn \u0259n \u00e7ox laz\u0131m olan \u0259mrl\u0259rdir.<\/p>\n<h2>\u018fn \u00e7ox rast g\u0259lin\u0259n probleml\u0259r<\/h2>\n<h3>1. Sayt a\u00e7\u0131lm\u0131r<\/h3>\n<p>A\u015fa\u011f\u0131dak\u0131lar\u0131 yoxlay\u0131n:<\/p>\n<ul>\n<li>Nginx i\u015fl\u0259yir?<\/li>\n<li>UFW-d\u0259 HTTP\/HTTPS a\u00e7\u0131qd\u0131r?<\/li>\n<li>server_name d\u00fczg\u00fcnd\u00fcr?<\/li>\n<li>root qovlu\u011fu d\u00fczg\u00fcnd\u00fcr?<\/li>\n<li>cloud provider ayr\u0131ca firewall t\u0259tbiq edir?<\/li>\n<\/ul>\n<h3>2. <code>nginx -t<\/code> x\u0259ta verir<\/h3>\n<p>Bu o dem\u0259kdir ki, konfiqurasiyada sintaksis v\u0259 ya yol problemi var. H\u0259mi\u015f\u0259 \u0259vv\u0259l test edin, sonra reload edin.<\/p>\n<h3>3. Default Nginx page qal\u0131r<\/h3>\n<p>Bu ad\u0259t\u0259n default site h\u0259l\u0259 aktiv qalanda v\u0259 ya sizin server block uy\u011fun match etm\u0259y\u0259nd\u0259 olur. <code>sites-enabled<\/code> qovlu\u011funu v\u0259 <code>server_name<\/code> d\u0259y\u0259rini yoxlay\u0131n.<\/p>\n<h3>4. Permission problemi var<\/h3>\n<p>Root qovlu\u011fu v\u0259 fayl icaz\u0259l\u0259rini yoxlay\u0131n:<\/p>\n<pre><code>ls -la \/var\/www\/example-site<\/code><\/pre>\n<p>B\u0259z\u0259n yanl\u0131\u015f owner v\u0259 ya permission s\u0259b\u0259bind\u0259n fayllar serve olunmur.<\/p>\n<h2>T\u0259hl\u00fck\u0259sizlik v\u0259 n\u00f6vb\u0259ti add\u0131mlar<\/h2>\n<ul>\n<li>HTTPS \u00fc\u00e7\u00fcn Let&#8217;s Encrypt \/ Certbot qurun<\/li>\n<li>laz\u0131ms\u0131z server block-lar\u0131 silin<\/li>\n<li>access v\u0259 error log-lar\u0131 izl\u0259yin<\/li>\n<li>reverse proxy istifad\u0259 ed\u0259c\u0259ksinizs\u0259 backend timeout v\u0259 header-l\u0259ri d\u00fczg\u00fcn qurun<\/li>\n<li>static site v\u0259 app server-l\u0259r \u00fc\u00e7\u00fcn ayr\u0131ca konfiqurasiya standard\u0131 yarad\u0131n<\/li>\n<\/ul>\n<h2>N\u0259tic\u0259<\/h2>\n<p>Ubuntu 24.04-d\u0259 Nginx qura\u015fd\u0131rmaq \u00e7ox \u00e7\u0259tin deyil, amma d\u00fczg\u00fcn v\u0259 t\u0259miz ba\u015flan\u011f\u0131c qurmaq vacibdir. Paket qura\u015fd\u0131r\u0131lmas\u0131, servis yoxlamas\u0131, firewall a\u00e7\u0131lmas\u0131, server block yarad\u0131lmas\u0131 v\u0259 konfiqurasiya testinin ard\u0131c\u0131ll\u0131\u011f\u0131 d\u00fczg\u00fcn qurulsa, sonrak\u0131 m\u0259rh\u0259l\u0259l\u0259rd\u0259 SSL, reverse proxy v\u0259 production deploy daha rahat olur.<\/p>\n<p>\u018fg\u0259r serverd\u0259 web qat\u0131n\u0131 t\u0259z\u0259 qurursunuzsa, bu tutorial siz\u0259 m\u00f6hk\u0259m ba\u015flan\u011f\u0131c ver\u0259c\u0259k. Bunun davam\u0131 kimi ist\u0259s\u0259niz n\u00f6vb\u0259ti m\u0259rh\u0259l\u0259d\u0259 <strong>Nginx + Let&#8217;s Encrypt HTTPS<\/strong> v\u0259 ya <strong>Nginx reverse proxy il\u0259 Node.js deploy<\/strong> m\u00f6vzular\u0131n\u0131 da eyni keyfiyy\u0259td\u0259 haz\u0131rlamaq olar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ubuntu 24.04 server qura\u015fd\u0131rd\u0131qdan sonra \u0259n \u00e7ox edil\u0259n i\u015fl\u0259rd\u0259n biri web server qurmaqd\u0131r. Bu m\u0259rh\u0259l\u0259d\u0259 \u0259n \u00e7ox se\u00e7il\u0259n h\u0259ll\u0259rd\u0259n biri Nginx-dir. Nginx h\u0259m sad\u0259 statik sayt servisi, h\u0259m reverse proxy, h\u0259m d\u0259 sonradan SSL, caching v\u0259 performans optimizasiyas\u0131 \u00fc\u00e7\u00fcn \u00e7ox yax\u015f\u0131 baza verir. Bu m\u0259qal\u0259d\u0259 Ubuntu 24.04-d\u0259 Nginx-in nec\u0259 quruldu\u011funu, servisin nec\u0259 yoxland\u0131\u011f\u0131n\u0131, firewall-da hans\u0131 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":10922,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[17,41],"tags":[],"class_list":["post-10921","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting","category-tutoriallar"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/bitep.net\/blog\/wp-content\/uploads\/2026\/04\/nginx-ubuntu-tutorial-portrait-replicate.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/posts\/10921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/comments?post=10921"}],"version-history":[{"count":1,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/posts\/10921\/revisions"}],"predecessor-version":[{"id":10923,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/posts\/10921\/revisions\/10923"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/media\/10922"}],"wp:attachment":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/media?parent=10921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/categories?post=10921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/tags?post=10921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}