Konfigurace nginx - volitelné subdomény rubrika: Administrace: Hardware
Zdravím, mám následující konfiguraci nginxe
server { listen 80; server_name ~^(.*?\.)?(?<domain>[^.]+\.[^.]+)$; index index.php index.html; root /var/www/hosts/$domain; try_files $uri $uri/ /index.php; location ~ \.php$ { # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Správně, automatické domény, stačí vytvořit složku /var/www/hosts/example.com/ a všechny example.com i *.example.com se na ní budou směřovat. Tohle funguje bezvadně.
Teď ale potřebuji, aby když existuje složka /var/www/hosts/abc.example.com/, aby doména abc.example.com směřovala na ni, ale všechno ostatní na /var/www/hosts/example.com/.
Skončil jsem u tohohle, chová se předvídatelně a statické soubory servíruje správně, až na to, že nejedou PHP scripty.
server { listen 80; server_name ~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$; index index.php index.html; location / { root /var/www/hosts/$second.$domain; try_files $uri $uri/ /index.php @fallback; } location @fallback { root /var/www/hosts/$domain; try_files $uri $uri/ /index.php; } location ~ \.php$ { # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
access.log na požadavky example.com, www.example.com, abc.example.com
127.0.0.1 - - [11/May/2012:12:34:48 +0200] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11" 127.0.0.1 - - [11/May/2012:12:34:49 +0200] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11" 127.0.0.1 - - [11/May/2012:12:34:51 +0200] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11"
v pohodě vrátí statické soubory, error.log prázdný. Vyměním index.html za index.php a pošlu požadavek
127.0.0.1 - - [11/May/2012:12:35:54 +0200] "GET / HTTP/1.1" 404 27 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11" 127.0.0.1 - - [11/May/2012:12:35:55 +0200] "GET / HTTP/1.1" 404 27 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11"
Když si zapnu debug logování, tak mě zaujmou tyhle řádky
2012/05/11 13:18:42 [debug] 29519#0: *60 http script copy: "SCRIPT_FILENAME" 2012/05/11 13:18:42 [debug] 29519#0: *60 http script var: "/usr/local/nginx/html" 2012/05/11 13:18:42 [debug] 29519#0: *60 http script var: "/index.php" 2012/05/11 13:18:42 [debug] 29519#0: *60 fastcgi param: "SCRIPT_FILENAME: /usr/local/nginx/html/index.php" 2012/05/11 13:18:42 [debug] 29519#0: *60 fastcgi param: "HTTP_USER_AGENT: curl/7.21.3 (x86_64-pc-linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18" 2012/05/11 13:18:42 [debug] 29519#0: *60 fastcgi param: "HTTP_HOST: xxxxx.example.com"
Díky za jakékoliv postrčení.
Já si teda odpovím sám :)
server { listen 80; server_name ~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$; index index.php index.html; location / { set $try_dir $domain; if (-d /var/www/hosts/$second.$domain) { set $try_dir $second.$domain; } root /var/www/hosts/$try_dir; try_files $uri $uri/ /index.php; } keepalive_timeout 0; send_timeout 9999999; fastcgi_read_timeout 999999; client_max_body_size 200M; location ~ \.php$ { # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 set $try_dir $domain; if (-d /var/www/hosts/$second.$domain) { set $try_dir $second.$domain; } root /var/www/hosts/$try_dir; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.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 $uri/ =404; } #location ~ \.(js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ { } location ~ /\.ht { # deny access to .htaccess files, if Apache's document root concurs with nginx's one deny all; } location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } }
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře