Apache HTTP Sunucusu Sürüm 2.4

Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.4

# Adresleri ve Portları Dinleme

Apache HTTPD sunucusunun belli adresleri ve portları dinlemek üzere yapılandırılması.

### Ayrıca bakınız:

- Sanal Konaklar
- DNS Konuları

## Genel Bakış

İlgili Modüller | İlgili Yönergeler
--- | ---
`core` `mpm_common` | `<VirtualHost>` `Listen`

httpd başlatıldığında yerel makinedeki bazı adres ve portları kendine bağlar ve gelecek istekleri bekler. Öntanımlı olarak makine üzerindeki tüm adresleri dinler. Bununla birlikte, belli portları veya sadece seçilmiş bazı adresleri ya da her ikisini de dinlemesi için bunun belirtilmesi gerekebilir. Bu çoğunlukla, httpd’nin farklı IP adreslerine, konak isimlerine ve portlarına nasıl yanıt vereceğinin belirlendiği sanal konak özelliği ile birlikte yürür.

`Listen` yönergesi sunucuya gelen istekleri sadece belli port(lar)dan veya belli adres ve port birleşimlerinden kabul etmesini söyler. `Listen` yönergesinde sadece port numarası belirtilmişse sunucu tüm arabirimlerin belirtilen portunu dinleyecektir. Portla birlikte bir IP adresi de belirtilmişse sunucu belirtilen portu ve arabirimi dinleyecektir. Çok sayıda adres ve portu dinlemek için çok sayıda `Listen` yönergesi kullanılabilir. Sunucu böyle bir durumda belirtilen bütün adres ve portlardan gelen isteklere yanıt verecektir.

Örneğin, sunucunun hem 80 portundan hem de 8000 portundan gelen bağlantıları kabul etmesini sağlamak için,

    Listen 80
    Listen 8000

yapılandırmasını kullanabilirsiniz. Sunucunun 80 portuna gelen bağlantıları bir arabirimden 8000 portuna gelenleri ise başka bir arabirimden kabul etmesini sağlamak için ise,

    Listen 192.0.2.1:80
    Listen 192.0.2.5:8000

yapılandırmasını kullanabilirsiniz. IPv6 adresleri aşağıdaki örnekteki gibi köşeli ayraçlar içine alınarak belirtilmelidir:

    Listen [2001:db8::a00:20ff:fea7:ccea]:80

Bir `Listen` yönergesinin aynısının tekrarı sunucunun başlatılmasını engelleyen ölümcül bir hatayla sonuçlanacaktır.

`(48)Address already in use: make_sock: could not bind to address [::]:80`

Sorun giderme ile ilgili ipuçları için wiki belgesine bakınız.

## IPv6 Adreslerin Durumu

IPv6’yı gerçekleyen platformların sayısı giderek artmaktadır. Bu platformların çoğunda APR, httpd’nin IPv6 soketleri ayırmasını mümkün kılarak IPv6’yı desteklemekte ve IPv6 üzerinden gönderilmiş istekleri elde etmektedir.

httpd yöneticilerinin kafasını karıştırıran tek şey IPv6 soketlerin hem IPv4 hem de IPv6 bağlantılarını kabul edip etmeyeceğidir. IPv4 bağlantılarını kabul eden IPv6 soketleri IPv4 eşlemli IPv6 adresleri kullanırlar. Bu çoğu sistemde öntanımlı olarak böyleyken, FreeBSD, NetBSD ve OpenBSD’de sistem geneline uygulanan kurallar gereğince öntanımlı olarak buna izin verilmez; bu sistemlerde özel bir `configure` parametresi ile `httpd`’nin davranışı değiştirilebilir.

Diğer taraftan, Linux ve Tru64 gibi bazı platformlarda hem IPv4 hem de IPv6 adresleri kabul etmenin tek yolu eşlemli adresler kullanmaktır. `httpd`’nin IPv4 ve IPv6 adresleri, IPv4 eşlemli IPv6 adreslerin kullanımını gerektiren en az sayıda soketle kabul etmesini istiyorsanız, `configure` betiğine `--enable-v4-mapped` seçeneğini belirtiniz.

`--enable-v4-mapped` seçeneği, FreeBSD, NetBSD ve OpenBSD hariç tüm platformlarda öntanımlıdır. Muhtemelen siz de `httpd`’nin böyle derlenmesini isterdiniz.

Platformunuzun ve APR’nin neyi desteklediğine bakmaksızın `httpd`’nin sadece IPv4 adresleri kabul etmesini istiyorsanız, tüm `Listen` yönergelerinde örnekteki gibi IPv4 adresleri belirtiniz:

    Listen 0.0.0.0:80
    Listen 192.0.2.1:80

Platformunuz IPv4 ve IPv6 adresleri ayrı soketlerden kabul ediyorsa ve `httpd`’nin de buna uygun davranmasını (yani IPv4 eşlemli IPv6 adreslerin iptalini) istiyorsanız `configure` betiğine `--disable-v4-mapped` seçeneğini belirtiniz. Bu seçenek FreeBSD, NetBSD ve OpenBSD’de öntanımlıdır.

## Protokolü Listen ile Belirtme

`Listen` yönergesinin isteğe bağlı ikinci değiştirgesi protokol çoğu yapılandırmada gerekli olmaz. Belirtilmediği takdirde, `https` için 443, `http` için ise diğer bütün portlar öntanımlıdır. Protokol, isteğin hangi modül tarafından işleneceğini ve `AcceptFilter` yönergesi ile uygulanacak protokole özgü en iyilemeleri belirlemekte kullanılır.

Sadece standartdışı bir port kullanmak isterseniz protokolü belirtmeniz gerekir. Örneğin, bir`https` sitesini port 8443 üzerinde çalıştırmak isterseniz:

    Listen 192.170.2.1:8443 https

## Sanal Konaklarla Nasıl Çalışır?

`Listen` yönergesi sanal konaklar için gerçeklenmemiştir; sadece ana sunucuya hangi adresleri ve portları dinleyeceğini söyler. Hiç `<VirtualHost>` yönergesi kullanılmamışsa sunucu kabul edilen tüm isteklere aynı şekilde davranacaktır. Eğer bir veya daha fazla adres ve port için farklı bir davranış belirtmek istiyorsanız `<VirtualHost>` kullanabilirsiniz. Bir sanal konağı gerçeklemek için önce sunucunun sanal konak için kullanacağı adres ve portu dinleyeceğini belirtmek gerekir. Bundan sonra bu sanal konağın davranışını ayarlamak üzere belirtilen adres ve port için bir `<VirtualHost>` bölümü oluşturulmalıdır. Yalnız dikkat edin, eğer `<VirtualHost>` için belirtilen adres ve port sunucu tarafından dinlenmiyorsa ona erişemezsiniz.