2017-11-09 6 views
1

nginx Version scheint: nginx/1.10.3 (Ubuntu) gebaut mit OpenSSL 1.0.2g 1. März 2016 TLS SNI Unterstützung über installierte aktiviert apt-get html5 mit boilerplate config project als BasisNginx root Richtlinie innerhalb Standort nicht zu funktionieren

Ich habe versucht, eine einfache Aufgabe zu tun, und es funktioniert nicht so, wie ich dachte, es würde. Ich habe eine Verzeichnisstruktur wie folgt:

/var/www$ tree 
. 
├── docroot 
│   └── files 
│    ├── booger.txt 
│    └── favicon.ico 
└── static 
    ├── h5bp 
    │   ├── humans.txt 
    │   ├── js 
    │   │   ├── main.js 
    │   │   ├── plugins.js 
    │   │   └── vendor 
    │   │    ├── jquery-1.12.0.min.js 
    │   │    └── modernizr-2.8.3.min.js 
    │   ├── tile.png 
    │   └── tile-wide.png 

Ich dachte, der beste Ansatz einen Server Wurzel der docroot/Dateien (die reale docroot) und dann neu definiert die Wurzel für die statischen Dateien haben war. Hier ist meine Standardkonfiguration in/etc/nginx/sites-available:

# Choose between www and non-www, listen on the *wrong* one and redirect to 
# the right one -- http://wiki.nginx.org/Pitfalls#Server_Name 
# 
server { 
    listen [::]:80 default_server; 
    listen 80 default_server; 

    # listen on all hosts 
    server_name _; 

    # and redirect to the https host (declared below) 
    # avoiding http://www -> https://www -> https:// chain. 
    return 301 https://www.ubercode.io$request_uri; 
} 

server { 

    # listen [::]:443 ssl http2 accept_filter=dataready; # for FreeBSD 
    # listen 443 ssl http2 accept_filter=dataready; # for FreeBSD 
    listen [::]:443 ssl http2 deferred default_server; # for Linux 
    listen 443 ssl http2 deferred default_server; # for Linux 
    # listen [::]:443 ssl http2; 
    # listen 443 ssl http2; 

    # The host name to respond to 
    server_name www.ubercode.io; 

    include h5bp/directive-only/ssl.conf; 

# root /var/www/docroot/files; 
    root /var/www; 
    index index.html index.htm index.nginx-debian.html; 

    # return forbidden for any php, asp, jsp, our .dt templates, or myadmin requests 
# location ~ (\.dt$|myadmin|\.php$|\.jsp$|\.asmx$|\.asp$) { 
#  deny all; 
# } 

# location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { 
#  expires 1d; 
# } 
# location ~* \.(pdf)$ { 
#  expires 5d; 
# } 

    # static 
    location /static/ { 
# root /var/www; 
    autoindex on; 
#  expires 1d; 
    } 

    location/{ 
    alias /var/www/docroot/files; 
    autoindex on; 
    } 
    #Specify a charset 
    charset utf-8; 

    # Custom 404 page 
    error_page 404 /404.html; 

    # Include the basic h5bp config set 
    include h5bp/basic.conf; 
} 

server { 
    listen [::]:443 ssl http2; 
    listen 443 ssl http2; 

    # listen on the wrong host 
    server_name _; 

    include h5bp/directive-only/ssl.conf; 

    # and redirect to the non-www host (declared below) 
    return 301 https://www.ubercode.io$request_uri; 
} 

Wenn ich es verwenden, wie es gezeigt wird, wird die statischen Dateien arbeiten, aber die Alias ​​an der Wurzel scheint nicht zu funktionieren, wie sie einen Wurf 404. Wenn ich den Alias ​​unter dem Pfad/location und dem Wurzelstamm des/var/www-Servers kommentiere und die anderen Zeilen auskommentiere, gibt der Server docroot/files-Assets, aber keine statischen Dateien zurück. Es scheint nur so, als ob die übergeordnete Wurzel in einem Standortblock nicht funktioniert. Kann mir jemand erklären, was los ist und mir vielleicht eine Anleitung geben, wie ich es beheben kann?

+0

So scheint es, dass das, was ich oben gesagt habe, nicht genau wahr ist. Aus irgendeinem Grund, wenn ich die URL für booger.txt in meinem Browser setze, bekomme ich Ergebnisse, aber favicon.ico nicht. Ich habe auch mit einer JPEG- und HTML-Datei getestet, aber keine Freude. Aber aus irgendeinem Grund funktioniert die Datei booger.txt. Irgendwelche Ideen? –

Antwort

1

Wenn ich es verwenden, wie es gezeigt wird, werden die statischen Dateien arbeiten, aber der Alias ​​an die Wurzel scheint nicht, als sie ein 404.

Sie sollten nicht verwenden, um eine alias Richtlinie werfen zu arbeiten in der location / Aussage. Verwenden Sie stattdessen eine root-Anweisung mit demselben Wert.

Wenn ich kommentieren Sie den Alias ​​unter dem/Standort und das Verzeichnis/var/www Server root dann uncomment die anderen Linien der Server docroot/Dateien Vermögen aber keine statische Dateien zurückgibt.

Wenn Sie die location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ aktivieren, dann wird es die location /static/ Block außer Kraft setzen und für root einen beliebigen Wert einstellen innerhalb des letzteren wird ignoriert. Außerdem überschreibt es den location / Block für URIs, die mit .ico enden, so dass nicht mehr funktioniert, da es aus einem anderen Dokumentstamm stammt.

Siehe how nginx processes a request und beachten Sie, dass Positionen für reguläre Ausdrücke Vorrang vor Präfixpositionen haben.

Wenn Sie den Wert expires feineinstellen müssen, können Sie keine location Blöcke hinzufügen, ohne zu überlegen, auf welches Dokumentstamm sie Einfluss haben.

Siehe this answer für einen alternativen Ansatz, eine map Richtlinie mit dem expires Wert auf dem $request_uri Basis einzustellen.

+0

Vielen Dank für Ihre Antwort Richard. Wenn ich den Alias ​​im Verzeichnis/location in root ändere, bekomme ich immer noch die gleichen Ergebnisse. Es ist fast so, als würde die root-Anweisung in einem Standortblock nicht angewendet. Ihre anderen Kommentare sind mit einer Expiry-Kopfzeile versehen, die auskommentiert ist.Das zeigt oder deutet nichts auf mich an, was mir erlaubt, zwei verschiedene Docroot-Standorte zu hosten. –

+0

Ich gebe Richard Kredit, weil nach ein wenig Forschung seine Antwort wahr ist. Sie sollten root statt alias verwenden, um eine Regex-Suche zu verhindern. Allerdings, wenn jemand später besucht, hat das Problem etwas mit dem html5 boilerplate config-Projekt zu tun. Es ist das Überschreiben von Bildern und solchen, die das Problem verursacht haben. Gehen Sie zurück zu einer Basis, um bestimmte Dinge zu installieren. –