NGINX: Unterverzeichnisse zum Laufen bringen

NGINX: Unterverzeichnisse zum Laufen bringen

Ich bin vor Kurzem von Apache 2.4 auf NGINX 1.7.12 umgestiegen und schätze dessen Geschwindigkeit und Vielseitigkeit. Leider ist es mir immer noch nicht gelungen, den SERVER-Block richtig zum Laufen zu bringen.

Ich verwende FASTCGI php5-fpm, um PHP bereitzustellen. Die Wurzel meines NGINX ist /var/www. Die Hauptwebsite namens MC befindet sich unter www.example.com und wird von /var/www/mc bereitgestellt.

Gleichzeitig habe ich ein WordPress-Blog namens „masmagazine“ als Unterverzeichnis der Hauptseite www.example.com/masmagazine, das von /var/www/masmagazine aus bedient wird.

Ich habe es geschafft, beide Websites (die Hauptseite und das Blog) über zwei verschiedene Serverblockdateien zum Laufen zu bringen. Allerdings gelingt es mir nicht, sie so zu kombinieren, dass beide Websites gleichzeitig funktionieren:

Funktionierender Serverblock für www.example.com:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com;
root /var/www/mc;
index index.php index.html index.htm;
location / {
    try_files $uri $uri/ /index.php;
}   
location /includes {
    rewrite ^/includes/css/coupon-unit.css /includes/css/coupon-unit.php;
    rewrite ^/includes/css/mobile-menu.css /includes/css/mobile-menu.php;
    rewrite ^/includes/css/mobile.css /includes/css/mobile.php;
    rewrite ^/includes/css/style.css /includes/css/style.php;
    rewrite ^/includes/css/users.css /includes/css/users.php;
}           
location /feed {
    rewrite ^/feed/ /feed.php break;
}
location /internationalsitemap {
    rewrite ^/internationalsitemap.xml /internationalsitemap.php;
}
location /page {
    rewrite ^/page-sitemap.xml /sitemap.php?site=page;
    rewrite ^/page-child-sitemap.xml /sitemap.php?site=childstore;
}
location /newstores {
    rewrite ^/newstores-sitemap.xml /sitemap.php?site=store;
}
location /coupon_category {
    rewrite ^/coupon_category-sitemap.xml /sitemap.php?site=category;
}
location ~ \.php$ {
    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;
}
}

Funktionierender Serverblock für www.example.com/masmagazine":

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com;
index index.php index.html index.htm;
root /var/www;

location / {
    try_files $uri $uri/ /index.php;
}

location /masmagazine {
    alias /var/www/masmagazine;
    try_files $uri $uri/ /masmagazine/index.php?$args;
}   

location ~ \.php$ {
    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;
}

}

Wenn ich die beiden kombiniere, erhalte ich für masmagazine den Fehler 404 „Nicht gefunden“, wahrscheinlich weil ich die Situation mit dem Unterverzeichnis (von masmagazine) im PHP-Standortblock usw. nicht richtig handhabe.

Ich wäre für jede Hilfe sehr dankbar! Ich komme da wirklich nicht weiter.

In Apache hat Folgendes funktioniert:

<VirtualHost *:80>
ServerName http://www.example.com
DocumentRoot /var/www/mc
<Directory /var/www/mc/>
    Options FollowSymLinks
    AllowOverride All
    DirectoryIndex index.php index.html
    Require all granted
</Directory>

Alias /masmagazine /var/www/masmagazine

<Directory  /var/www/masmagazine/>

        Options FollowSymLinks

        AllowOverride All

        DirectoryIndex index.php index.html

        Require all granted

</Directory>

</VirtualHost>

Aktualisieren:

Gemäß Teros Vorschlag habe ich diesen geänderten Serverblock verwendet:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com;
root /var/www/mc;
index index.php index.html index.htm;

location / {
    try_files $uri $uri/ /index.php;
}   

location /masmagazine {
    alias /var/www/masmagazine;
    try_files $uri $uri/ /index.php?$args;
}

location /includes {
    rewrite ^/includes/css/coupon-unit.css /includes/css/coupon-unit.php;
    rewrite ^/includes/css/mobile-menu.css /includes/css/mobile-menu.php;
    rewrite ^/includes/css/mobile.css /includes/css/mobile.php;
    rewrite ^/includes/css/style.css /includes/css/style.php;
    rewrite ^/includes/css/users.css /includes/css/users.php;
}   

location /feed {
    rewrite ^/feed/ /feed.php break;
}

location /internationalsitemap {
    rewrite ^/internationalsitemap.xml /internationalsitemap.php;
}

location /page {
    rewrite ^/page-sitemap.xml /sitemap.php?site=page;
    rewrite ^/page-child-sitemap.xml /sitemap.php?site=childstore;
}

location /newstores {
    rewrite ^/newstores-sitemap.xml /sitemap.php?site=store;
}

location /coupon_category {
    rewrite ^/coupon_category-sitemap.xml /sitemap.php?site=category;
}

location ~ \.php$ {
    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;
}

}

Das Ergebnis ist ein 404-Fehler bei der Abfrage von www.example.com/masmagazine. Das Protokoll zeigt, dass der PHP-Prozessor versucht, die index.php von masmagazine (gemäß der Index-Direktive) von var/www/mc/masmagazine/index.php aus zu verarbeiten, obwohl er in var/www/masmagazine/index.php danach suchen sollte.

Die relevanten Teile des Protokolls sind:

2015/05/22 12:00:54 [debug] 2108#0: *1 http request line: "GET /masmagazine/ HTTP/1.1"
2015/05/22 12:00:54 [debug] 2108#0: *1 http uri: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 http args: ""
2015/05/22 12:00:54 [debug] 2108#0: *1 http exten: ""
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "/"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "internationalsitemap"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "newstores"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "masmagazine"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: ~ "\.php$"
2015/05/22 12:00:54 [debug] 2108#0: *1 using configuration "/masmagazine"
2015/05/22 12:00:54 [debug] 2108#0: *1 http cl:-1 max:1048576
2015/05/22 12:00:54 [debug] 2108#0: *1 rewrite phase: 3
2015/05/22 12:00:54 [debug] 2108#0: *1 post rewrite phase: 4
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 5
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 6
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 7
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 8
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 9
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 10
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 11
2015/05/22 12:00:54 [debug] 2108#0: *1 post access phase: 12
2015/05/22 12:00:54 [debug] 2108#0: *1 try files phase: 13
2015/05/22 12:00:54 [debug] 2108#0: *1 http script var: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use file: "/" "/var/www/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 http script var: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use dir: "/" "/var/www/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 try file uri: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 content phase: 14
2015/05/22 12:00:54 [debug] 2108#0: *1 content phase: 15
2015/05/22 12:00:54 [debug] 2108#0: *1 open index "/var/www/masmagazine/index.php"
2015/05/22 12:00:54 [debug] 2108#0: *1 internal redirect: "/masmagazine/index.php?"
2015/05/22 12:00:54 [debug] 2108#0: *1 rewrite phase: 1
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "/"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "internationalsitemap"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "newstores"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "masmagazine"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: ~ "\.php$"
2015/05/22 12:00:54 [debug] 2108#0: *1 using configuration "\.php$"
2015/05/22 12:00:54 [debug] 2108#0: *1 http cl:-1 max:1048576
2015/05/22 12:00:54 [debug] 2108#0: *1 rewrite phase: 3
2015/05/22 12:00:54 [debug] 2108#0: *1 post rewrite phase: 4
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 5
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 6
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 7
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 8
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 9
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 10
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 11
2015/05/22 12:00:54 [debug] 2108#0: *1 post access phase: 12
2015/05/22 12:00:54 [debug] 2108#0: *1 try files phase: 13
2015/05/22 12:00:54 [debug] 2108#0: *1 http script var: "/masmagazine/index.php"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use file: "/masmagazine/index.php" "/var/www/mc/masmagazine/index.php"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use file: "=404" "/var/www/mc=404"2015/05/22 12:00:54 [debug] 2108#0: *1 http finalize request: 404, "/masmagazine/index.php?" a:1, c:2
2015/05/22 12:00:54 [debug] 2108#0: *1 http special response: 404, "/masmagazine/index.php?"
2015/05/22 12:00:54 [debug] 2108#0: *1 http set discard body
2015/05/22 12:00:54 [debug] 2108#0: *1 xslt filter header
2015/05/22 12:00:54 [debug] 2108#0: *1 HTTP/1.1 404 Not Found

Antwort1

Fügen Sie diesen Block zu Ihrem ersten serverBlock hinzu:

location /masmagazine {
    alias /var/www/masmagazine;
    try_files $uri $uri/ /index.php?$args;
}

Der try_filesStandortblock arbeitet relativ zum locationBlockstammverzeichnis, das hier mithilfe der aliasAnweisung definiert wird.

verwandte Informationen