Nette a nginx – jak na routování
- Tomáš Votruba
- Moderator | 1114
Nedaří se mi rozjet routování pod nginx.
Četl jsem Honzův
návod, přidal jsem direktivu try_files
zmíněnou
v dokumentaci, ale bez úspěchu.
Máte s ním někdo zkušenosti?
- Milo
- Nette Core | 1283
Používám
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
- David Kudera
- Člen | 455
Na linuxu mi to funguje takhle:
server {
listen 80;
server_name website.cz;
root /var/www/website/www;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~/\.ht {
deny all;
}
}
Editoval sakren (27. 4. 2014 20:52)
- Filip Procházka
- Moderator | 4668
Lépe takto, hlavně ten blok pro phpko je důležitý mít tak jak ho mám já, je tam nějakej fígl s bezpečností, už se nepamatuju, přišel na to Honza Tvrdík a je to i kdesi v dokumentaci kdyby tě to zajímalo.
server {
listen 80;
server_name ~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$;
index index.php index.html;
set $try_dir $domain;
if (-d /var/www/hosts/$second.$domain) {
set $try_dir $second.$domain;
}
root /var/www/hosts/$try_dir;
access_log /var/log/nginx/access.$try_dir.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
sendfile on;
send_timeout 1024s;
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
try_files $uri =404;
}
location ~ /\.(ht|gitignore) { # deny access to .htaccess files, if Apache's document root concurs with nginx's one
deny all;
}
location ~ \.(neon|ini|log|yml)$ { # deny access to configuration files
deny all;
}
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
}
Btw, díky tomu reguláru v server name mám dynamické virtualhosty.
# prvně se hledá subdoména
www.kdyby.org -> /var/www/hosts/www.kdyby.org
# když neexistuje tak bez subdomény
www.kdyby.org -> /var/www/hosts/kdyby.org
# a tohle se chová předvídatelně
kdyby.org -> /var/www/hosts/kdyby.org
Díky tomu se mi defaultně všechny subdomény směrují na
kdyby.org
složku, ale když subdoména existuje, ta se pustí tato
aplikace. Potom stačí jenom dělat symlinky z projektů do
www/hosts
podle libosti :)
Komu by se chtělo psát 100 vhostů, když může mít jeden ;)
- Tomáš Votruba
- Moderator | 1114
Řešení pro localhost + vhosts
Nápomocný může být tento článek
1. Do virtual host
$ sudo nano /etc/vhosts
přidáme
127.0.0.1 techambition.local
2. Upravíme nginx default
$ sudo nano /etc/nginx/sites-available/default
Filipem zmíněným nastavením a změníme:
server_name ~(:?(?<second>.+)\.)?(?<domain>[^\.]*)\.(?<tld>[^\.]*)$;
set $try_dir $domain;
if (-d /var/www/hosts/$second.$domain) {
set $try_dir $second.$domain;
}
root /var/www/hosts/$try_dir/www;
a je to.
# subdoména
www.techambition.local -> /var/www/hosts/www.techambition/www/
# když neexistuje tak bez subdomény
www.techambition.local -> /var/www/hosts/techambition/www/
# toto se chová předvídatelně
techambition.local -> /var/www/hosts/techambition/www/
Při přidání dalších lokálních domén stačí pouze přidat
řádek do /etc/vhosts
.
Editoval Tomáš Votruba (2. 6. 2014 14:58)
- zimmi
- Člen | 94
Ahoj kucí,
už dvě hodiny to zprovozňuju, a stále neúspěšně. Používám konfiguraci
od @Filip Procházka, ale ve Firefoxu pořád dostávám Chyba
spojení.
Nemáte někdo nějaký nápad, jak to debugovat? Logy mám prázdné i při
nastavení na úroveň debug
(jako by ten request prostě nedoběhl
ani k nginxu).
v etc/hosts
mám nastavenou smyčku na localhost, nginx nepadá
na konfiguraci ani php5-fpm nehlásí žádnou chybu. Jakýkoliv
nápad vítán.
- Jan Tvrdík
- Nette guru | 2595
Jsi si jist, že nginx vůbec běží? Jinak zkus Start menu → zobrazit protokoly událostí
- zimmi
- Člen | 94
@JanTvrdík linux, běží
@norbe mám ho puštěný na 8000, testování i s 80, pořád
to samé.
Nicméně pomohl reinstal, už jsem aspoň na 502 bad gateway.
Dostal jsem se ke 404 s Filipovým nastavením, nicméně dál už nevím kudy. Struktura projektu je výchozí dle sandboxu.
Přikládám debugovací log:
2014/08/11 13:23:50 [debug] 15062#0: *1 http process request header line
2014/08/11 13:23:50 [debug] 15062#0: *1 http regex set $domain to "app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http regex set $second to ""
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "Host: app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 FirePHP/0.7.4"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "Accept-Language: cs,en-us;q=0.7,en;q=0.3"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "Accept-Encoding: gzip, deflate"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "DNT: 1"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "Cookie: PHPSESSID=fg1s1l4n20f6ob9pt69rss1tb5; nette-browser=wwycvb7crx"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "X-FireLogger: 1.3"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "x-insight: activate"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "Connection: keep-alive"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header: "Cache-Control: max-age=0"
2014/08/11 13:23:50 [debug] 15062#0: *1 http header done
2014/08/11 13:23:50 [debug] 15062#0: *1 event timer del: 12: 1407756290419
2014/08/11 13:23:50 [debug] 15062#0: *1 generic phase: 0
2014/08/11 13:23:50 [debug] 15062#0: *1 rewrite phase: 1
2014/08/11 13:23:50 [debug] 15062#0: *1 http script complex value
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script set $try_dir
2014/08/11 13:23:50 [debug] 15062#0: *1 http script complex value
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "/home/michal/www/"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: ""
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "."
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "NUL"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script file op 0000000000000002 "/home/michal/www/.app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script file op false
2014/08/11 13:23:50 [debug] 15062#0: *1 http script if
2014/08/11 13:23:50 [debug] 15062#0: *1 http script if: false
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: "/"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: "robots.txt"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: "favicon.ico"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: ~ "[^/]\.php(/|$)"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: ~ "/\.(ht|gitignore)"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: ~ "\.(neon|ini|log|yml)$"
2014/08/11 13:23:50 [debug] 15062#0: *1 using configuration "/"
2014/08/11 13:23:50 [debug] 15062#0: *1 http cl:-1 max:1048576
2014/08/11 13:23:50 [debug] 15062#0: *1 rewrite phase: 3
2014/08/11 13:23:50 [debug] 15062#0: *1 post rewrite phase: 4
2014/08/11 13:23:50 [debug] 15062#0: *1 generic phase: 5
2014/08/11 13:23:50 [debug] 15062#0: *1 generic phase: 6
2014/08/11 13:23:50 [debug] 15062#0: *1 generic phase: 7
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 8
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 9
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 10
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 11
2014/08/11 13:23:50 [debug] 15062#0: *1 post access phase: 12
2014/08/11 13:23:50 [debug] 15062#0: *1 try files phase: 13
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "/home/michal/www/"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "/front/homepage/default"
2014/08/11 13:23:50 [debug] 15062#0: *1 trying to use file: "/front/homepage/default" "/home/michal/www/app.local/front/homepage/default"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "/front/homepage/default"
2014/08/11 13:23:50 [debug] 15062#0: *1 trying to use dir: "/front/homepage/default" "/home/michal/www/app.local/front/homepage/default"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "/index.php?"
2014/08/11 13:23:50 [debug] 15062#0: *1 trying to use file: "/index.php?" "/home/michal/www/app.local/index.php?"
2014/08/11 13:23:50 [debug] 15062#0: *1 internal redirect: "/index.php?"
2014/08/11 13:23:50 [debug] 15062#0: *1 rewrite phase: 1
2014/08/11 13:23:50 [debug] 15062#0: *1 http script complex value
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script set $try_dir
2014/08/11 13:23:50 [debug] 15062#0: *1 http script complex value
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "/home/michal/www/"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: ""
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "."
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "NUL"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script file op 0000000000000002 "/home/michal/www/.app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script file op false
2014/08/11 13:23:50 [debug] 15062#0: *1 http script if
2014/08/11 13:23:50 [debug] 15062#0: *1 http script if: false
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: "/"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: "robots.txt"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: "favicon.ico"
2014/08/11 13:23:50 [debug] 15062#0: *1 test location: ~ "[^/]\.php(/|$)"
2014/08/11 13:23:50 [debug] 15062#0: *1 using configuration "[^/]\.php(/|$)"
2014/08/11 13:23:50 [debug] 15062#0: *1 http cl:-1 max:1048576
2014/08/11 13:23:50 [debug] 15062#0: *1 rewrite phase: 3
2014/08/11 13:23:50 [debug] 15062#0: *1 post rewrite phase: 4
2014/08/11 13:23:50 [debug] 15062#0: *1 generic phase: 5
2014/08/11 13:23:50 [debug] 15062#0: *1 generic phase: 6
2014/08/11 13:23:50 [debug] 15062#0: *1 generic phase: 7
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 8
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 9
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 10
2014/08/11 13:23:50 [debug] 15062#0: *1 access phase: 11
2014/08/11 13:23:50 [debug] 15062#0: *1 post access phase: 12
2014/08/11 13:23:50 [debug] 15062#0: *1 try files phase: 13
2014/08/11 13:23:50 [debug] 15062#0: *1 http script copy: "/home/michal/www/"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "app.local"
2014/08/11 13:23:50 [debug] 15062#0: *1 http script var: "/index.php"
2014/08/11 13:23:50 [debug] 15062#0: *1 trying to use file: "/index.php" "/home/michal/www/app.local/index.php"
2014/08/11 13:23:50 [debug] 15062#0: *1 trying to use file: "=404" "/home/michal/www/app.local=404"
2014/08/11 13:23:50 [debug] 15062#0: *1 http finalize request: 404, "/index.php?" a:1, c:2
2014/08/11 13:23:50 [debug] 15062#0: *1 http special response: 404, "/index.php?"
2014/08/11 13:23:50 [debug] 15062#0: *1 http set discard body
2014/08/11 13:23:50 [debug] 15062#0: *1 xslt filter header
2014/08/11 13:23:50 [debug] 15062#0: *1 HTTP/1.1 404 Not Found
Server: nginx/1.6.0
Date: Mon, 11 Aug 2014 11:23:50 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
Tak po přistoupení k doméně s www na začátku mi nginx vypsal, že
nemá permissiony do temp
a log
, jejichž nastavení
nakonec celý problém vyřešilo.
Editoval zimmi (11. 8. 2014 14:08)