26

我正在尝试在我的 Windows 开发环境中设置 Nginx。我找不到如何"sites-enabled"在 Linux 上创建类似于 Nginx 会查找(链接到)活动虚拟主机配置的东西。

有没有办法对具有实际配置文件的快捷方式的目录和 Nginx 扫描该目录的目录执行类似的操作?或者除了将主机配置复制到之外,还有其他方法可以连接虚拟主机配置nginx.conf吗?

4

5 回答 5

30

在 Windows 中,您必须提供配置文件所在目录的完整路径。有两个文件需要更新:nginx.conf,它告诉 nginx 在哪里可以找到网站,以及 localhost.conf,它是网站的配置。

假设 nginx 安装在C:\nginx. 如果安装目录位于另一个路径,则必须相应地更新该路径,无论它出现在以下两个配置文件中的任何位置。

nginx.conf

地点:C:\nginx\conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #to read external configuration.
    include "C:/nginx/conf/sites-enabled/*.conf";
}

本地主机.conf

地点:C:\nginx\conf\sites-enabled

server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
于 2015-04-05T14:07:17.897 回答
18

一些 Linux 包使用的 nginx 使用include指令的“启用站点”方法,它理解 shell 通配符,请参阅http://nginx.org/r/include。您也可以在自己的配置中使用它,例如

http {
    ...
    include /path/to/sites/*.conf;
}

default_server请注意,尽管这种方法可能非常令人困惑(特别是,除非您明确使用,否则很难分辨哪个服务器{} 是默认服务器)。

于 2012-10-25T17:31:59.463 回答
4

以下内容对我有用,但仅在我将主 nginx exe 文件夹从移动c:/Program Files (x86)/nginx-1.7.0到之后c:/nginx-1.7.0(因为我认为它不能很好地处理文件路径中的空格):

http {
    ...
    include "f:/code/mysite/dev-ops/nginx/dev/mysite.conf";
}
于 2014-05-01T17:48:25.453 回答
1

在撰写此答案(2022 年 1 月 7 日)之前,没有其他答案完全回答了这个问题。
通配符 ( include a/*.b) 仅包含无法禁用/启用的虚拟主机列表。sites-enabledsites-available是关于能够在不删除相应配置文件的情况下禁用虚拟主机。
Nginx 只有一个配置文件(nginx.conf),其中又包含其他文件。包含文件的能力是导致启用/可用设计的原因。所以目录结构如下:

conf // or whatever
  nginx.conf
  sites-enabled
    default // symlink to sites-available/default.conf
  sites-available
    default.conf // You can omit the extension but I just like it
    whatever.conf
    some vhost.conf
    another vhost.conf
    disabled vhost.conf
    other config files ...
# nginx.conf
http {
  # ...
  include path/to/sites-enabled/* # include the enabled ones
}

在 Windows (cmd) 中,您执行以下操作:

mklink Link Target
# for example
mklink default X:/path/to/nginx/conf/sites-available/default.conf

许多人认为windows没有符号链接,它有:-)

我使用稍微复杂的配置目录结构进行开发:

conf/
  nginx.conf
  sites-enabled/
    some-site // sites-available/some-site/{env} where {env} is either dev or prod
  sites-available/
    some-site/
      prod.conf
      dev.conf
      dev/
        www.conf // vhost (server {}) for the www subdomain (e.g. www.example.com), has 2 server directives, one for http and the other for https, respectively including `snippets/http.conf` and `snippets/https.conf`. You only need to set `server_name` and include http.conf in order to make http redirect to https properly. You may do `proxy_pass` in https but not in http.
        api.conf // same as above but for the api subdomain
        root.conf // vhost for the root domain with (e.g example.com without any subdomain prefix)
      prod/
        www.conf // Same as dev/ but mostly without `proxy_pass` since you're mostly delivering static files
        api.conf
        root.conf
      snippets/
        http.conf  // listen on ipv4 80/ipv6 80 and redirect http to https
        https.conf // listen on ipv4 443 ssl/ipv6 443 ssl and `include`s ssl.conf
        ssl.conf  // ssl config, pay attention to permission
于 2022-01-07T13:57:19.990 回答
0

您可以在 nginx.config 中包含带有相对路径的配置(相对路径只是配置文件本身的路径,与日志路径相反):

http {
  include       mime.types;
  default_type  application/octet-stream;
  include       ../sites-enabled/*.conf;
  ...
}
于 2018-05-05T09:36:47.920 回答