Přechod z Apache na NGINX
- MartinitCZ
- Člen | 580
Přečetl jsem si několik článků na téma Apache vs. NGINX a rozhodl jsem
se přejít.
Ohledně nastavení jsem našel i zde hodně informací, takže tam by neměl
být problém.
Nicméně mě zajímá, jak řešíte .htaccess, který v NGINX není?
Jak vypadá výchozí Nette .htaccess přepsán pro NGINX?
Řešíte nějak kompatibilitu? Tzv. projekt je možné pustit jak pod NGINX,
tak i Apachem.
- norbe
- Backer | 405
Neexistence htaccessu nahradíš konfigurací virtualhostů. Nginx si to zpracuje akorát při restartu a nemusí to řešit při každém requestu.
Nějakou ukázkovou konfiguraci najdeš v tomto vlákně.
- David Kudera
- Člen | 455
Jinak když jsem přecházel já, tak jsem šel ještě podle tohoto článku . Sice to není pro nette, ale pro začátek se mi to hodilo
- MartinitCZ
- Člen | 580
Tak jsem se k tomu konečně dostal a nepovažuji své rozhodnutí za
štasné.
Mod rewrite se mi zdá jako nenahraditelný.
- Tomáš Kolinger
- Člen | 136
Nginx rewrite má, ač většinou není potřeba a to co se u Apache dělá pomocí rewrite, tak lze (a správně se také má) řešit přes virtual hosty (www to non-www, http to https, …).
http://nginx.org/…_module.html
Mě osobně se nginx libí mnohem více než apache, ač když přijde
na netriviální routing, tak je konfigurace apache snadnější. Tím myslím
to, že běžně používáš routing „pokud daná adresa není soubor ani
složka, tak to hoď na index.php“ tj. „try_files $uri $uri/ /index.php“,
já ale mám podobných zápisů víc a zatím se mi nepodařilo vytvořit
takovou kombinaci locations, aby to fungovalo korektně za každé situace
(umím to nakonfigurovat, ale občas to prostě nefunguje, nevím proč a neměl
jsem dost času to nějak hlouběji zkoumat). Tak jsem vyřešil
i komplexní routování, měl jsem chybu v definici regex location, dobrá
pomůcka http://www.nginxtips.com/…n-directive/
Na nettí sandbox by ti mělo stačit následující:
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.(neon|ini|log|yml)$ {
deny all;
access_log off;
}
location ~ /\.ht {
deny all;
access_log off;
}
Potom samozřejmě (stejně jako u apache) musíš nějak handlovat PHP, tam je konfigurace specifická, netuším co a jak používáš, já používám php-fpm a sockety.
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/cesta/k/nejakymu/socketu;
include fastcgi_params;
}
Tohle nastavení mám otestovaný a funguje dobře, pokud se nerozhodneš mít složitější routing na straně web serveru.
Editoval Tomáš Kolinger (23. 12. 2014 19:57)
- Aurielle
- Člen | 1281
Pozor na zdánlivě neviditelné chyby v konfiguraci při použití nginxu a php-fpm. Dobrou konfiguraci má na blogu @FilipProcházka: https://filip-prochazka.com/…ny-s-nginxem, nicméně já si ji musel při nasazování trošičku upravit, v téhle verzi se to nechtělo rozběhnout.
- David Kudera
- Člen | 455
Já zase včera zjistil, že na novým kubuntu musím v konfiguraci php
použít include fastcgi.conf
místo
include fastcgi_params
. Načítala se jinak jen prázdná
stránka… Takový věci se hledají pak trochu těžce no
- Tomáš Kolinger
- Člen | 136
@Aurielle
Jaký chyby? Snad jen fastcgi_split_path_info ^(.+?\.php)(/.*)$
vs.
cgi.fix_pathinfo=1
? Mohl by si být prosím trochu
konkrétnější? Já na tý odkazovaný verzi nic extra nevidím, jen nějaký
nějaký brutální harakiri kvůli těm automatických doménám, což je
předpokládám určený na vývoj, do produkce bych takovou magii určitě
nedal. Potom tam máš pár direktiv, který přepisuj výchozí hodnoty na
stejný hodnoty. Či nejsou potřeba – fastcgi_index…
@David Kudera
/etc/nginx/fastcgi_params je prostě soubor, pokud se jmenuje fastcgi.conf či
jen fastcgi_params je jedno, může to být klidně fastcgi_params.koťátko,
záleží na tom kdo to builduje a jakou má konvenci. Debian a dotdeb
používá /etc/nginx/fastcgi_params. V logu by ses ale měl dočíst nějakou
chybu, nejspíš nebyla nadefinována nějaká cesta, takže si PHPčku strkal
neexistující soubor či tak něco.
Editoval Tomáš Kolinger (20. 12. 2014 0:51)
- David Kudera
- Člen | 455
@TomášKolinger jasně no, to, že to je soubor, je mi jasný.. Do logu jsem tuším ani nekoukl, do teď mě totiž nenapadlo, že může nginx vůbec nastartovat s takovou chybou. Navíc, když na předchozí verzi ubuntu distribucí to šlo. Ale tak pohoda, google a „nginx blank page ubuntu“ zná odpověď :-)
- Tomáš Kolinger
- Člen | 136
@Aurielle
Paradoxně přesně tenhle článek jsem četl a stále nevím na jaký chyby si
narážel. Fixnutí cesty souboru jsem uvedl, zkontrolování existence
vstupního souboru pro blok PHP také. Něco mě uniká, či si myslel tyhle
dvě věci? Ač upozorňuješ na chyby, tak už neřekneš co přesně je
špatně a já tady můžu maximálně hádat.
- MartinitCZ
- Člen | 580
@TomášVotruba Mohl bys prosím poskytnout tvé kompletní nastavení ngix + nějaký virtual host?
- MartinitCZ
- Člen | 580
@TomášKolinger Díky.
Už to začínám pomalu rozjíždět jak má :)
Editoval MartinitCZ (20. 12. 2014 15:27)
- MartinitCZ
- Člen | 580
Tak super už to vše jeden jak má.
Díky za nakopnutí, jelikož jsem se na to chtěl ............
BTW. Používate někdo nginx na windows? Dle jakého návodu jste postupovali?
- Maren
- Člen | 23
Ahoj, při konfiguraci APACHE jsem neměl problém s nastavením mod_rewrite. Teď tuto věc potřebuji uvézt do provozu na NGINX a nedaří se mi. Mohl by někdo trochu nastínit logiku nastavení v NGINX ? Samozřejmě jsem prošel výše zmíněné kódy
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.(neon|ini|log|yml)$ {
deny all;
access_log off;
}
location ~ /\.ht {
deny all;
access_log off;
}
a následně
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/cesta/k/nejakymu/socketu;
include fastcgi_params;
}
ale poprosil bych k tomu o trochu vlídného lidského slova ;)
Můj soubor, který mi z toho vznikl je tady
server 80;
server_name random.cz
root /usr/share/nginx/random.cz
autoindex onů
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.(neon|ini|log|yml)$ {
deny all;
access_log off;
}
location ~ /\.ht {
deny all;
access_log off;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Avšak při spuštění nástroje CHECKER(NETTE…tool) mi tento stále hlásí, že MOD_REWRITE není v provozu.
Najde se dobrá rada?
- jiri.pudil
- Nette Blogger | 1032
Ten checker testuje jenom rewrite modul pro Apache, nikoli Nginx, takže to je zcela v pořádku.
- jiri.pudil
- Nette Blogger | 1032
a. O ničem takovém nevím.
b. Ne úplně:
– server 80
→ listen 80
(což je zároveň
defaultní hodnota, takže tam ta direktiva vůbec být nemusí)
- autoindex onů
– překlep?
- include fastcgi_params;
bych dal před
fastcgi_param ...
, takhle si imo ten parametr přepíšeš
defaultním z toho includovaného souboru
Kdyby sis chtěl něco přečíst, napsal jsem o konfiguraci Nginxu a PHP-FPM s Nette poměrně vyčerpávající článek i s reálnými ukázkami :)
Editoval jiri.pudil (14. 1. 2015 11:56)
- Maren
- Člen | 23
Čtu a zkouším, ale stále mám pocit, že to nejede. Jedná se opravdu pouze o toto místo, kde je potřeba vyřešit obdobu „MOD REWRITE“ ? Není potřeba ještě konfigurace v jiných souborech? Jestli správně chápu, tak celý rewrite řeší tyto řádky
location / {
try_files $uri $uri/ /index.php;
}
Ale po konfiguraci spustím svůj projekt a pouze bílá stránka (v adrese
je vidět změnu, ale stránka je bílá – prostě nic)
Ten NGINX provozuju na Linuxu (do této fáze bylo vše super). Není potřeba
smazat nějaké soubory, když doposud byl ten projekt tvořen na APACHE?
- peane
- Člen | 16
Ahoj, nějak se mi pořád nedaří na windows (http://wpn-xm.org/)… Nenašel by se někdo ochotný kdo by napsal jaký config použít? Děkuji