> For the complete documentation index, see [llms.txt](https://derslik.kerteriz.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://derslik.kerteriz.net/nginx/sunucu-kurulumlari/http-sunucusu-kurulumu.md).

# HTTP Sunucusu Kurulumu

Nginx web sunucu yazılımımızı kurarak çalıştığını gördükten sonra artık ilk sunucu türümüz olan HTTP sunucusu kurulumuna geçiş yapıyoruz. Böylece artık sitelerimizi rahatça kurabileceğiz.

## 1. Hosts Dosyasını Ayarlama

Eğer localhost üzerinde çalışacaksanız öncelikle kendinize özel bir çalışma alanı oluşturmalısınız. Bu derste site örnek adresimiz **`demosite.com`** olacağı için *(siz başka bir isimde belirleyebilirsiniz)* **`/etc/`** klasöründeki **`hosts`** dosyasına aşağıdaki satırı eklemeliyiz.

{% code title="hosts" %}

```
127.0.0.1    demosite.com
```

{% endcode %}

Yani son durumda **`hosts`** dosyamızın aşağıdakine benzer şekilde gözükmesi gerekiyor.

{% code title="hosts" %}

```
127.0.0.1       localhost
127.0.1.1       ubuntu
127.0.0.1       demosite.com
```

{% endcode %}

Özetle bilgisayarınızda istediğiniz bir sanal alan adı oluşturarak ders sonunda tarayıcıdan bu adrese girdiğinizde sitenizi görebileceksiniz.

{% hint style="info" %}
Gerçek bir sunucu üzerinde çalışıyorsanız **127.0.0.1** adresi yerine **sunucu ip adresinizi** yazmanız gerekmektedir.
{% endhint %}

Örnek olarak **`x.x.x.x`** ip adresli sunucumuzda `site1.com`, `site2.com` ve `site3.com` web siteleri varsa **hosts** dosyamız şu şekilde olmalıdır.

{% code title="hosts" %}

```bash
x.x.x.x     site1.com
x.x.x.x     site2.com
x.x.x.x     site3.com
```

{% endcode %}

## 2. Site Dosyalarının Yolunu Belirleme

Bir HTTP sunucusu kurduğumuza göre oluşturacağımız sitenin dosyalarını da bir yerde tutmamız gerekiyor. Bunun için genel olarak kullanılan dizin **`/var/www/`** dizinidir. Bu nedenle bizde yeni klasör oluşturma komutuyla dizinimizi oluşturup içine örnek bir PHP dosyası koyalım.

```
sudo mkdir /var/www/demosite.com/
```

Oluşturduğumuz site klasörüne gerekli izinleri verelim.

```
sudo chown -R $USER:$USER /var/www/demosite.com
sudo chmod -R 755 /var/www
```

Şimdi ise site klasörümüzde **index.php** dosyası oluşturalım.&#x20;

```
sudo touch /var/www/demosite.com/index.php
```

Oluşturduğumuz dosyaya ise **`nano`** metin editörü ile örnek içeriğimizi girelim.

```bash
sudo nano /var/www/demosite.com/index.php
```

{% code title="index.php" %}

```php
<?php 

echo "Merhaba, bu ilk sitemiz!";

?>
```

{% endcode %}

{% hint style="info" %}
Klasör ve dosya oluşturma, dosya içeriğini düzenleme gibi işlemleri direkt konsoldan komutlarla yapmak yerine gezgin üzerinden fare kullanarakta yapabilirsiniz. Ama konsola alışmanız için komutlarla yapmanızı tavsiye ederiz.
{% endhint %}

## 3. Sunucu Bloklarının Oluşturulması

Artık sitemizin konfigürasyon dosyasını oluşturarak siteyi aktif etmenin zamanı geldi. Bunun için **`/etc/nginx/sites-available/`** dizininde yer alan ve Nginx kurulumuyla beraber gelen **`default`** konfigürasyon tablomuzu sitemizin adıyla aynı dizin içine kopyalayarak gerekli düzenlemeleri yapabiliriz. Fakat kolaylık olması amacıyla dosyayı kendimiz oluşturarak aşağıdaki komutları direkt bu dosyamızın içine kopyalayabiliriz.

```bash
sudo touch /etc/nginx/sites-available/demosite.com
```

Dosyamızı **`nano`** veya **`gedit`** ile açarak aşağıdaki komutları içine yapıştırınız.

{% code title="demosite.com" %}

```bash
server {    
    listen 80;
    listen [::]:80;

    server_name demosite.com www.demosite.com;
    root /var/www/demosite.com;
    index index.php index.html;
     
    location / {
        try_files $uri $uri/ @rewrites;
    }
     
    location @rewrites {
        rewrite ^ /index.php last;
    }
     
    location ~ \.php {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        } 
}
```

{% endcode %}

Burada yer alan **server\_name** ziyaret edilecek olan alan adıdır. Yani bu domaine bir istek geldiğinde yazdığımız server bloku çalışacaktır. **root** ise site dosyalarının yer aldığı dizin konumudur.&#x20;

:exclamation: **location \~ .php** komutu PHP dosyalarının sunucumuzda yorumlanabilmesini sağlar fakat bu özelliği kullanabilmeniz için `php-fpm` paketini kurmanız gerekiyor. İlgili kurulum [Nginx Kurulumu](https://derslik.kerteriz.net/nginx/nginx-kurulumu) sayfasında yer almaktadır.

{% hint style="info" %}
Eğer siteniz PHP dosyası içermiyor ve sadece HTML dosyalarını içeriyorsa **location \~ .php** özelliğini kullanmanıza gerek yoktur. Konfigürasyondan bu alanı silebilirsiniz.
{% endhint %}

:speaker: Konfigürasyon dosyanızda listen satırında **default\_server** tanımlamasını kullanarak gelen isteğin herhangi bir siteye denk gelmemesi durumunda default olarak çalıştırılacak *server bloku* seçilmiş olur. Örneğin `demosite.com` için **default\_server** tanımlamasını kullanırsak sunucuda olmayan bir site isteği gönderildiğinde `demosite.com` kullanıcıya sunulacaktır. Fakat bu tercih edilen bir kullanım değildir :exclamation:

{% code title="demosite.com" %}

```bash
server {    
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name demosite.com www.demosite.com;
    root /var/www/demosite.com;
    index index.php index.html;
     
    location / {
        try_files $uri $uri/ @rewrites;
    }
     
    location @rewrites {
        rewrite ^ /index.php last;
    }
         
}
```

{% endcode %}

## 4. Sunucu Blokunun Etkinleştirilmesi

Sunucu blokumuzu bir üst başlıkta oluşturduk fakat sitemizin aktif olabilmesi için yazdığımız bloku etkinleştirmemiz gerekiyor. Bunun için aşağıdaki komut ile **`sites-available`** dizinindeki konfigürasyon dosyamızı **`sites-enabled`** dizinine kısayol olarak atıyoruz.

```bash
sudo ln -s /etc/nginx/sites-available/demosite.com /etc/nginx/sites-enabled/demosite.com
```

Ardından Nginx servisini yeniden başlatalım.

```bash
sudo systemctl restart nginx
```

Servisimiz ayağa kalktığında herhangi bir yazım hatası var mı kontrol etmek için aşağıdaki komutu çalıştıralım.

{% tabs %}
{% tab title="Komut" %}

```bash
sudo nginx -t
```

{% endtab %}

{% tab title="Çıktı" %}

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

{% endtab %}
{% endtabs %}

Çıktıdaki gibi sonuçları görüyorsanız artık herşey tamamdır demektir.

## 5. Sonuç

Adımları sırasıyla kurduktan sonra tarayıcımızdan **hosts** dosyasında ayarladığınız domain adresine tarayıcınızdan gittiğinizde ekranda sitemizi görebilirsiniz. Bu örnekte **localhost** üzerinde çalıştığımız için rastgele belirlediğimiz **demosite.com** adresini açtığımızda aşağıdaki ekranla karşılaşırız.

![İlk site örneği](/files/-Lvvk19__OJJRt4fcifj)

{% hint style="info" %}
Sunucunuzda aynı işlemleri tekrar ederek istediğiniz kadar site oluşturabilirsiniz.
{% endhint %}
