Centos 7 Nginx Kurulumu ve Ayarları – Detaylı Anlatım

Nginx, tıpkı apache gibi bir web sunucusudur. Sunucumuzdaki web sitelerini görüntüler. Varsa üzerindeki php gibi dinamik sayfaların çalışmasını sağlar. Nginx aslında Rus menşeilidir. SSL desteği de mevcuttur. Apache ile yapabileceğiniz herşeyi Nginx ile de yapmak mümkündür. Nginx’in ram’de daha az yer kapladığı söylenmekte. Ben 1 yıldır kullanıyorum ve memnunum açıkcası. İsterseniz kuruluma başlayalım:

Öncelikle sunucumuzda

1
yum update

yapıyoruz. Bu belli bir süre alabilir. Sonunda tamamlanacaktır. Daha sonra nginx kurmak için aşağıdaki komutu giriyoruz. Nginx’in şuan centos deposunda 1.10.2 versiyonu var, bu versiyon zamana göre farklılık gösterebilir ama ayarları genellikle aynı olacaktır.

1
yum info nginx

Yukarıdaki komut nginx hakkında bilgi verir (versiyon bilgisi).

1
yum install nginx

nginx yüklemesi sırasında başka paketlerde yüklenebilir. Perl, libX11 gibi. Bunlarla beraber toplam boyutu 15-16 Mb civarında olabilir.

Yükleme sunucunuzun hızına bağlı olarak 1-2 dk içerisinde tamamlanır. Şimdi nginx ayarlarına başlayabiliriz.

Konfigürasyon dosyası nerede?:

1
/etc/nginx/nginx.conf

Varsayılan localhost web klasörü nerede? (default web root)

1
/usr/share/nginx/html

Eğer web sitelerimizde php çalıştıracaksak ki muhtemelen çalıştıracağız.  Php kurulumunu da yapmamız gerekiyor. Bana kalırsa önce php kurulumunu yapmanız daha faydalı olacaktır. Centos 7’de PHP 7 kurulumu için şu yazımı okuyabilirsiniz.

Php birçok linux sürümünde hazır yüklü gelebilir. Php’nin hangi versiyonunu kullandığınızı aşağıdaki komut ile öğrenebilirsiniz.

1
php -v

Php için paketlerin yüklendiğini düşünerek nginx ayarlarına devam ediyorum:

nginx için öncelikle yine web sitelerimiz için gereken ayarları farklı dosyalarda tutacağız ki ayar yapmamız daha kolay olsun. Aslında bu mantığı biz apache’den çalmış oluyoruz. 🙂

Aşağıdaki işlemleri yapalım:

1
2
3
4
cd /etc/nginx
mkdir sites-available
mkdir sites-enabled
cd sites-available

sites-avaliable klasörü içerisine tutacağımız alan adlarının ayarlarını ayrı dosyalarda tutacağız. Aşağıdaki örnek bir alan adı için oluşturulmuştur.

1
2
cd /etc/nginx/sites-available
nano domainadi.com.conf

domainadi.com.conf dosyasının içeriği:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 server {
# 80 portu dinle
listen 80;
# alan adları
server_name domainadi.com www.domainadi.com;
# web sitemizin dosyalarının tutulduğu kısım
root /var/www/domainadi.com/public_html;

# Eğer gelen istek başında www yoksa www'ye yönlendir.
if ($host = 'domainadi.com')
{
return 301 $scheme://www.domainadi.com$request_uri;
}

# Tüm alan adları için bir ayar istiyorsak bunu aktif edip default.d klasörü altında oluşturabiliriz.
include /etc/nginx/default.d/*.conf;

# Ana dizine erişirken hangi dosyalara bakacağını gösterir.
location / {
index index.html index.php index.htm;
try_files $uri $uri/ /index.php?$args;
}

# Can alıcı yer. php'nin çalışması için gerekli olan komutlar. /run/*** yazılı olan sizin kurduğunuz sunucuda farklı olabilir.
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/php7.1-fpm.sock;

fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

}

# robots.txt ve favicon.ico dosyalarının bulunduğu yeri gösterir. Eğer ulaşamazsa hata mesajı vermez.
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

# Access log tutturmaz
access_log off;

# Error log şurada tutsun.
error_log /var/log/nginx/domainadi.com-error.log error;

# Sayfa bulunamadi hatalarini yonlendirir
error_page 404 401 402 403 /40x.html;
location /40x.html {
root /usr/share/nginx/html;
}

# Sayfa bulunamadi hatalarini yonlendirir
error_page 404 401 402 403 /40x.html;
location /40x.html {
root /usr/share/nginx/html;
}

# . ile baslayan dosyalara erisimi yasaklar
location ~ /\. {
deny all;
}

}

oluşturduğunuz dosyanın bir kopyasını (klonunu) sites-enabled klasörüne yapacağız. Bunun için aşağıdaki kodları yazacağız:

1
ln -s /etc/nginx/sites-available/domainadi.com.conf /etc/nginx/sites-enabled/domainadi.com.conf

/etc/nginx/nginx.conf dosyasında gerekli ayarları yapacağız:

1
2
types_hash_max_size 2048; 'in altına şunu yazalım:
client_max_body_size 15M;

include /etc/nginx/conf.d/*.conf satırını şu şekilde değiştirelim:

1
include /etc/nginx/sites-enabled/*.conf

Server’ın nginx sürüm bilgisini gizlemek için şunu yazalım.

1
server_tokens off;

Site kurulumundan sonra şu şekilde bir hata alırsanız:

FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream…

1. /etc/php-fpm.d/www.conf dosyası içerisinde user ve group ayarlarındaki izinleri kontrol edin.
2. /etc/nginx/sites-available/domainadi.com.conf dosyası içerisinde php-fpm’de bazı yanlışlıklar olabilir.
3. /etc/nginx/sites-available/domainadi.com.conf dosyasında root olarak verdiğiniz klasör ile web sitesinin bulunduğu klasör aynı olmalıdır.

Nginx’de bir servis olduğu için önce enable edip daha sonra start ediyoruz.

1
2
systemctl enable nginx
systemctl start nginx

Ayar sırasında bir hata ile karşılaşırsanız bu hatayı aşağıdaki log dosyasına yazacaktır. Oradan bakabilirsiniz.

1
/var/log/nginx/error.log

Centos Sürümü: Centos 7.4
Nginx Sürümü: 1.10.2

Başarılar…

You may also like...

4 Responses

  1. Volkan dedi ki:

    KArdeşim kolay gelsin ben dediklerini bir bir yaptım fakat süreli şu uyarıyı alıyorum

    Redirecting to /bin/systemctl start nginx.service

    • serdarkok dedi ki:

      Önce “systemctl enabled nginx” yapmayı dener misiniz? bir de centos 7 ve sonrasında service komutu çalışmıyor. Onun yerine “systemctl start nginx” olarak başlatabilirsiniz.

  2. Fatih dedi ki:

    mkdir sites-avaliable
    available şeklinde olması gerekiyordu, gözünüzden kaçmış sanırım.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Güvenlik Sorusu *