Autor Zpráva
Str4wberry
Profil

# Provozování webových stránek z domácího počítače (= vlastní webový server)

Pro testování stránek je určitě vhodné si zřídit testovací webový server. Objevují se zde i dotazy ohledně provozování i hotových veřejných stránek z domácího počítače.
V principu to není složité, ovšem většinou toto řešení nemá výhody, které od něj autoři takových dotazů očekávají.
Skutečná výhoda je absolutní kontrola nad serverem a jeho nastavením.
Představa mnoha tazatelů, že to bude jednodušší a levnější než hosting, se nezakládá na pravdě. Provozovat webový server doma je naopak složitější a dražší.

Co je tedy potřeba?

1. Počítač
– Webové stránky by měly být dostupné neustále, takže pro webový server bude nutný vyhrazený počítač (který nebude nikdo vypínat, restartovat a podobně)
– Obvykle je spíš než výkon důležitá spotřeba. Provoz běžného webu není výkonově náročný, zato stále běžící počítač má poměrně velkou spotřebu elektřiny. Běžný domácí počítač (desktop) kolem 100-200W, se specializovanými úspornými komponentami (procesor, grafická karta, atd.) se lze dostat zhruba ke 40W. Při ceně elektřiny kolem 4,50Kč/kWh i 40W odpovídá nákladům téměř 1600Kč za rok. Nepřetržitý provoz Kancelářského či dokonce herního počítače může tedy stát několik tisíc Kč ročně. (Údaje odvozené od situace v roce 2012)
– Nepřetržitý běh má nadprůměrné nároky na komponenty počítače a také jeho návrh (týká se přehřívání, problém zejména u notebooků). Ideální by bylo použít specializované serverové a navíc redundantní komponenty, ovšem vyjde to samozřejmě dráž.
– Je také nutné vyřešit zabezpečení a zálohování dat. Počítač by měl mít několik disků v RAIDu (což je zabezpečení, ale ne zálohování) a k tomu pravidelné zálohování.

2. Připojení k Internetu
– K provozování webových stránek je nutná veřejná a statická IP adresa (u některých poskytovatelů připojení je za příplatek).
– Potřebná rychlost připojení závisí na obsahu a návštěvnosti stránek na serveru, ale zatímco u typického domácího připojení je podstatný hlavně download, u webového serveru naopak hlavně upload. Rychlost uploadu je u některých poskytovatelů mnohem nižší, než rychlost downloadu (např. nejvyšší tarif od UPC má rychlost downloadu 120Mbit/s, ale uploadu jen 10Mbit/s - září 2012).
– Je také vhodné myslet na případný výpadek připojení, například výběrem poskytovatele a tarifu, kde jsou alespoň nějaké záruky dostupnosti. Ideální je mít ještě záložní připojení pro případ výpadku hlavního připojení.

3. Obsluha a znalosti
– V první řadě, pokud nevíte jak co nastavit a nejste si jistí co děláte, nepouštějte se do toho. Vlastní server je vhodný spíše pro pokročilejší uživatele, kteří chtějí mít vše pod kontrolou.
– Je dobré zvážit, kdo bude řešit případné problémy když tam zrovna nebudete. Když např. odletíte na 14 dní k moři a druhý den spadne server, kdo to bude řešit?

Pro běžného majitele stránek je ve většině případů pohodlnější, jednodušší a levnější se spolehnout na placený hosting.


Nastavení pro nejrozšířenější Apache HTTP Server


Pro získání základních informací k nastavení serveru je vhodné si nejdříve prostudovat příslušnou kapitolu na webu Jak psát web – Něco málo o nastavení serveru.

# Kterak ověřit, zda je rewrite povoleno a zapnuto

#pouze pro test! (jakykoli pozadavek presmeruje na tuto diskuzi)
RewriteEngine On
RewriteRule .*   http://www.jakpsatweb.cz/ [L]

# Jak zapnout modul mod_rewrite v Apache

V konfiguračním souboru (nejčastěji httpd.conf) se modul zapíná konfigurační direktivou na řádku

LoadModule rewrite_module modules/mod_rewrite.so

Na začátku nesmí být znak # označující komentář, s kterým se modul mod_rewrite nenahraje a použitá pravidla v souboru .htaccess vyvolají při přístupu na stránky chybu 500 Internal Server Error. Do chybového logu error.log je zároveň zaznamenána chyba Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration.

Pro fungování pravidel mod_rewrite je ještě nutné, aby byla zapnuta volba (v konfiguraci Apache nebo v souboru .htaccess):

Options +FollowSymLinks

Při použití přepisovacích pravidel v souboru .htaccess se také předpokládá, že je v konfiguraci webserveru zapnuto načítání konfigurace z tohoto souboru v příslušné sekci <Directory> nebo <Location>. Pokud se používá více virtuálních serverů, tak také v konfiguraci každého z nich.

<Directory /var/www/>
  AllowOverride All
</Directory>

# Univerzální obecné pravidlo

Univerzální přepis všech virtuálních adres, které vše předhodí PHP skriptu index.php, který se o zpracování adres postará.
RewriteEngine On
#pokud je to zanorene v nejakem adresari, uvedte ho za /
RewriteBase /
#ignoruj vsechny opravdove adresare
RewriteCond %{REQUEST_FILENAME} !-d
#ignoruj vsechy opravdove soubory (php skripty, obrazky, styly)
RewriteCond %{REQUEST_FILENAME} !-f
#vsechno ostatni necha vygenerovat index.php (ten se musi rozhodnout podle promenne url, zda stranka existuje a jaky ma mit obsah)
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Pokud je cílem adresa ve tvaru example.com/jedna/dva/tri, není nic snazšího než si proměnnou $_GET["url"] rozsekat do pole (adresa bude přepsána na example.com?url=jedna/dva/tri):
$adresa = explode("/", $_GET["url"]);
Jednotlivé části jsou potom v poli $adresa s příslušnými indexy.


# Stránky s adresou bez přípony

Na krátké adrese bez přípony http://www.example.com/adresar/cokoliv se bude zobrazovat obsah souboru se stejným jménem, ale s příponou http://www.example.com/adresar/cokoliv.php. Má-li se přepisovat na jiný typ souboru, tak stačí v pravidle dle potřeby změnit koncovku .php (například na .html).

RewriteEngine On

# podstrčení PHP, přepsat pouze na existující skript
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$    /$1.php    [L]

# podstrčení HTML, přepsat pouze na existující soubor
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^.]+)$    /$1.html    [L]

Na stránkách, kde se dříve používaly adresy s příponou, je ještě vhodné přidat přesměrování ze starých adres na nové s odstraněnou příponou.

# přesměrování na verzi bez přípony, pokud ještě není přepsáno a není to POST požadavek
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.(php|html)$ http://%{HTTP_HOST}/$1 [L,R=301,NE]

V některých situacích (hlavně když se cesta shoduje se začátkem jména skriptu) můžou pravidla kolidovat s modulem mod_negotiation, který se pokouší domyslet příponu a hledá vhodné soubory ještě před mod_rewrite. Má-li se tomuto nechtěnému chování zabránit, tak je nutné tento modul vypnout.

<IfModule mod_negotiation.c>
  # vypnout automatické vyhledávání alternativ
  Options -MultiViews
</IfModule>


Návrhy na doplnění pište sem.
Toto téma je uzamčeno. Odpověď nelze zaslat.