# ⚙️ Nginx Kurulumu

Nginx web sunucu yazılımının ne olduğunu ve nasıl çalıştığını öğrendikten sonra artık kurulum dersimize başlıyoruz. Bu dersimizde **Ubuntu 16.04** işletim sistemini kullanarak konuları işleyeceğiz.

## 1. İşletim Sisteminin Güncellenmesi

Kuruluma başlamadan önce işletim sistemini güncellememiz fayda sağlayacaktır.&#x20;

```bash
sudo apt update
sudo apt upgrade
```

## 2. Nginx Paketinin Kurulması

Nginx web sunucusunu artık indirerek yükleyebiliriz.

```bash
sudo apt install nginx
```

:pushpin: Herhangi bir sebeple nginx yüklemesini kaldırmak ve tekrar kurmak istediğinizde tüm konfigürasyonu ile birlikte nginx i kaldırmak için şu komutu çalıştırabilir ve ardından yukarıdaki kodla birlikte tekrardan yükleyebilirsiniz.

```bash
sudo apt purge nginx nginx-common nginx-full
```

## 3. Nginx Konfigürasyonunun Ayarlanması

*Hash bucket memory* problemini engellemek için ([Problem Nedir?](https://gist.github.com/muhammadghazali/6c2b8c80d5528e3118613746e0041263)) **`/etc/nginx`** dizini altında yer alan **`nginx.conf`** dosyasını **nano** veya **gedit** gibi editörlerle açarak `server_names_hash_bucket_size 64` satırının başındaki **#** işaretini siliniz.

{% code title="nginx.conf" %}

```bash
.
.
server_names_hash_bucket_size 64;
# server_name_in_redirect off;
.
.
```

{% endcode %}

## 4. PHP-FPM Paketinin Kurulması

Sunucumuzda PHP dosyalarımızın yorumlanabilmesi için PHP-FPM paketimizi kurmalıyız. Bunun için aşağıdaki komutları çalıştırabilirsiniz.

```bash
sudo add-apt-repository ppa:ondrej/php
sudo apt-get install software-properties-common
sudo apt update
sudo apt-get install php7.3-fpm php7.3-cli php7.3-mysql phpunit
```

Paketleri kurduktan sonra **`/etc/php/7.3/fpm/`** dizini altında yer alan **`php.ini`** dosyamızdaki ilgili alanları düzenleyelim.

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

```bash
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = Europe/Istanbul
```

{% endcode %}

Düzenlemelerimizin aktif olabilmesi için servisimizi yenileyelim.

```bash
sudo systemctl restart php7.3-fpm
```

Son olarak **`php -v`** komutu ile ekranda php versiyonunu görüyorsanız işlemimiz tamamdır.

## 5. Güvenlik Duvarını Ayarlama

İşletim sistemimizde güvenlik duvarımız etkinse Nginx web sunucusunun engellenmesini önlemek için Nginx i beyaz listeye eklemeliyiz.

Öncelikle güvenlik duvarı ile hangi uygulamaların kullanılabilir olduğunu görelim.

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

```bash
sudo ufw app list
```

{% endtab %}

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

```
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
```

{% endtab %}
{% endtabs %}

Komutun çıktısında gördüğünüz uygulamalar için güvenlik duvarına kural yazabiliriz. Öyleyse ilk kuralımızı yazalım.

```bash
sudo ufw allow 'Nginx HTTP'
```

HTTP üzerinden yani 80 portundan gelen trafiğe izin vererek Nginx in kısıtlanmadan kullanılmasını sağladık. Şimdi son durum kontrolünü yapalım.

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

```bash
sudo ufw status
```

{% endtab %}

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

```
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Eğer bu komut sonrası **`Status: inactive`** çıktısını görüyorsanız güvenlik duvarınız zaten kapalı demektir. Bu aşamadaki işlemleri yapmanıza gerek yoktur.
{% endhint %}

## 6. Web Sunucu Kontrolü

Nginx web sunucusunu ikinci adımda yüklemiştik. Şimdi web sunucu servisinin durumunu kontrol edelim.

```bash
systemctl status nginx
```

Nginx web sunucu servisinin durumunu kontrol ettiğimizde aktif olduğunu görmemiz gerekiyor.

```bash
nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-12-09 11:38:13 PST; 49min ago
     Docs: man:nginx(8)
 Main PID: 2369 (nginx)
    Tasks: 2 (limit: 1153)
   CGroup: /system.slice/nginx.service
           ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─2380 nginx: worker process
```

Yukarıda ki çıktıda olduğu gibi **`Active: active (running)`** çıktısını gördüyseniz Nginx web sunucu yazılımı başarıyla çalışıyor demektir. Artık **`http://sunucu_ip_adresi`** veya **`localhost`** veya **`127.0.0.1`** adresleri üzerinden Nginx default sayfasına erişebilir ve aşağıdaki resimde olduğu gibi çıktıyı görebilirsiniz.

![Nginx default sayfası](/files/-LvgH0qLZFlNI_rJZ4_h)

{% hint style="info" %}
Nginx servisi üzerinde başlatma, durdurma, yeniden başlatma, konfigürasyonu yeniden yükleme işlemlerini yapabilmek için **`sudo systemctl xxx nginx`** komutundaki **xxx** yerine **`start`**, **`stop`**, **`restart`** ve **`reload`** terimlerini kullanabilirsiniz.
{% endhint %}

Artık Nginx web sunucumuzu başarıyla çalıştırdıktan sonra ilerleyen derslerimizde web sunucu uygulamalarımızı kurmaya başlayacağız.


---

# 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/nginx-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.
