# 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](https://36478786-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LtGp1X8U6UM4fx3S9r1%2F-LvvjtwV7rqGm7NjEu_5%2F-Lvvk19__OJJRt4fcifj%2Fdemosite.png?alt=media\&token=44dcfa8f-2564-4371-93c4-55f746605a60)

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://derslik.kerteriz.net/nginx/sunucu-kurulumlari/http-sunucusu-kurulumu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
