Port 80 Kontrolü: HTTP Sorun Giderme Rehberi

HTTP 80 numaralı port sorun giderme kılavuzu - ağ bağlantıları, sunucu tanılama araçları ve port yapılandırması gösterimi

Port 80 kontrolü, web sunucunun HTTP üzerinden erişilebilir olup olmadığını söyler - HTTP, tarayıcıların "https://" olmadan düz bir URL yazdığında varsayılan olarak kullandığı protokoldür. Port 80 engellenmiş ya da dinleme durumunda değilse, ziyaretçiler bağlantı hatası alır ve siteniz erişilemez hale gelir. Sorunu nasıl teşhis edip düzelteceğini tam olarak burada bulacaksın.

Port 80 Aslında Ne İşe Yarar?

Port 80, HTTP (Hypertext Transfer Protocol) için varsayılan TCP portudur. Bir tarayıcı http://example.com adresine bağlandığında, otomatik olarak o sunucunun IP adresindeki port 80'i hedefler. Apache, Nginx, IIS, Caddy veya başka herhangi bir sunucu yazılımının bu bağlantının başarılı olması için port 80'i aktif biçimde dinliyor olması gerekir.

Port 80, IANA'nın resmi port kaydında tanımlanmış ve RFC 9110 ile standartlaştırılmıştır. "İyi bilinen" bir porttur; yani 0-1023 arasındaki numaralar sistem düzeyindeki servisler için ayrılmıştır ve Linux/macOS üzerinde bind yapabilmek için yüksek yetkiler gerektirir.

Port 80 Açık mı? Nasıl Kontrol Edilir?

Port 80'in açık olup olmadığını kontrol etmenin birkaç yolu var; bu, kontrolü yerel olarak (sunucunun kendisinde) mi yoksa uzaktan (başka bir makineden ya da internet üzerinden) mi yaptığına bağlı.

telnet Kullanarak

telnet, en hızlı manuel test yöntemidir. Hedef sunucuya ağ erişimi olan herhangi bir makineden şunu çalıştır:

telnet example.com 80

Port 80 açıksa ve bir web sunucusu dinliyorsa, boş bir imleç ya da HTTP banner'ı görürsün. Kapalı ya da filtrelenmiş durumdaysa "Connection refused" hatası alırsın ya da komut zaman aşımına uğrayana kadar askıda kalır.

curl Kullanarak

curl daha fazla ayrıntı sunar - gerçek HTTP yanıtını gösterir:

curl -v http://example.com

-v bayrağı, TCP handshake ve yanıt header'ları dahil ayrıntılı çıktı yazdırır. Başarılı bir bağlantıda * Connected to example.com (93.184.216.34) port 80 görürsün. Başarısız olduğunda ise curl: (7) Failed to connect çıkar.

nmap Kullanarak

nmap, port tarama konusunda altın standarttır. Port 80'i özellikle test etmek için:

nmap -p 80 example.com

Sonuç üç durumdan birini gösterir: open (bir şey dinliyor), closed (port erişilebilir ama hiçbir şey dinlemiyor) ya da filtered (bir firewall paketleri düşürüyor ve nmap durumu belirleyemiyor).

Filtered ile Closed Arasındaki Fark: "Filtered" genellikle bir firewall'ın paketleri sessizce düşürdüğü anlamına gelir. "Closed" ise sunucunun TCP RST ile yanıt verdiğini, yani porta erişilebildiğini ancak herhangi bir servisin bağlı olmadığını gösterir. Bu iki durum farklı çözümler gerektirir.

Windows'ta PowerShell Kullanarak

Test-NetConnection -ComputerName example.com -Port 80

PowerShell'in Test-NetConnection komutu temiz bir TcpTestSucceeded : True ya da False döndürür, bu da betik yazmayı kolaylaştırır. Windows'ta port kontrolüne dair kapsamlı bir rehber için Windows'ta açık portları kontrol etme yazısına bakabilirsin.

netstat ile Port 80 İncelemesi

Sunucunun kendisindeyken, netstat port 80'e hangi sürecin bağlı olduğunu tam olarak gösterir. "Bu makinede port 80'i gerçekten dinleyen bir şey var mı?" sorusuna yanıt arıyorsan kullanman gereken araç budur.

Linux / macOS

sudo netstat -tlnp | grep :80

Bayrakların açıklaması:

  • -t - yalnızca TCP bağlantıları
  • -l - yalnızca dinleme durumundaki soketler
  • -n - sayısal adresleri göster (daha hızlı, DNS sorgularını atlar)
  • -p - süreç adını ve PID'i göster

Tipik bir sonuç şuna benzer: tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx . Bu, nginx'in (PID 1234) port 80'de tüm arayüzleri dinlediğini söyler.

Modern Linux sistemlerinde ss , netstat 'a göre daha hızlı ve tercih edilir:

sudo ss -tlnp | grep :80

Windows

netstat -ano | findstr :80

Bu komut, port 80 ile ilgili tüm bağlantıları ve PID'lerini listeler. PID'den (örneğin PID 4892) süreç adını bulmak için:

tasklist /fi "pid eq 4892"
Port 80 beklenmedik bir süreç tarafından mı kullanılıyor? Windows'ta IIS kurulu ve çalışıyorsa "System" (PID 4) genellikle port 80'i kapabilir. Linux'ta web sunucun dışında başka bir şey port 80'i tutuyorsa, asıl sunucun "address already in use" hatasıyla başlamayı reddeder.

Firewall Tarafından Engellenen Port 80 Nasıl Teşhis Edilir?

Firewall engellemesi, web sunucun yerel olarak sorunsuz çalışmasına rağmen port 80'in dışarıdan kapalı görünmesinin en yaygın nedenidir. Engellenmenin gerçekleşebileceği üç katman vardır:

Katman Nereye Bakılır? Araç
İşletim sistemi firewall'ı (sunucu) iptables / ufw (Linux), Windows Defender Firewall iptables -L -n veya Windows Firewall kuralları
Bulut güvenlik grubu AWS EC2 Security Groups, Azure NSG, GCP Firewall Rules Bulut konsolu gelen trafik kuralları
Ağ/ISP firewall'ı Router ACL, ISP konut port engelleme ISP ile iletişime geç ya da harici port tarayıcı kullan

Linux'ta iptables Kontrolü

sudo iptables -L INPUT -n -v | grep 80

Port 80 için DROP ya da REJECT kuralı görürsen, sorun oradadır. ufw ile port 80'e izin vermek için:

sudo ufw allow 80/tcp
sudo ufw reload

AWS Security Groups Kontrolü

Sunucun EC2 üzerindeyse, EC2 konsoluna git - Security Groups - Inbound rules. TCP port 80'e 0.0.0.0/0 (ya da belirli IP aralığın) üzerinden izin veren bir kural eklemen gerekir. Bu kural olmadan, tüm port 80 trafiği işletim sistemi firewall'ına bile ulaşmadan düşürülür.

Linux tarafındaki port teşhisine daha ayrıntılı bakmak istiyorsan, iptables, ufw, firewalld ve nftables'ı ele alan Linux'ta açık portları kontrol etme rehberini inceleyebilirsin.

HTTP Portu Yanıt Vermiyor: Yaygın Nedenler ve Çözümler

HTTP portu yanıt vermediğinde, sorun genellikle şu kategorilerden birine girer:

  • Web sunucusu çalışmıyor - systemctl status nginx veya systemctl status apache2 ile kontrol et. Durmuşsa başlat: sudo systemctl start nginx .
  • Web sunucusu başlarken çöktü - Logları kontrol et: sudo journalctl -u nginx --since "10 minutes ago" . Yapılandırma sözdizimi hatası ya da port çakışması burada kayıt altına alınır.
  • Sunucu yalnızca localhost'a bağlı - Sunucu yapılandırman listen 0.0.0.0:80 yerine listen 127.0.0.1:80 diyorsa, harici bağlantıları kabul etmez. Sunucu yapılandırmasındaki bind adresini düzelt.
  • Port 80 zaten kullanımda - Web sunucun başlamadan önce başka bir süreç port 80'i aldı. netstat ile tespit et, ardından o süreci durdur ya da servislerden birini farklı bir port kullanacak şekilde yeniden yapılandır.
  • SELinux veya AppArmor bind'ı engelliyor - RHEL/CentOS sistemlerinde SELinux, standart dışı bir sürecin port 80'e bind olmasını engelleyebilir. Reddetme kayıtları için ausearch -m AVC -ts recent 'i kontrol et.
Hızlı kontrol: Doğrudan sunucu üzerinde curl http://127.0.0.1 komutunu çalıştır. Bu çalışıyorsa ama harici bağlantılar başarısız oluyorsa, sorun web sunucusunda değil, firewall ya da ağ kuralındadır.

Port 80 Bağlantısını Ağ Dışından Test Et

Kendi makinenden test yapmak yanıltıcı olabilir - sunucuyla aynı LAN üzerinde olabilirsin ve bu, harici trafiğe uygulanan firewall kurallarını devre dışı bırakır. Port 80 bağlantısını gerçek bir ziyaretçinin deneyimleyeceği şekilde test etmek için harici bir test gereklidir.

Sunucunun HTTP yanıt header'larını dışarıdan kontrol etmek için HTTP Headers Checker aracımızı kullanabilirsin. Araç, verdiğin URL'den header'ları çeker ve bir tarayıcının tam olarak ne aldığını gösterir - durum kodları, sunucu türü, yönlendirme zincirleri ve daha fazlası - hepsi harici bir bakış açısından.

Diğer harici seçenekler:

  • Çevrimiçi port tarayıcıları - portchecker.co veya canyouseeme.org gibi siteler, kendi sunucularından bir IP ve port numarasını test etmeni sağlar.
  • VPS veya bulut kabuğundan - Farklı bir bölgede ücretsiz katmanlı bir bulut instance'ı başlatıp oradan nc -zv your-server-ip 80 çalıştır.
  • nc (netcat) ile yerel test - nc -zv example.com 80 komutu, çoğu Linux/macOS sistemine ekstra bir şey yüklemeden hızlı bir açık/kapalı sonucu verir.

Port 80 ve Port 443: Hangisi Ne Zaman Önemlidir?

Port 443, HTTPS'i (TLS üzerinden şifreli HTTP) yönetir. Modern sitelerin büyük çoğunluğu, port 80 trafiğini anında port 443'e yönlendirir. Ancak port 80'in hala önemli olduğu birkaç durum var:

  • ACME/Let's Encrypt HTTP-01 doğrulama zorlukları - Let's Encrypt'in certbot aracı, alan adı sahipliğini doğrulamak için port 80'i kullanır. Port 80 engellenirse sertifika düzenleme başarısız olur.
  • TLS olmayan dahili servisler - Pek çok dahili araç, izleme ajanı ve mikro servis, özel bir ağ içinde port 80 üzerinden düz HTTP ile iletişim kurar.
  • Eski istemciler ve IoT cihazları - Bazı gömülü cihazlar ve eski istemciler TLS'i desteklemez ve port 80'e bağımlıdır.
  • Yönlendirme altyapısı - Her şeyi HTTPS üzerinden sunsan bile, HTTP isteklerini yakalayıp yönlendirebilmek için port 80'in açık olması gerekir; aksi halde kullanıcılar bağlantı hatasıyla karşılaşır.
En iyi uygulama: Port 80'i açık tut ama web sunucunu HTTP'den HTTPS'e 301 kalıcı yönlendirme yapacak şekilde yapılandır. Bu sayede TLS güvenliğini elde ederken port 80'i yönlendirmeler ve sertifika yenilemeleri için işlevsel tutarsın.
Port 80 sorun giderme için HTTP headers checker aracı

Port 80'in gerçekte ne döndürdüğünü anında gör

HTTP Headers Checker aracımız, herhangi bir URL'den canlı yanıtı çeker; böylece port 80'in açık olduğunu doğrulayabilir, yönlendirme zincirlerini inceleyebilir ve sunucunun gönderdiği tam durum kodlarını görebilirsin - komut satırına ihtiyaç yok.

HTTP Header'larını Şimdi Kontrol Et →

Linux'ta sudo ss -tlnp | grep :80 veya sudo netstat -tlnp | grep :80 komutunu çalıştır. Her iki komut da port 80'e bağlı süreç adını ve PID'i gösterir. Windows'ta PID'i almak için netstat -ano | findstr :80 , süreç adını bulmak için ise tasklist /fi "pid eq [PID]" kullan. Portu en sık kullanan süreçler arasında nginx, apache2, IIS ve Node.js sunucuları sayılabilir.

Aynı netstat veya ss komutlarını kullan, ancak 8080 için filtrele: Linux'ta sudo ss -tlnp | grep :8080 , Windows'ta netstat -ano | findstr :8080 . Port 8080, geliştirme sunucuları, Tomcat, Jenkins ve proxy'ler tarafından yaygın olarak kullanılan alternatif bir HTTP portudur. Oraya bağlı bir şey varsa, onu durdurman ya da yeni servisini farklı bir port kullanacak şekilde yapılandırman gerekir.

Özel web sunucularında ve VPS instance'larında evet - port 80 tipik olarak açıktır ve beklenir. Ev internet bağlantılarında ise pek çok ISP, müşterilerin ev bağlantılarında genel sunucu barındırmasını önlemek amacıyla gelen port 80 trafiğini engeller. Bulut instance'larında port 80, güvenlik grubunda açıkça gelen trafik kuralı ekleyene kadar varsayılan olarak genellikle kapalıdır.

Sunucu dışından nmap -p 80 your-server-ip veya telnet your-server-ip 80 kullan. Sunucunun kendisinden ise bir şeyin dinleyip dinlemediğini doğrulamak için ss -tlnp | grep :80 çalıştır. Firewall kurallarını da kontrol et - Linux'ta ufw kullanıyorsan sudo ufw status komutunu çalıştırarak port 80'in izin verilenler listesinde olup olmadığını görebilirsin.

Linux'ta ufw ile: sudo ufw allow 80/tcp . Doğrudan iptables ile: sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT . Windows'ta, Windows Defender Firewall'a TCP port 80 için gelen trafik kuralı ekle. Bulut sunucusunda ise güvenlik grubuna ya da ağ güvenlik grubuna, istenen kaynak aralığından TCP port 80'e izin veren gelen trafik kuralı ekle.

Port 80, bir web sunucusunun HTTP trafiği sunacak şekilde yapılandırıldığında açık olur; bu, herkese açık her web sitesinin standardıdır. HTTP'yi HTTPS'e (port 443) yönlendiren sunucularda da açık kalır; çünkü yönlendirmenin kendisi, ilk port 80 bağlantısının kabul edilmesini gerektirir. Let's Encrypt certbot gibi sertifika yenileme araçları da HTTP-01 alan adı doğrulama zorlukları için port 80'e ihtiyaç duyar.

Windows Defender Firewall'ı Gelişmiş Güvenlik ile aç, "Gelen Kurallar"a tıkla, ardından "Yeni Kural"ı seç. "Port"u seç, TCP'yi işaretle, yerel port olarak 80 gir, "Bağlantıya izin ver"i seç, tüm profillere uygula (Etki Alanı, Özel, Genel) ve kurala bir ad ver. Alternatif olarak, yükseltilmiş bir PowerShell isteminde şunu çalıştır: New-NetFirewallRule -DisplayName "HTTP Port 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow .

Evet, Linux ve macOS'ta port 80 ayrıcalıklı bir porttur (0-1023 arasındaki portlar bind yapabilmek için root veya CAP_NET_BIND_SERVICE yetkisi gerektirir). Bu, sıradan bir kullanıcı sürecinin yükseltilmiş izinler olmadan port 80'i dinleyemeyeceği anlamına gelir. nginx ve Apache gibi web sunucuları genellikle port 80'e bind olmak için root olarak başlatılır, ardından istek işleme için daha düşük yetkili bir kullanıcıya geçer. Windows'ta port 80 için bu tür bir kısıtlama yoktur.

Port 80 (HTTP), TLS'in gereksiz ya da pratik olmadığı senaryolarda port 443 (HTTPS) yerine kullanılır - güvenilir özel bir ağdaki dahili mikro servisler, yerel geliştirme ortamları veya TLS desteği olmayan IoT cihazları gibi. Port 80, Let's Encrypt HTTP-01 sertifika doğrulama zorlukları için de gereklidir. Herkese açık siteler için TLS ile port 443 kesinlikle tercih edilmeli; port 80 ise yalnızca yönlendirmeler için açık tutulmalıdır.

Hayır, bunlar farklı portlardır. Port 80, HTTP için IANA tarafından atanmış standarttır ve tarayıcılar port belirtilmediğinde otomatik olarak bunu kullanır. Port 8000 ise resmi olmayan bir alternatiftir ve geliştirme sunucuları tarafından yaygın olarak kullanılır - Python'un python -m http.server komutu varsayılan olarak 8000'i kullanır, Django'nun geliştirme sunucusu da öyle. Port 8000 üzerindeki bir servise erişmek için URL'de açıkça belirtmen gerekir: http://example.com:8000 .