NGinx默认的公共www位置?


302

我之前曾使用过Apache,所以我知道默认的公共Web根通常是/var/www/

我最近开始使用nginx,但是似乎找不到默认的公共Web根。

在哪里可以找到nginx的默认公共Web根?

Answers:


166

如果您的配置不包含一条root /some/absolute/path;语句,或者它包含一条使用相对路径(例如)的语句,root some/relative/path;则结果路径取决于编译时选项。

如果您自己下载并编译了源代码,那么可能唯一可以让您做出有根据的猜测的情况是什么。在这种情况下,路径将相对于--prefix所使用的路径。如果您没有更改,则默认为/usr/local/nginx。您可以找到参数nginx是通过via编译的nginx -V,它被--prefix列为第一个。

由于root选项默认为html,这将,当然,导致/usr/local/nginx/html作为回答你的问题。

但是,如果您以其他任何方式安装nginx,则所有选择都将关闭。您的发行版可能使用完全不同的默认路径。学习弄清您的选择分配用于事物的默认类型是完全另一项任务。


32
您可能会暗示您可以使用“ nginx -V”(大写的V)来发现用于编译nginx的配置参数。
kaufholdr

1
@kaufholdr是正确的,您会发现--prefix @ Gnarfoz看起来与此类似--prefix = / usr / share / nginx
Dung

6
这也取决于安装所在的操作系统,对于Amazon Linux,该目录是:/ usr / share / nginx / html
jeffmcneill

--prefix路径并不总是正确的。在我的debian 9 nginx上,安装的前缀路径为“ / var / www / html”,但事实证明,默认的默认路径为“ / usr / share / nginx / html”。查看/ etc / nginx / sites-available / default中的默认配置文件,显示该路径与--prefix路径相同。但是位于/etc/nginx/conf.d/default.conf的配置文件将根目录列出为/ usr / share / nginx / html。default.conf文件优先于普通的默认文件。确保检查两个配置文件,否则您可能使用了错误的根目录。
穴居人

1
nginx -V 2>&1 | grep --color -o -e '--prefix=[^[:space:]]\+'给你nginx HOME。
sjas,

436

如果使用apt-get在Ubuntu上安装,请尝试/usr/share/nginx/www

编辑:

在最新版本中,路径已更改为: /usr/share/nginx/html

2019年编辑:

也可以尝试/var/www/html/index.nginx-debian.html


113
Ubuntu上的nginx 1.4.1在/ usr / share / nginx / html中
Nick Desaulniers

我刚刚在Raspberry上安装了nginx,默认目录与Lufix +1编写的目录相同。从raspbian下载apt-get的
Mitro

4
刚刚确认在CentOS 7.0上,它也是/ usr / share / nginx / html
djhaskin987

2
Debian apt-get,检查/ etc / nginx / available-sites / default,我在那找到了路径。
Chris.Zou 2014年

7
Ubuntu的16 /var/www/html/index.nginx-debian.html
唐亮

65

Debian上的默认Nginx目录是/var/www/nginx-default

您可以检查文件: /etc/nginx/sites-enabled/default

并找到

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;
        }

根是默认位置。


5
在CentOS中,我发现没有/ etc / nginx / sites-enabled /文件夹。有/etc/nginx/conf.d/,并且有两个文件server.conf和virtual.conf包含此服务器详细信息。您也可以注意这一点。
纳菲斯·艾哈迈德

1
要添加到Nafis的注释中,conf.d目录中的文件名必须以.conf结尾,否则将不会被提取。
Ethan Hohensee'3

1
这仅在默认站点已启用且匹配请求的情况下适用。否则,默认根目录为html
OrangeDog

@OrangeDog如何检查是否default site已启用?
Timo

1
@Timo这个答案说了如何
OrangeDog

43

可以从nginx -V输出中找到“默认公共Web根”:

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

--prefix值是问题的答案。对于根目录以上的示例是/ var / lib / nginx


1
是的,最好的,跨平台的。
杰西·阿德曼

这并不总是正确的,“-prefix”可能在某些系统上使用,但并非在所有系统上都使用。我确实同意nginx -V为您提供了很多信息,这些信息将有助于跟踪文件的位置,但这取决于操作系统。FreeBSD上的IE不在“ --prefix”之内,而在“ / usr / local / www”中,在某些Linux发行版中,它也可能有所不同。最好查看配置。
Mikec

“ --prefix”是GNU标准定义的变量-请参阅gnu.org/prep/standards/html_node/Directory-Variables.html
Serge S

“ --prefix”是GNU标准定义的变量-请参阅gnu.org/prep/standards/html_node/Directory-Variables.html。nginx遵循标准。如果未在配置文件中定义根目录或位置(取决于--conf-path),则前缀将显示“默认公共Web根目录”所在的位置。这并不依赖于OS,尽管随OS发行包一起提供的软件包还可以提供依次重新定义“默认公共Web根”的配置。
Serge S

所以算法:在nginx -V输出中寻找--conf-path。如果在配置中未重新定义locationroot,则将--prefix用作“默认公共Web根”位置。
Serge S

25

在Mac OS X上,通过brew安装nginx成为默认目录:

/usr/local/var/www

所以:

root html

手段

root /usr/local/var/www/html

没有html目录,因此必须手动创建。


1
+1代表提及macOS和自制软件。但是,我发现了root htmlindex.html并将50x.html其直接放在中/usr/local/var/www。因此,我怀疑html文件夹的存在。您能帮我些帮助吗?
iplus26 '16

3
“ brew info nginx”给出输出中列出的docroot。但是在nginx配置中指定“ root html”会更改该nginx配置的docroot。
freegnu

1
对我而言(MAC OS X El Capitan 10.11.5)和brew(1.1.5),目录/usr/local/Cellar/nginx/1.10.2_1/html 是nginx版本1.10.2_1。
Yogesh Yadav

2
在我的酿造安装酒窖目录是符号链接:/usr/local/Cellar/nginx/1.12.0_1/html -> ../../../var/www/nginx -V 表演:--prefix=/usr/local/Cellar/nginx/1.12.0_1所以root html是通过该链接重定向。
马克·爱丁顿

@ iplus26 html目录已经可用/usr/local/Cellar/nginx/1.12.2_1/html,我认为/ usr / local / var / www只是一个链接
Kanagavelu Sugumar

21

您可以简单地将nginx的根文件夹映射到您网站的位置:

nano /etc/nginx/sites-enabled/default

默认文件中,在服务器标签中查找根目录并更改您网站的默认文件夹,例如,我的网站位于/ var / www

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

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

当我评估nginx,apache2和lighttpd时,我将它们全部映射到我的网站/ var / www。我发现这是进行有效评估的最佳方法。

然后,您可以启动/停止所选服务器,并查看性能最佳的服务器。

例如

service apache2 stop
service nginx start

顺便说一句,nginx实际上非常快!


19

就像大多数用户所说的那样,它位于以下路径下:

/usr/share/nginx/html

这是默认路径,但是您可以自己设置。

您所需要做的就是在Web服务器根目录树中创建一个,并为其赋予一些权限“ not 0777”,并且仅对一个用户可见,并且仅对该用户可见,但是从路径末尾开始,路径的末尾对所有人可见是您的文件和文件夹将被公众查看的内容。

例如,您可以这样制作:

home_web/site1/public_html/www/

每当您在Nginx中创建虚拟主机时,都可以自定义自己的根路径,只需在服务器块中添加以下内容:

 server {
    listen  80;
        server_name  yoursite.com;

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

是的,你是对的。我刚刚在centos7上安装了Nginx,我注意到默认路径是/usr/share/nginx/html/folder。是否有理由完全更改该路径(出于安全性或其他原因)?如果我将成为唯一用户并且仅在其中托管1个网站,可以将其保留在默认文件夹中吗?
Neel 2014年

没关系我的最后一个问题。我最终为它创建了单独的文件夹,因为我认为这样做会更好,以防万一我将来想在此设置中添加不同的虚拟主机。这样更容易。干杯:)
Neel 2014年

11

nginx的默认Web文件夹取决于您的安装方式,但通常位于以下位置:

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

10

对于Ubuntu和docker映像:

 /usr/share/nginx/html/

只是好奇,说我不知道​​,我将如何找到正确的位置?那里有许多不同的答案
罗伊·纳米尔

据我记得,我搜索了“ nginx”(类似于find / -name nginx),并在该目录(或其子目录)中找到了出现在浏览器中的文档。
DimiDak

9

运行命令 nginx -V 并查找--prefix。使用该条目找到您的默认路径。


9

转储配置:

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

您得到的内容可能有所不同,因为这取决于您的nginx配置/安装方式。

参考文献:

更新:if / when -T选项何时添加到的问题上有些困惑nginxvl-homutov在2015年6月16日的手册页中对此进行了记录,该页面成为v1.9.2版本的一部分。发行说明中甚至提到了它。此后的-T每个nginx版本中都存在该选项,包括Ubuntu 16.04.1 LTS上可用的选项:

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

我认为该标志不存在,您可能需要更新答案
lfender6445 '16

@ ifender6445,您的评论让我很困惑。我对源代码中的行有两个引用,每个引用都显示了该-T选项。-T您的特定安装中是否缺少该选项?您能显示任何证据来证明您的主张吗?
rubicks

是的,可能是Nginx的其他版本吗?gist.github.com/lfender6445/ed8c5e26db64eba595ae4aaf4d15ee0d
lfender6445

我知道了。看来我使用的是较旧版本的Nginx,抱歉!
lfender6445 '16

9

确保可以查看nginx配置文件。对于您的计算机上配置的任何内容,此命令都会显示:

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

在我的机器上是:`root / usr / share / nginx / www;


8

在Mac上,用brew安装nginx:

/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;
}  




5

如果您使用的是Ubuntu 14.04,则可以在以下路径中找到nginx www目录:

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

谢谢,简短而准确。有时,最简单的解释是最好的解释。
WhyAyala

我想从Nginx根var/www/html
Dhaduk Mitesh

5

您可以搜索它,无论他们将其移动到了哪里(系统管理员已移动或Nginx的较新版本)

查找/ -name nginx


4

如果您需要查找在编译时定义的nginx公共根文件夹,则只需检查access.log文件即可。

  1. 打开nginx.conf
  2. 查找log_format指令
  3. log_format的值是一个模板字符串,用于将信息写入access.log文件。您可以将$ document_root变量添加到此模板字符串,以将默认www根目录记录到文件中。

这是nginx.conf的http部分的示例,该示例的log_format指令已修改,在字符串的开头添加了$ document_root:

    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. 然后将所有配置文件* .conf备份到conf.d目录中,并在其中创建配置文件test.conf并包含以下几行:

    server{
        listen 80;
        server_name localhost;
    }
    
    1. 将以下行添加到/ etc / hosts文件中: 127.0.0.1 localhost

    2. 重新加载nginx配置: nginx -s reload

    3. 发送GET请求到http:// localhostcurl http://localhost

    4. 检查access.log的最后一个字符串:tail -n 1 /var/log/nginx/access.log

这是此命令的示例输出,其中/ etc / nginx / html是在编译时定义的默认文档根目录:

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

似乎有效,但没有解决我问题,*。knexusgroup.com的记录位于54.235.222.119,w3.knexusgroup.com,但未记录任何域<anything> .knexusgroup.com。它在哪里有正确的root目录定义的地方起作用,我无法弄清楚是什么问题,为什么我找不到与任何ngiinx配置都不匹配的任何子域的root。
拉姆拉丹·古普塔

4

您可以访问文件配置nginx,可以看到root / path。在默认的nginx apache中/var/www/html


/var/www/html是apache的默认Web根目录,不是nginx。
伊桑·霍恩塞

4

*在var / www / html中分配的默认网页 *默认配置服务器etc / 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;
    }
}

*默认配置服务器etc / nginx / nginx.conf

内容..

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;
#   }
#}

ip客户端的默认访问日志var / log / nginx / ...


3

只是要注意,nginx服务器的默认索引页面也将显示根位置。从Amazon Linux AMI上的nginx(1.4.3),您将获得以下内容:

这是在Amazon Linux AMI上与nginx一起分发的默认index.html页面。它位于/ usr / share / nginx / html中。

现在,您应该将内容放在您选择的位置,然后在nginx配置文件/etc/nginx/nginx.conf中编辑根配置指令。


3

我在Ubuntu上的nginx是“ nginx版本:nginx / 1.9.12(Ubuntu)”,根路径是/ var / www / html /

Ubuntu的信息是:没有可用的LSB模块。发行者ID:Ubuntu说明:Ubuntu 16.04 LTS版本:16.04代号:xenial

实际上,如果您只是在Ubuntu上安装了nginx,则可以转到“ / etc / nginx / sites-available”并检查默认文件,其中的配置类似于“ root / web / root / path / goes / here”。这就是您想要的。


3

您可以在/ var / www /中找到它,它是nginx和apache的默认目录,但是您可以更改它。步骤1转到以下文件夹/ etc / nginx / sites-available

步骤2编辑默认文件,在该文件中您可以找到一个服务器块,在该服务器块下将有一个名为root的行,该行定义了位置。


3

在ubuntu 19.04中,我们在

/ usr / share / nginx / html


2

对于nginx / 1.4.6(Ubuntu)

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


1

默认值与编译nginx时prefixconfigure脚本选项有关;这是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

随后,该默认值root设定为所述html目录(按照所述的文档root指令),这恰好是内prefix,如可通过观察来验证$document_root从一个简单的配置文件变量:

# 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

但是,像Debian这样的邪恶发行版似乎对其进行了相当多的修改,以使您倍感愉悦:

% 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;

因此,在该Debian实例上,您可以看到根目录最终设置为/usr/share/nginx/www

但是,就像通过示例服务器配置(可$document_root通过http 为其提供值)所看到的那样,配置nginx非常简单,您只需一行或两行就可以编写自己的配置,并指定root满足实际需求的要求。


这是什么意思root html;,我的意思是什么是真实的道路?
拉姆拉丹·古普塔

1
@RamratanGupta,您没有阅读答案吗?第一行概述了该路径是相对于编译时前缀设置的。
cnst

1

我在Digital Ocean上使用nginx运行WordPress网站时也遇到了此问题。

我的解决方案是执行以下操作:

  1. /etc/nginx/nginx.conf使用以下内容修改文件:
server {
root /var/www/html;
}

然后我不得不 sudo service nginx restart

nginx -V该命令还显示了您的nginx配置文件所在的位置(我的指向/etc/nginx/nginx.conf


0

Alpine Linux根本没有任何默认位置。该文件显示/etc/nginx/conf.d/default.conf

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

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

用一行代替它们,root /var/www/localhost/htdocs指向您想要的目录。然后sudo service nginx restart重新启动。


1
不对。刚刚尝试了最新的nginx:alpine图像,它可以立即提供内容/usr/share/nginx/html
Magicode '19

1
这听起来像是nginx项目制作的Docker映像,恰好是使用Alpine Linux作为底层操作系统。当您安装Alpine Linux作为主要操作系统并apk add nginx通过Alpine自己的软件包管理器手动安装nginx时,您会得到我的回答中所述的情况(或者几个月前我尝试过的情况)。
拉西
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.