2014-09-11 8 views
1

Есть некоторые вопросы о виртуальных хостах nginx и настройке субдомена, , но этого достичь не удается.<Nginx> Как настроить несколько динамических виртуальных хостов + www + поддомен

I домен хава 3 и IP-адрес (Multi-Site)

www.a1.com 
www.a2.com 
www.a3.com 

Я хочу использовать простую конфигурацию Nginx, чтобы настроить его, и когда я вхожу

URL переписывает

a1.com  => force redirect non-www to WWW url www.a1.com 

www.a1.com  => pass to /usr/share/nginx/html/a1.com/ 
www.blog.a1.com => pass to /usr/share/nginx/html/a1.com/blog/ 
*www.photo*.a1.com=> pass to /usr/share/nginx/html/a1.com/*photo*/ 
...and so on 

a2.com  => force redirect non-www to WWW url www.a2.com 

www.a2.com  => pass to /usr/share/nginx/html/a2.com/ 
www.blog.a2.com => pass to /usr/share/nginx/html/a2.com/blog/ 
www.photo.a2.com=> pass to /usr/share/nginx/html/a2.com/photo/ 
www.user.a2.com=> pass to /usr/share/nginx/html/a2.com/user/ 
...and so on 

a1, a2 и a3.com используют ту же конфигурацию.

Это мой первый код, как я могу его исправить?

псевдокод

if subdomain lacks 'www' then pass to $scheme://www.$host$request_uri; 
if subdmain <>'' then pass to /usr/share/nginx/html/$host/<#subdmain#>/$request_uri; 

/etc/nginx/conf.d/default.conf

server { 
    # Redirect non-www to WWW 
    server_name "~^(?!www\.).*" ; 
    return 301 $scheme://www.$host$request_uri; 
} 

server { 

    listen 80 default; 

    #automatic judging hostname 
    server_name ~^(www\.)?(?<domain>.+)$; 

    location/{ 

     #automatic change folder 
     root /usr/share/nginx/html/$domain/; 

     index index.html index.php; 
     #try_files $uri $uri/ /index.php?$query_string; 
    } 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 

    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 

     # judging subdomain which have "www" 
     if ($subdomain = 'www') { 
      fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$domain$fastcgi_script_name; 
     } 
     # judging subdomain like "blog" and trans to blog folder 
     else { 
      fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$domain/$subdomain/$fastcgi_script_name; 
     } 
     include fastcgi_params; 
    } 
} 

ответ

0

Dont overcomplexify Nginx конфиги :) Я полагаю, вы можете cr eate 3 server {}. 1-й, как у вас сейчас. Второй для www.domain.com, и третий для www.subdomain.domain.com

Для определения 2-го сервера вам необходимо регулярное выражение:

server_name ~^(www\.)(?P<domain>.+)\.com$; 
root /usr/share/nginx/html/$domain.com/www; 

Для 3-го определения сервера вам необходимо регулярное выражение:

server_name ~^(www\.)(?P<subdomain>.+)\.(?P<domain>.+)\.com$; 
root /usr/share/nginx/html/$domain.com/$subdomain; 

Вы можете улучшить эти правила после некоторых игр с регулярными выражениями и обрабатывать не только COM-адреса :)

Смежные вопросы