我正在尝试在我的 Windows 开发环境中设置 Nginx。我找不到如何"sites-enabled"
在 Linux 上创建类似于 Nginx 会查找(链接到)活动虚拟主机配置的东西。
有没有办法对具有实际配置文件的快捷方式的目录和 Nginx 扫描该目录的目录执行类似的操作?或者除了将主机配置复制到之外,还有其他方法可以连接虚拟主机配置nginx.conf
吗?
在 Windows 中,您必须提供配置文件所在目录的完整路径。有两个文件需要更新:nginx.conf,它告诉 nginx 在哪里可以找到网站,以及 localhost.conf,它是网站的配置。
假设 nginx 安装在C:\nginx
. 如果安装目录位于另一个路径,则必须相应地更新该路径,无论它出现在以下两个配置文件中的任何位置。
地点: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";
}
地点: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;
}
}
一些 Linux 包使用的 nginx 使用include
指令的“启用站点”方法,它理解 shell 通配符,请参阅http://nginx.org/r/include。您也可以在自己的配置中使用它,例如
http {
...
include /path/to/sites/*.conf;
}
default_server
请注意,尽管这种方法可能非常令人困惑(特别是,除非您明确使用,否则很难分辨哪个服务器{} 是默认服务器)。
以下内容对我有用,但仅在我将主 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";
}
在撰写此答案(2022 年 1 月 7 日)之前,没有其他答案完全回答了这个问题。
通配符 ( include a/*.b
) 仅包含无法禁用/启用的虚拟主机列表。sites-enabled和sites-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
您可以在 nginx.config 中包含带有相对路径的配置(相对路径只是配置文件本身的路径,与日志路径相反):
http {
include mime.types;
default_type application/octet-stream;
include ../sites-enabled/*.conf;
...
}