NGinx Standard öffentlicher www-Speicherort?


303

Ich habe bereits mit Apache gearbeitet, daher ist mir bewusst, dass das standardmäßige öffentliche Webstammverzeichnis normalerweise lautet /var/www/.

Ich habe vor kurzem angefangen, mit nginx zu arbeiten, aber ich kann anscheinend nicht das standardmäßige öffentliche Webstammverzeichnis finden.

Wo finde ich das öffentliche Standard-Webstammverzeichnis für Nginx?

Antworten:


166

Wenn Ihre Konfiguration keine root /some/absolute/path;Anweisung enthält oder eine Anweisung, die einen relativen Pfad wie verwendetroot some/relative/path; , hängt der resultierende Pfad von den Optionen zur Kompilierungszeit ab.

Wahrscheinlich der einzige Fall, in dem Sie eine fundierte Vermutung anstellen können, was dies für Sie bedeutet, wenn Sie die Quelle selbst herunterladen und kompilieren würden. In diesem Fall wären die Pfade relativ zu dem, was --prefixverwendet wurde. Wenn Sie es nicht geändert haben, wird standardmäßig verwendet /usr/local/nginx. Sie finden die Parameter, mit denen nginx kompiliert nginx -Vwurde. Es wird --prefixals erstes aufgeführt.

Da die rootRichtlinie standardmäßig verwendet wirdhtml , würde dies natürlich /usr/local/nginx/htmlzur Antwort auf Ihre Frage führen.

Wenn Sie nginx jedoch auf andere Weise installiert haben, sind alle Wetten ungültig. Ihre Distribution verwendet möglicherweise völlig andere Standardpfade. Zu lernen, herauszufinden, welche Art von Standardeinstellungen Ihre Verteilung der Auswahl für Dinge verwendet, ist eine ganz andere Aufgabe.


32
Sie könnten vielleicht einen Hinweis geben, dass Sie "nginx -V" (Großbuchstaben V) verwenden können, um die Konfigurationsargumente zu ermitteln, die zum Kompilieren von nginx verwendet werden.
Kaufholdr

1
@kaufholdr ist korrekt. Sie werden feststellen, dass der erwähnte --prefix @ Gnarfoz ähnlich aussieht wie --prefix = / usr / share / nginx
Dung

6
Dies hängt auch davon ab, in welchem ​​Betriebssystem sich die Installation befindet. Für Amazon Linux lautet das Verzeichnis: / usr / share / nginx / html
jeffmcneill

Der Pfad --prefix ist nicht immer korrekt. Bei meiner Debian 9-Nginx-Installation war der Präfixpfad "/ var / www / html", aber wie sich herausstellte, war der akute Standardpfad "/ usr / share / nginx / html". Bei Betrachtung der Standardkonfigurationsdatei in / etc / nginx / sites-available / default wurde festgestellt, dass der Pfad mit dem Pfad --prefix übereinstimmt. In der Konfigurationsdatei unter /etc/nginx/conf.d/default.conf wurde das Stammverzeichnis jedoch als / usr / share / nginx / html aufgeführt. Die Datei default.conf hat Vorrang vor der normalen Standarddatei. Überprüfen Sie unbedingt beide Konfigurationsdateien, da Sie sonst möglicherweise mit dem falschen Stammverzeichnis arbeiten.
Höhlenmensch

1
nginx -V 2>&1 | grep --color -o -e '--prefix=[^[:space:]]\+'gibt Ihnen das Nginx HOME.
Sjas

436

Wenn Sie Ubptu mit apt-get installieren, versuchen Sie es /usr/share/nginx/www.

BEARBEITEN:

In neueren Versionen wurde der Pfad geändert in: /usr/share/nginx/html

2019 EDIT:

Könnte es auch versuchen /var/www/html/index.nginx-debian.html.


113
Nginx 1.4.1 unter Ubuntu ist in / usr / share / nginx / html
Nick Desaulniers

Ich habe gerade nginx auf Raspberry installiert, das Standardverzeichnis ist das gleiche, das von Lufix +1 geschrieben wurde. Auf Raspbian von apt-get heruntergeladen
Mitro


2
Debian apt-get, check / etc / nginx / available-sites / default , Ich habe den Pfad dort gefunden.
Chris.Zou

7
Ubuntu 16 /var/www/html/index.nginx-debian.html
Don Bright

65

Das Standard-Nginx-Verzeichnis unter Debian ist /var/www/nginx-default.

Sie können die Datei überprüfen: /etc/nginx/sites-enabled/default

und finde

server {
        listen   80 default;
        server_name  localhost;

        access_log  /var/log/nginx/localhost.access.log;

        location / {
                root   /var/www/nginx-default;
                index  index.html index.htm;
        }

Die Wurzel ist der Standardspeicherort.


5
In CentOS habe ich festgestellt, dass es keinen Ordner / etc / nginx / sites-enabled / gibt. Es gibt /etc/nginx/conf.d/ und dort haben zwei Dateien server.conf und virtual.conf diese Serverdetails. Darauf können Sie auch achten.
Nafis Ahmad

1
Um Nafis 'Kommentar zu ergänzen, muss der Dateiname im Verzeichnis conf.d auf .conf enden, sonst werden sie nicht abgeholt.
Ethan Hohensee

1
Dies gilt nur, wenn die Standardwebsite aktiviert ist und der Anforderung entspricht. Andernfalls ist der Standardstamm html.
OrangeDog

@OrangeDog Wie überprüfe ich, ob default sitees aktiviert ist?
Timo

1
@ Timo diese Antwort sagt wie
OrangeDog

43

'Standard Public Web Root' kann aus der Ausgabe von nginx -V gefunden werden:

nginx -V
nginx version: nginx/1.10.1
built with OpenSSL 1.0.2h  3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/var/lib/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/run/nginx/nginx.pid --lock-path=/run/nginx/nginx.lock --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --user=nginx --group=nginx --with-ipv6 --with-file-aio --with-pcre-jit --with-http_dav_module --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_v2_module --with-http_auth_request_module --with-mail --with-mail_ssl_module

Der Wert --prefix ist die Antwort auf die Frage. Für das Beispiel über der Wurzel ist / var / lib / nginx


1
Ja, das Beste und plattformübergreifend.
Jesse Adelman

Dies ist nicht immer richtig. "--Prefix" wird möglicherweise auf einigen Systemen verwendet, jedoch nicht auf allen. Ich bin damit einverstanden, dass nginx -V Ihnen viele Informationen bietet, mit denen Sie nachverfolgen können, wo sich die Dateien befinden. Dies hängt jedoch vom Betriebssystem ab. IE unter FreeBSD ist nicht in "--prefix" enthalten, sondern in "/ usr / local / www", und in einigen Linux-Distributionen kann es auch zu Verzögerungen kommen. Es ist am besten, in die Konfiguration zu schauen.
Mikec

"--prefix" ist die vom GNU-Standard definierte Variable - siehe gnu.org/prep/standards/html_node/Directory-Variables.html .
Serge S

"--prefix" ist die vom GNU-Standard definierte Variable - siehe gnu.org/prep/standards/html_node/Directory-Variables.html . nginx folgt den Standards. Wenn Sie in der Konfigurationsdatei kein Stammverzeichnis oder keinen Speicherort definieren (abhängig von --conf-path), zeigt das Präfix an, wo sich das öffentliche Standard-Webstammverzeichnis befindet. Und das hängt nicht vom Betriebssystem ab, obwohl ein Paket, das mit einer Betriebssystemdistribution geliefert wird, auch eine Konfiguration bereitstellen kann, die wiederum das öffentliche Standard-Webstammverzeichnis neu definiert.
Serge S

Also der Algorithmus: Suche nach --conf-Pfad in der Nginx- V- Ausgabe. Wenn location / oder root in der Konfiguration nicht neu definiert wurde, verwenden Sie --prefix als Standardspeicherort für das öffentliche Webstammverzeichnis .
Serge S

25

Unter Mac OS X wird bei der Installation von Nginx mit Brew das Standardverzeichnis erstellt:

/usr/local/var/www

So:

root html

meint

root /usr/local/var/www/html

Es gibt kein HTML-Verzeichnis, daher müsste es manuell erstellt werden.


1
+1 für die Erwähnung von macOS und Homebrew. Allerdings fand ich , dass , obwohl root html, index.htmlund 50x.htmlwird gesetzt direkt in /usr/local/var/www. Daher bezweifle ich die Existenz eines htmlOrdners. Könnten Sie mir dabei helfen?
iplus26

3
"Brew Info Nginx" Gibt die in der Ausgabe aufgeführte Docroot an. Die Angabe von "root html" in einer Nginx-Konfiguration ändert jedoch die Docroot für diese Nginx-Konfiguration.
Freegnu

1
Für mich (MAC OS X El Capitan 10.11.5) und Brew (1.1.5) war das Verzeichnis, in /usr/local/Cellar/nginx/1.10.2_1/html dem 1.10.2_1 die Nginx-Version ist.
Yogesh Yadav

2
Auf meinem Gebräu installieren Sie das Keller - Verzeichnis ist ein symbolischer Link: /usr/local/Cellar/nginx/1.12.0_1/html -> ../../../var/www/und die nginx -V zeigt: --prefix=/usr/local/Cellar/nginx/1.12.0_1so root htmlist eine über diesen Link umgeleitet.
Mark Edington

@ iplus26 HTML-Verzeichnis bereits verfügbar /usr/local/Cellar/nginx/1.12.2_1/html, ich denke, / usr / local / var / www nur ein Link
Kanagavelu Sugumar

21

Sie können den Stammordner von nginx einfach dem Speicherort Ihrer Website zuordnen:

nano /etc/nginx/sites-enabled/default

Suchen Sie in der Standarddatei nach dem Stammverzeichnis im Server-Tag und ändern Sie den Standardordner Ihrer Website, z. B. befinden sich meine Websites unter / var / www

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www; <-- Here!
...

Als ich nginx, apache2 und lighttpd evaluierte, habe ich sie alle meiner Website unter / var / www zugeordnet . Ich fand dies der beste Weg, um effizient zu bewerten.

Dann können Sie den Server Ihrer Wahl starten / stoppen und sehen, welcher die beste Leistung erbringt.

z.B

service apache2 stop
service nginx start

Übrigens ist Nginx tatsächlich sehr schnell!


19

Wie die meisten Benutzer hier sagten, befindet es sich unter diesem Pfad:

/usr/share/nginx/html

Dies ist der Standardpfad, aber Sie können Ihren auch erstellen.

Sie müssen lediglich eine im Stammbaum des Webservers erstellen und ihm einige Berechtigungen "nicht 0777" und nur für einen Benutzer erteilen, die nur für diesen Benutzer sichtbar sind. Das Ende des Pfads ist jedoch seit dem Ende des Pfads für alle sichtbar ist, was Ihre Dateien und Ordner von der Öffentlichkeit angezeigt werden.

Sie können beispielsweise eine davon erstellen:

home_web/site1/public_html/www/

Wenn Sie in Nginx einen virtuellen Host erstellen, können Sie Ihren eigenen Stammpfad anpassen. Fügen Sie einfach Folgendes in Ihren Serverblock ein:

 server {
    listen  80;
        server_name  yoursite.com;

root /home_web/site1/public_html/www/;
}

Ja, du hast recht. Ich habe gerade Nginx auf meinem centos7 installiert und festgestellt, dass der Standardpfad der /usr/share/nginx/html/Ordner ist. Gibt es einen Grund, diesen Pfad überhaupt zu ändern (aus Sicherheitsgründen oder aus anderen Gründen)? Ist es in Ordnung, es im Standardordner zu belassen, wenn ich der einzige Benutzer sein werde und nur 1 Website darin hosten werde?
Neel

Egal meine letzte Frage. Am Ende habe ich separate Ordner dafür erstellt, da ich dachte, dass dies auf diese Weise besser ist, nur für den Fall, dass ich diesem Setup in Zukunft verschiedene vhosts hinzufügen möchte. Auf diese Weise ist es einfacher. Prost :)
Neel

11

Der Standard-Webordner für nginx hängt davon ab, wie Sie ihn installiert haben. Normalerweise befindet er sich jedoch an folgenden Speicherorten:

/usr/local/nginx/html
/usr/nginx/html

10

Für Ubuntu- und Docker-Images:

 /usr/share/nginx/html/

Nur neugierig, sagen wir, ich wusste das nicht, wie würde ich den richtigen Ort finden? Darauf gibt es viele verschiedene Antworten
Royi Namir

Soweit ich mich erinnere, habe ich nach "nginx" gesucht (so etwas wie find / -name nginx) und in diesem Verzeichnis (oder in seinem Unterverzeichnis) das Dokument gefunden, das in meinem Browser angezeigt wurde.
DimiDak

9

Führen Sie den Befehl aus nginx -V und suchen Sie nach dem --prefix. Verwenden Sie diesen Eintrag, um Ihre Standardpfade zu suchen.


9

Speichern Sie die Konfiguration:

$ nginx -T
...
server {
    ...
    location / {
        root   /usr/share/nginx/html;
        ...
    }
    ...
}

Was Sie erhalten, kann anders sein, da es davon abhängt, wie Sie nginxkonfiguriert / installiert wurden.

Verweise:

Update: Es gibt einige Verwirrung in Bezug auf die Frage, ob / wann die -TOption hinzugefügt wurde nginx. Es wurde in der Manpage von vl-homutov am 16. Juni 2015 dokumentiert , die Teil der Version 1.9.2 wurde . Es wird sogar in den Versionshinweisen erwähnt . Die -TOption ist seitdem in jeder nginxVersion vorhanden, einschließlich der unter Ubuntu 16.04.1 LTS verfügbaren:

root@23cc8e58640e:/# nginx -h    
nginx version: nginx/1.10.0 (Ubuntu)
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/share/nginx/)
  -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

Ich glaube nicht, dass dieses Flag existiert, möglicherweise müssen Sie die Antwort aktualisieren
lfender6445

@ ifender6445, ich bin durch Ihren Kommentar völlig verwirrt. Ich habe zwei Verweise auf Zeilen in der Quelle, die jeweils die -TOption zeigen. Fehlt die -TOption in Ihrer speziellen Installation? Können Sie etwas zeigen, um Ihre Behauptung zu begründen?
Rubicks

Ja, ist es vielleicht eine andere Version von Nginx? gist.github.com/lfender6445/ed8c5e26db64eba595ae4aaf4d15ee0d
lfender6445

Aha. Es sieht so aus, als würde ich eine ältere Version von Nginx verwenden. Entschuldigung!
lfender6445

9

Schauen Sie sich die Nginx-Konfigurationsdatei an, um sicherzugehen. Dieser Befehl greift nach dem, was auf Ihrem Computer konfiguriert ist:

cat /etc/nginx/sites-enabled/default |grep "root"

Auf meinem Computer war es: `root / usr / share / nginx / www;


8

Auf dem Mac installieren Sie Nginx mit Brew:

/usr/local/etc/nginx/nginx.conf

location / { 
    root   html;  # **means /usr/local/Cellar/nginx/1.8.0/html and it soft linked to /usr/local/var/www**
    index  index.html;
}  

8

Für CentOS, Ubuntu und Fedora ist das Standardverzeichnis /usr/share/nginx/html


Ich möchte Nginx-Wurzel von var/www/html.
Dhaduk Mitesh


5

In meinem Fall war es in /usr/share/nginx/html

Sie können versuchen zu finden, indem Sie eine Suche durchführen

find / -name html

5

Wenn Sie mit Ubuntu 14.04 arbeiten, finden Sie das Verzeichnis nginx www unter folgendem Pfad:

yusuf@yusuf-he:/usr/share/nginx/html$ pwd
/usr/share/nginx/html
yusuf@yusuf-he:/usr/share/nginx/html$

Danke, kurz und präzise. Manchmal ist die einfachste Erklärung die beste.
WhyAyala

Ich möchte Nginx-Wurzel von var/www/html.
Dhaduk Mitesh

5

Sie können danach suchen, unabhängig davon, wo sie es verschoben haben (Systemadministrator verschoben oder neuere Version von nginx)

find / -name nginx


4

Wenn Sie den öffentlichen Stammordner von nginx herausfinden möchten, der zum Zeitpunkt der Kompilierung definiert wurde, können Sie einfach Ihre Datei access.log überprüfen.

  1. Öffnen Datei nginx.conf
  2. Suchen Sie das log_format Anweisung
  3. Der Wert von log_format ist eine Vorlagenzeichenfolge, mit der Informationen in die Datei access.log geschrieben werden. Sie können dieser Vorlagenzeichenfolge die Variable $ document_root hinzufügen , um den Standard-WWW-Stammspeicherort in einer Datei zu protokollieren.

Hier ist ein Beispiel aus dem http-Abschnitt von nginx.conf mit der geänderten Anweisung log_format . $ Document_root wird am Anfang der Zeichenfolge hinzugefügt:

    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

                  ## ADD $document_root HERE ##
        log_format  main  '$document_root $remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        etc. .......
  1. Sichern Sie dann alle Konfigurationsdateien * .conf im Verzeichnis conf.d und erstellen Sie dort die Konfigurationsdatei test.conf mit den folgenden Zeilen:

    server{
        listen 80;
        server_name localhost;
    }
    
    1. Fügen Sie der Datei / etc / hosts folgende Zeile hinzu: 127.0.0.1 localhost

    2. Nginx-Konfiguration neu laden: nginx -s reload

    3. Senden Sie die GET-Anfrage an http: // localhost :curl http://localhost

    4. Überprüfen Sie die letzte Zeichenfolge von access.log :tail -n 1 /var/log/nginx/access.log

Hier ist die Beispielausgabe dieses Befehls, wobei / etc / nginx / html der zum Zeitpunkt der Kompilierung definierte Standarddokumentstamm ist:

    /etc/nginx/html 127.0.0.1 - - [15/Mar/2017:17:12:25 +0200] "GET / HTTP/1.1" 404 169 "-" "curl/7.35.0" "-"

Es scheint, dass es funktioniert, hat mich aber nicht gelöst. Ein Datensatz für * .knexusgroup.com befindet sich auf 54.235.222.119, w3.knexusgroup.com, aber es wurde für keine Domain <anything> .knexusgroup.com protokolliert. Es funktioniert dort, wo es eine korrekte Definition des Root-Verzeichnisses gibt. Ich kann nicht herausfinden, worum es geht, warum ich kein Root für eine Subdomain finde, die keiner ngiinx-Konfiguration entspricht.
Ramratan Gupta

4

Sie können auf die Datei config nginx zugreifen, Sie können root / path sehen. in dieser Standardeinstellung von Nginx Apache bei/var/www/html


/var/www/htmlist das Standard-Webstammverzeichnis für Apache, nicht für Nginx.
Ethan Hohensee

4

* In var / www / html zugewiesene Standardseiten-Web * Standardkonfigurationsserver usw. / nginx / sites / avaliable / nginx.conf

server {

    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    index index.html index.php;

    server_name _;

    location /data/ {
        autoindex on;
    }

    location /Maxtor {
        root /media/odroid/;
        autoindex on;

    }

        # This option is important for using PHP.
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
    }
}

* Standardkonfigurationsserver usw. / nginx / nginx.conf

Inhalt..

user www-data;
worker_processes 8;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
#}

Standardzugriffsprotokolle mit IP-Clients var / log / nginx / ...


3

Nur um zu beachten, dass auf der Standardindexseite für den Nginx-Server auch der Stammspeicherort angezeigt wird. Von nginx (1.4.3) unter Amazon Linux AMI erhalten Sie Folgendes:

Dies ist die Standardseite index.html, die mit nginx unter Amazon Linux AMI verteilt wird. Es befindet sich in / usr / share / nginx / html.

Sie sollten Ihren Inhalt jetzt an einem Speicherort Ihrer Wahl ablegen und die Root-Konfigurationsanweisung in der Nginx-Konfigurationsdatei /etc/nginx/nginx.conf bearbeiten


3

Mein Nginx unter Ubuntu ist "Nginx-Version: Nginx / 1.9.12 (Ubuntu)" und der Root-Pfad ist / var / www / html /

Ubuntu Info ist: Es sind keine LSB-Module verfügbar. Distributor ID: Ubuntu Beschreibung: Ubuntu 16.04 LTS Release: 16.04 Codename: xenial

Wenn Sie gerade nginx unter Ubuntu installiert haben, können Sie unter "/ etc / nginx / sites-available" die Standarddatei überprüfen. Es gibt eine Konfiguration wie "root / web / root / path / goes / here". Und genau das suchen Sie.


3

Sie finden es in / var / www /, dem Standardverzeichnis für Nginx und Apache, aber Sie können es ändern. Schritt 1 Wechseln Sie in den folgenden Ordner / etc / nginx / sites-available

Schritt 2 Bearbeiten Sie die Standarddatei so, dass Sie einen Serverblock finden, unter dem sich eine Zeile mit dem Namen root befindet, die den Speicherort definiert.


3

in ubuntu 19.04 fanden wir es am

/ usr / share / nginx / html


2

Für nginx / 1.4.6 (Ubuntu)

/etc/nginx$ cat /etc/nginx/sites-available/default | grep -i root
- root /usr/share/nginx/html;


1

Die Standardeinstellung bezieht sich auf die prefixOption des configureSkripts beim Kompilieren von Nginx. Hier ist ein seltsames Beispiel von Debian:

% nginx -V | & tr ' ' "\n" | fgrep -e path -e prefix
--prefix=/etc/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-log-path=/var/log/nginx/access.log
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi
--lock-path=/var/lock/nginx.lock
--pid-path=/var/run/nginx.pid

Anschließend wird der Standardwert rootwird auf das eingestellte htmlVerzeichnis (nach der Dokumentation der rootRichtlinie ), die innerhalb passiert zu sein prefix, als indem man die überprüft werden können $document_rootVariablen aus einer einfachen Konfigurationsdatei:

# printf 'server{listen 4867;return 200 $document_root\\n;}\n' \
    >/etc/nginx/conf.d/so.10674867.conf

# nginx -s reload && curl localhost:4867
/etc/nginx/html

Böse Distributionen wie Debian scheinen es jedoch ziemlich zu modifizieren, um Sie besonders zu unterhalten:

% fgrep -e root -e include /etc/nginx/nginx.conf
    include /etc/nginx/mime.types;
    #include /etc/nginx/naxsi_core.rules;
    #passenger_root /usr;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

% fgrep -e root -e include \
    /etc/nginx/conf.d/*.conf /etc/nginx/sites-enabled/*
/etc/nginx/conf.d/so.10674867.conf:server{listen 4867;return 200 $document_root\n;}
/etc/nginx/sites-enabled/default:   root /usr/share/nginx/www;
/etc/nginx/sites-enabled/default:       # include /etc/nginx/naxsi.rules
/etc/nginx/sites-enabled/default:   #   root /usr/share/nginx/www;
/etc/nginx/sites-enabled/default:   #   include fastcgi_params;
/etc/nginx/sites-enabled/default:   # deny access to .htaccess files, if Apache's document root
/etc/nginx/sites-enabled/default:#  root html;
/etc/nginx/sites-enabled/default:#  root html;

In dieser Instanz von Debian können Sie also sehen, dass die Wurzel endlich auf gesetzt ist /usr/share/nginx/www.

Wie Sie jedoch bei der Beispielserverkonfiguration gesehen haben, die ihren $document_rootWert über http rooterfüllen würde , ist die Konfiguration von nginx so einfach, dass Sie Ihre eigene Konfiguration in ein oder zwei Zeilen schreiben können, wobei Sie die erforderliche Konfiguration angeben , um Ihre genauen Anforderungen zu erfüllen.


Was bedeutet es root html;, ich meine, was ist der wahre Weg?
Ramratan Gupta

1
@ RamratanGupta, hast du die Antwort nicht gelesen? In den ersten Zeilen wird angegeben, dass der Pfad relativ zur Präfixeinstellung zur Kompilierungszeit ist.
cnst

1

Ich hatte dieses Problem auch bei Digital Ocean, wo eine WordPress-Website mit nginx ausgeführt wurde.

Meine Lösung bestand darin, Folgendes zu tun:

  1. Ändern Sie die /etc/nginx/nginx.confDatei wie folgt:
server {
root /var/www/html;
}

Ich musste dann sudo service nginx restart

nginx -VDer Befehl zeigt Ihnen auch, wo sich Ihre Nginx-Konfigurationsdatei befindet (auf meine wurde verwiesen /etc/nginx/nginx.conf).


0

Alpine Linux hat überhaupt keinen Standardspeicherort. Die Datei /etc/nginx/conf.d/default.confsagt:

# Everything is a 404
location / {
    return 404;
}

# You may need this to prevent return 404 recursion.
location = /404.html {
    internal;
}

Ersetzen Sie diese durch eine Linie root /var/www/localhost/htdocs, die auf das gewünschte Verzeichnis verweist. Dann sudo service nginx restartneu starten.


1
Nicht wahr. Ich habe gerade das neueste nginx:alpineBild ausprobiert und es liefert sofort einsatzbereite Inhalte /usr/share/nginx/html.
Jimbali

1
Das klingt nach einem Docker-Image des nginx-Projekts, das zufällig Alpine Linux als zugrunde liegendes Betriebssystem verwendet. Wenn Sie Alpine Linux als Hauptbetriebssystem apk add nginxinstallieren und nginx manuell über den eigenen Paketmanager von Alpine installieren, wird die in meiner Antwort beschriebene Situation angezeigt (oder das war der Fall, als ich es vor einigen Monaten trotzdem ausprobiert habe).
Lassi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.