2016-04-24 16 views
0

Ich richte einige PHP-Subdomains, und ich habe es schwer, Nginx zu tun, was ich will. Ich versuche, jede Subdomain an einen anderen Teil der Anwendung zu senden. Hier ist, was meine Datei namens id.conf aussieht (es ist im sites-enabled Verzeichnis):Mapping Subdomains in Nginx funktioniert nicht

map $http_host $app { 
    'api.id.dev'  'api/public'; 
    'www.id.dev'  'www/public'; 
} 

server { 
    set $base /Users/dev/www/id/apps; 
    server_name ~^(?<subdomain>.+)\.id\.dev$; 
    index index.html index.htm index.php; 
    root $base/$app; 
    charset utf-8; 
    location/{ 
     try_files $uri $uri/ /index.php?$query_string; 
    } 
    access_log off; 
    client_max_body_size 100m; 
    location ~ \.php$ { 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param APP_ENV local; 
    } 
} 

server { 
    server_name id.dev; 
    rewrite^http://www.id.dev$request_uri permanent; 
} 

Ich habe die richtige Zuordnung für diese Subdomains in meinen /etc/hosts, und ich sehe diesen Fehler in dem nginx Fehlerprotokoll:

2016/04/24 00:26:32 [error] 5691#0: *5 directory index of "/Users/dev/www/id/apps//" is forbidden, client: 127.0.0.1, server: ~^(?<subdomain>.+)\.id\.dev$, request: "GET/HTTP/1.1", host: "api.id.dev" 

Das zeigt, dass der Host dort ist, und es liest die Conf-Datei, aber es scheint nicht zu dem HTTP-Host mit dem richtigen Verzeichnis übereinstimmen. (Auch die Verzeichnisse für diese Subdomains haben eine index.php Datei)

Was ist das Problem hier? Ich habe eine andere Konfigurationsdatei, die das gleiche tut, und es funktioniert. In der Tat kann ich eine separate Registerkarte laden und diese anderen Websites laden, aber es scheint nicht für dieses Projekt zu arbeiten (und ich habe die Dateipfade schon oft verifiziert)

+0

Bin ich es, oder fehlt Ihnen der Basisfall, in dem es keine Subdomäne gibt; z.B. wird "http: // id.dev" angefordert. –

+0

@BurhanKhalid Das sollte durch das Neuschreiben am Ende behandelt werden. Ich habe es gerade getestet, und es wird entsprechend umgeleitet, aber es wird immer noch nicht korrekt zugeordnet, so dass es auch versucht, auf ein ungültiges Verzeichnis zuzugreifen = – charmeleon

Antwort

0

Ich arbeitete es aus. Es stellte sich heraus, dass die Variable $app einen Konflikt mit der anderen Datei hatte, die denselben Variablennamen für die map-Direktive verwendete. Ich benannte die Variable $name in id.conf, zuerst in der Karte:

map $http_host $name { 
    'api.id.dev'  'api/public'; 
    'www.id.dev'  'www/public'; 
} 

dann änderte ich root $base/$app;-root $base/$name;, neu geladen nginx mit sudo nginx -s reload im Terminal, und jetzt funktioniert es perfekt.

0

Ich denke, Ihre Übereinstimmung funktioniert nicht richtig, versuchen Sie dies:

set $domain $host; 

if ($domain ~ "^(.[^.]*)\.dev$") { 
    set $domain $1; 
    set $servername "${domain}.dev"; 
} 

if ($domain ~ "^(.*)\.(.[^.]*)\.dev$") { 
    set $subdomain $1; 
    set $domain $2; 
    set $servername "${subdomain}.${domain}.dev"; 
} 
Verwandte Themen