Bir PC'yi bir web sunucusu olarak yapan ve onu yapamaz yapan şey nedir?


43

Bir bilgisayarı web sunucusu olarak kullanma hakkında bir sorum var. Neden belirli bir bilgisayar bir web sunucusu olabilir? Hangi özellikler bir web sunucusu olmayı mümkün kılıyor? Bir bilgisayarın web sunucusu olarak hareket edemediği durumlar var mı?


Bir ağ kartı.
el.pescado

1
Gördüğüm en küçük Apacer tarafından yapılan bir wifi SD kart. 4 MB ram'a sahiptir ve linux çalıştırır ve web isteklerine yanıt verebilir ve bir kameradayken görüntü iletebilir.
user3528438 16.03

@ el.pescado İstemci aynı ana bilgisayarda değilse.
Dmitry Grigoryev

Yanıtlar:


96

Hemen hemen her bilgisayar, bir ağa bağlanabilmesi ve web sunucusu yazılımını çalıştırabilmesi koşuluyla [web] sunucusu olarak kullanılabilir. Bir web sunucusu oldukça basit olabileceğinden ve ücretsiz ve açık kaynaklı web sunucuları bulunduğundan, uygulamada, herhangi bir cihaz web sunucusu olarak davranabilir.

En büyük sorun ağ tarafıdır. Bir sistemin sunucu görevi görmesi için diğer makinelerin erişebilmesi gerekir. Sadece bir LAN'da kullanım için ise endişelenmeyin; Ancak, daha geniş bir İnternetten kullanım içinse, o zaman verinin yönlendirilmesi gerekir. Bu, sunucuyla ilişkilendirilmiş statik bir IP adresi (veya bir yönlendirici aracılığıyla iletilen bağlantı noktası) veya bir etki alanı adını / alt etki alanını değişen dinamik bir IP adresine eşleyebilen bir dış hizmet gerektirir.

(FWIW, temel bir web sunucusu olarak kullanılabilecek 10 dolarlık bilgisayar satın alabilirsiniz .)

Elbette, herhangi bir cihaz bir web sunucusu olarak işlev görse de, web sitelerinin işlevselliği büyük ölçüde değişebilir ve ucuz bir cihaz (veya yavaş bağlantı), belirli bir web sitesinin ne olduğuna bağlı olarak talepleri karşılayamayabilir.

Yukarıdaki her şeyin web sunucularından bahsettiğini unutmayın - ancak hemen hemen her tür sunucu için de aynı şey söylenebilir.


2
Diğer bir sorun da, ucuz cihazların "gerçek" sunucular kadar güvenilir olmamasıdır, çünkü bileşenlerinin çok uzun bir süre boyunca çalışması onaylanmadığından ve hafızasının ECC RAM gibi bit çürümesini önlemenin bir yolu yoktur. Meslektaşlarımın bilgisayarlarını birkaç aylığına bıraktıklarını ve
BSOD’de olduklarını gördüm

11
Evet ve hayır. Ecc ram'siz 7 gün 24 saat sistemler ve birçok ev / küçük işletme yönlendiricisi - wenb sunucuları olan, bsod olmadan oldukça güvenilir bir şekilde çalışan Ive. Tabii ki, BSOD eşdeğerleri Windows dünyasının dışında yaygın değildir.
davidgo

9
@davidgo Bugcheck hataları, hatalı donanım ya da tehlikeli sürücüleriniz yoksa, Windows dünyasında yaygın değildir. Herhangi bir işletim sistemi için benzer sorunlara neden olan. Hem Windows hem de Linux'ta video sürücüsü ile ilgili sorunların sayısının kaybedilmesi.
Bob

7
@davidgo BSOD sadece güvenli bir cihazdır, kendi başına bir sorun değildir. Sinsi kod / veri bozulmalarını ve donanım hasarlarını önlemek için son bir hendek girişimi. Her durumda, anekdot kanıtlar böyle şeylerde tamamen yararsızdır - bununla asla görünür bir sorunla karşılaşmama ihtimaliniz çok yüksektir, ya da bunu yanlış bir şekilde eklersiniz ve bunu yapan çok sayıda çevresel faktör vardır. az veya çok muhtemel (sıcaklık, enlem, EM gürültü, elektrik şebekesi kalitesi, sistem yükü, verilen bir bileşenin güvenilirliği). ECC RAM'in maliyeti ve değeri bir iş kararıdır.
Luaan

15
Muhtemelen evde zaten birkaç web sunucunuz var: Yönlendiriciniz / erişim noktanız, yazıcınız ve akıllı sayaçlar, IP kameralar, VoIP telefonlar, programlanabilir termostatlar, TV'niz gibi diğer tüm yapılandırılabilir ev otomasyon aygıtları. Küçük olanlar, ne kadar az donanıma ihtiyaç duyulduğuna dair bir fikir verir. Başka bir açıklama: Ağ kurma, bir web sunucusu için katı bir gereklilik değildir - yalnızca aynı makinedeki kullanıcılara sayfalar sunan bir sunucunun olması çok mantıklı olabilir .
Peter - Monica

25

Hiç zor değil. Bu yalnızca "web sunucusu" tanımınıza bağlıdır.

Bir mikrodenetleyici kadar basit cihazlarda bir "web sunucusu" çalıştırmak tamamen mümkündür.

Çıplak minimal web sunucusunun yapması gerekenleri düşünelim. Bazı metinler çıkarması gerekir - mutlaka bir istemciye HTML'de bile değil. Bir isteğin bir istek olduğunu bilmesi ve uygun şekilde yanıt vermesi gerekir. "İstemciniz" yerel olsaydı ağ bağlantısına bile ihtiyacınız olmazdı. Tamamen anlamsız bir web sunucusu olurdu.

Bunlardan birinin web sunucusu olacaktır .

görüntü tanımını buraya girin

Bir müşteri için ağ bağlantısı ekleme (Ethernet iyidir, ancak wifi üzerinde çalışan bir web sunucusuna bağlanamamanızın teknik bir nedeni yoktur) ve bir istemciden yönlendirmek daha iyi olacaktır.

A $ 5 ESP8266 - wifi ile ucuz, minimal bir mikrodenetleyici, bunun çoğunu halledebilir ve hatta belki temel dinamik içerik

Python kullanarak hızlı dosya paylaşımı için böyle bir şey kullanıyorum. Mikrodenetleyicide böyle bir şey yazmak ya da bir telefonda çalıştırmak bile hala tamamen mümkün.

Statik içerik sıkıcı. Dinamik diller ekleyin ve daha ağır ağırlık sistemlerini düşünmeye başlamanız gerekir. Linux veya Windows çalıştıran şeyler güzel.

Bu noktada, tüketici yönlendiricilerinden, kullanıcı arayüzündeki web sayfalarını kullanan küçük uygulamalardan ve bunların hepsinden bahsediyorsunuz.

Bir web sunucusu bile karmaşık bir sorun değildir ve beş satır basılarak yazılabilir ve Linux'ta çalıştırılabilir. Şimdi kıyamet ... Ama kıyamet çalıştırabilen herhangi bir sistem bir web sunucusunu çalıştırabilir.

Bir iyi , belirli bir yükü taşıma kapasitesine sahip web sunucusu kurulumu biraz daha zordur.


11
Bazı TTL yongalarını birlikte lehimlemek ve bir web sunucusu çalıştırmak bile mümkün. Detaylar için bu web sayfasına bakın
Josef

7
Bu, kabaca "Bir çeliği bir araya getirip Eyfel kulesini inşa etmek bile mümkün." Bu çok havalı
Journeyman Geek

1
Eğlenceli, 'anlamsız' web sunucunuz, bazı ürünler için kullanılan yardımın aynen nasıl olduğunu :) Bir tarayıcı tarafından) ve sunulan sonraki sorunlar (güvenlik duvarım açıkken yardım sayfalarım yüklenmiyor!).
djsmiley2k - CoW

5
@ djsmiley2k Eclipse yardım, yerel bir web sunucusu kullanıyor. Çünkü Java
user253751,

2
Bir raspi, ticari web sunucularının% 99.9'unun 2000 yılında olduğundan daha yüksek güçtedir. Ve insanlar o zamanlar çok dinamik şeyler yapıyorlardı.
rackandboneman,

11

Çıplak minimum

Kelimenin tam anlamıyla, aşağıdakilere sahipse , herhangi bir bilgisayar bir web sunucusu olabilir:

  • Bir ağ bağlantısı
  • Çok basit bir web sunucusu uygulaması, böyle .

Ama yeterli olur mu? Şimdi, bu zor bir soru.

Intranete Hizmet Etmek

Bir bilgisayarın tüm web sitesine modern web sayfaları veya web uygulamaları sunan bir web sunucusu olması için (örneğin, okul, şirket, müze):

  • Aynı anda birden fazla bilgisayarı yanıtlayabilen donanım. Belki Linux veya Windows XP çalıştıran eski bir bilgisayar yapardı.
  • Yeterli bant genişliğine sahip yüksek hızlı bir ağ bağlantısı, 1 Gbit / sn Ethernet veya 802.11g Wi-Fi diyelim.
  • Gibi iyi bir web sunucusu uygulaması, IIS , Apache , Nginx veya başkaları . (Şaşırtıcı bir şekilde, bu üç ücretsizdir.)

Ancak bu, küçük operasyonlar için sadece minimum bir miktardı. Operasyonunuz büyüdüğünde (yani daha yoğun bir trafik alır ve statik sayfalar yerine karmaşık web uygulamaları sunar), ihtiyaçlarınız artar. Sonunda ihtiyacınız olacak:

  • Birkaç Xeon işlemciye ve yüzlerce gigabayt RAM'e sahip rafa monte sunucular gibi sunucu sınıfı donanım
  • Fiber optik ağlar

Dış dünyaya hizmet etmek

Tüm dünyaya hizmet etmek için İnternet altyapısından yararlanmak için, şunlara ihtiyacınız olacak:

  • Genel bir IP adresi
  • Genel bir DNS sunucusu
  • Güvenli bir bağlantı kurmak için saygın sertifika yetkilileri tarafından verilen dijital sertifikalar

Bunlar olmadan sahip olduğunuz tek şey potansiyel bir web sunucusudur.


._. Bir raspi minimum çıplak ve halt gibi titrek düşünüyorum. Ayrıca birçok şeyi hatırlamaya değer, bir web sayfasını kullanıcı arayüzü olarak kullanır. Yönlendiriciniz , örneğin bir web sunucusuna sahip, ancak değil .
Journeyman Geek

9
Bu yorumlara katılıyorum - bir yönlendirici bir web sunucusu IS (başka şeylerin yanı sıra). Yorumların mantığına göre, bir web sunucusu diye bir şey yoktur, çünkü böyle bir sistemin başka bir işlevi vardır.
davidgo

5
Yoğun CPU ve diğer kaynak ihtiyaçları, web uygulamaları ve dinamik HTML oluşturma dilleri hakkında daha fazla şey ifade ediyor - örneğin PHP, genel ancak web sitemizden ziyade bu tür bir dili (genellikle bu şekilde kurulursa) çok fazla verimsiz. Eğer biri rahatsız olursa, ağır bir statik sayfa yükünün üstesinden gelmek için 16 MB RAM'li bir 33MHz 80486 üretilebilir.
rackandboneman

@rackandboneman Çok iyi. Endişenizi gidermek için "operasyonunuz büyüyerse" anlamını netleştireceğim.

@rackandboneman Sadece 'idare edilebilir' değil, aynı zamanda 'sık sık' yapıldı.
jwg

8

Programlama / Yazılım perspektifi:

Ağ bağdaştırıcısında Bağlantı Noktası 80'i dinleyebilen bir program. Bu sahip olduğunuz işletim sistemi üzerinde çalışır. Ve istekleri HTTP tanımlarına göre işleyebilir.

Herhangi bir bağlantı noktasını dinleyen bir programa aynı ağdaki her bilgisayardan erişilebilir. İdeal olarak, bilinen bir standart bağlantı noktası olması gerekir (HTML sunucuları için 80 ve 8080; özel uygulamalar için 1024'ü seçin). Ağ üzerinden erişilebilen bir programın geliştirilmesini, üzerinde çalıştığınız bilgisayar üzerinde çalıştırmak bile yaygın bir uygulamadır.

Localhost aracılığıyla erişebiliyorsanız, aynı ağ içindeki herhangi bir yerden ve bu makineye ve ağ bağdaştırıcısına giden herhangi bir yerden erişebilirsiniz.

Uyarma: Varsayılan kurulumlardaki çoğu hepsi bir arada geliştirme ortamı, Localhost'a erişimi sınırlar. Sonuçta yönetici araçlarınızın İnternetten erişilebilir olmasını istemiyorsunuz.

Donanım:

Donanım, "XP veya Linux çalıştıran 10 yaşındaki bilgisayar" ile başlıyor ve "128 çekirdekli, 2 TiB RAM ve bir basında 256 TiB SSD ile baskın" ile bitiyor. . Web uygulamaları hoş bir şekilde paralelleştirilebilir olma eğilimindedir, bu yüzden bu sunucuların kümeleriyle daha da fazla geliştirmek zorunda kalabilirsiniz. Ve Geocast. Ve dağıtılmış tasarım. Ve bir sürü başka şey. Bu tamamen hangi ölçekte bahsettiğimize bağlı.

Karşılaştığınız en basit web sunucusu kullandığınız yönlendiricidir, btw. Hepsi bir Linux'ta barındırılan (tüm DHCP ve NAT işlerini yapan) yapılandırma amaçlı bir Web sunucusu çalıştırıyorlar.

ağ:

İnternetteki herhangi bir yer de dahil olmak üzere diğer ağlardan yol almak, şimdi bu tamamen farklı bir hikaye ve uygulamayı programlamaktan daha da zor. Yönlendiricinizin NAT'ı ve NAT taşıyıcı sınıfı NAT arasında bu şeyler gerçekten zorlaştı.

  • Özel kişi olarak bile ISS'nizden her zaman sabit bir IP adresi satın alma seçeneğiniz vardır. Gösterildiği gibi, bu büyük olasılıkla ekstra olacaktır. Bir DNS girişi, bir yaşam kalitesi olayı olacaktır.
  • Taşıyıcı Sınıf NAT'dan önce , Dinamik IP adresiniz ve bir DynDNS servisi ile çalışabilirsiniz. Ancak, NAT taşıyıcı sınıfıyla, üstesinden gelmek için kontrol edilemeyen bir NAT'a daha sahipsiniz - belki. Sağlayıcınıza bağlı.
  • Bir tür NAT, herhangi bir sayıda katmana geçiş yapmanın nihai çözümü TCP / IP delik açmadır . Tüm VPN çözümleri bunu kullanır. Skype, TeamViewer ve diğerleri gibi. Sorun şudur: TCP / IP delik delme işlemi yapmak için, Internet'te zaten ulaşılabilir bir sunucuya ihtiyacınız vardır.
  • Küçük ölçeklerle (1 ila 10 uç nokta) ilgili ise, genellikle en basit yol, sunuculara sahip olan ağa sadece VPN bağlantısı yapmaktır. Çoğu yönlendiricinin desteği var.

2
Msgstr "Linux çalıştıran 10 yaşındaki bilgisayar". Ağın yaşını göz önüne alarak, bunu güvenle geri alabiliriz. Kişisel olarak, yaklaşık 20 yıl önce orijinal bir Intel 80386 üzerinde bir web sunucusu çalıştırdığını hatırlıyorum.
MS 14.01, MS:

@ MSalters Bundan daha düşük sonlara gidebilirsiniz. Bugün bulamıyorum, ancak birkaç yıl önce donanıma bir moto 68k kadar düşük bir uçta çalıştırılabilecek bir kabuk betiği / CGI web sunucusuyla karşılaştım. Görünüşe göre gömülü alanda 15-20 yıl önce nispeten popülerdi.
Dan

3

Python yüklü, elinizde herhangi bir bilgisayar (PC, dizüstü bilgisayar, akıllı telefon, ahududu) ... varsa, aşağıdakini yazın:

$ python -m SimpleHTTPServer

Veya Node.js yüklüyse:

$ npm install http-server -g
$ http-server

Kutlama, bir web sunucunuz var!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.