Přechod z Apache na NGINX

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MartinitCZ
Člen | 580
+
+3
-

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
+
0
-

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
+
+1
-

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
+
-3
-

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
+
+2
-

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
+
0
-

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
+
0
-

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

MartinitCZ
Člen | 580
+
0
-

@Aurielle Jak sám píše. Verze od Filipa nefunguje :/

Tomáš Kolinger
Člen | 136
+
+1
-

@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
+
0
-

@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
+
0
-

@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
+
0
-

@TomášVotruba Mohl bys prosím poskytnout tvé kompletní nastavení ngix + nějaký virtual host?

Aurielle
Člen | 1281
+
0
-

@TomášKolinger narážel jsem na ještě večer chybějící direktivu try_files a popřípadě špatné nastavení cgi.fix_pathinfo.

MartinitCZ
Člen | 580
+
+1
-

@TomášKolinger Díky.
Už to začínám pomalu rozjíždět jak má :)

Editoval MartinitCZ (20. 12. 2014 15:27)

kuba1999
Člen | 13
+
0
-

Mělo by býti doplněno ?$args:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Pak vše fungovalo…

MartinitCZ
Člen | 580
+
0
-

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?

Aurielle
Člen | 1281
+
0
-

Někde tady na fóru je návod, jak nginx rozjet na windowsové vývojové mašině, možná pomůže :)

Tomáš Kolinger
Člen | 136
+
0
-

Na Windows se to moc nevyplatí, viz http://nginx.org/…windows.html

vvoody
Člen | 910
+
0
-

Ja fungujem na http://winginx.com/en/, s inštaláciou som nemal žiadny problém

Filip Procházka
Moderator | 4668
+
+3
-

Když už přecházite na nginx, tak bych to udělal rovnou pořádně :)

Maren
Člen | 23
+
0
-

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
+
0
-

Ten checker testuje jenom rewrite modul pro Apache, nikoli Nginx, takže to je zcela v pořádku.

Maren
Člen | 23
+
0
-

Dobře, děkuji ti za odpověď.
Zeptám se tedy ještě

  1. Existuje něco podobného pro NETTE jako je CHECKER a dá se použít pro NGINX ?
  2. Je můj výše zmíněný zápis dobře?
jiri.pudil
Nette Blogger | 1032
+
+2
-

a. O ničem takovém nevím.
b. Ne úplně:

server 80listen 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
+
0
-

Č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?

David Kudera
Člen | 455
+
0
-

Koukni kousek výše ;-)

peane
Člen | 16
+
+1
-

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