2016-07-27 14 views
1

Ich bin neu in Nginx und kann nicht meine Website zu arbeiten (eine CakePHP-Website auf AWS). Ich erhalte die Meldung "Die Seite leitet nicht richtig um" und etwas, wie etwas die Domäne an sich anhängt (eine Umleitungsschleife);Nginx CakePHP virtuellen Host Weiterleitungen

Beispiel, wenn ich meine Website eingeben sub1.mysite.com der Browser fügt sub1.mysite.com/sub1.mysite.com/sub1.mysite.com/sub1.mysite.com und so weiter.

Hier ist meine sites-available Config

server { 
    listen 80; 
    server_name sub1.mysite.com; 
    rewrite ^(.*) http://sub1.mysite.com$1 permanent; 
} 

server { 
    listen 80; ## listen for ipv4; this line is default and implied 
    server_name name sub1.mysite.com; 
    root /var/www/sub1.mysite.com/public_html/sub-root; 
    index index.php index.html index.htm; 

    # error_page 404 errors/404.html; 
    access_log /var/log/nginx/sub1.mysite.com.access.log; 

    # Make site accessible from http://localhost/ 
    location/{ 
     try_files $uri $uri/ /index.php?$uri&$args; 
    } 
    location ~ .php$ { 
     root /var/www/sub1.mysite.com/public_html/sub-root; 
     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; 
    } 
} 

Jede Idee, was ich falsch mache?

Antwort

0

Ihr Problem ist mit dem ersten nginx-Server-Richtlinie:

server { 
    listen 80; 
    server_name sub1.mysite.com; 
    rewrite ^(.*) http://sub1.mysite.com$1 permanent; 
} 

Ihre Direktive wird auf Port lauscht 80 (http) und reagiert auf sub1.mysite.com dann passt es alles ^(.*) und Umleitungen an http://sub1.mysite.com$1 permanent wo die $1 das Ergebnis von Ihrem Matching so im Grunde, fügt es sub1.mysite.com an. Ich sehe keinen Grund, warum Sie diese Server-Richtlinie benötigen. Es hört auf den gleichen Port wie die Direktive Ihres Hauptservers und antwortet auf dasselbe. server_name Löschen Sie es einfach. Das Ergebnis sollte sein (man beachte ich einige Einstellungen festgelegt, um weitere Informationen zu den Noten sehen):

server { 
    listen 80; ## listen for ipv4; this line is default and implied 
    server_name sub1.mysite.com; # removed the redundant 'name' keyword that you used here 
    root /var/www/sub1.mysite.com/public_html/sub-root; 

    index index.php index.html index.htm; 

    charset utf-8; # added this, you don't have to. 

    # error_page 404 errors/404.html; 
    access_log /var/log/nginx/sub1.mysite.com.access.log; 

    # edited this. Given the request to `sub1.mysite.com` it will 
    # try to first match the file itself, than an index file in the root 
    # directory and then it will just send the request to index.php with the query string 
    # which means the request to sub1.mysite.com/dashboard will be forwarded 
    # to sub1.mysite.com/index.php/dashboard 
    location/{ 
     try_files $uri $uri/ /index.php?$query_string; 
    } 

    # added both of these lines, you don't have to. they are just good practice. 
    # If you don't add them your log files will get bloated real fast. 
    # these files are requested by crawlers. 
    location = /favicon.ico { access_log off; log_not_found off; } 
    location = /robots.txt { access_log off; log_not_found off; } 

    location ~ \.php$ { # added a '\' 
     # removed redundant 2 lines here 
     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; 
    } 
} 

Wenn Sie ein anderes Mittel in Ihrem Kopf für die erste Server-Richtlinie hat, lassen Sie es mich wissen.

+0

Wo warst du vor 2 Tagen ... nur Spaß :-). Ernsthaft, vielen Dank. Es funktioniert!! Obwohl, das einzige Problem, das ich jetzt habe, ist 'index.php'.Wenn ich auf eine der 'hübschen URLs' auf der Nav klicken, funktioniert es; ex: wenn ich auf" dashboard "klicke, was' sub1.mysite ist. com \ dashboard', es geht gut voran. Wenn ich direkt zum Index gehe, funktioniert es gut "sub1.mysite.com/index.php". Aber wenn auf die Seite gehen & nicht Index-Datei (sub1.mysite.com) angeben, bekomme ich Fehler ** "Fehlender Controller Fehler: Sub1.mysite.comController konnte nicht gefunden werden." **. Sieht so aus, als ob er den Domänennamen an den Controller von Cake weitergibt. Eine Idee? – user20719

+0

@ user20719 Überprüfen Sie meine bearbeitete Antwort. Der Fehler, den Sie bekommen, ist CakePHP Fehler? Ich habe CakePHP noch nie benutzt. Wenn es sich um einen CakePHP-Fehler handelt, bedeutet dies, dass Ihre nginx-Konfigurationen wahrscheinlich in Ordnung sind, aber ein Problem mit der Routenerklärung besteht. Schau dir deinen Router an – kfirba