Wol*_*'08 4 nginx nginx-config
除了已接受的答案之外,这些错误在没有systemd 的情况下启动 nginx 时也会发生。杀死 nginx: ps -ax | grep nginx
\xe2\x86\x92 找到nginx master pid\xe2\x86\x92 kill ###
;使用systemd运行 nginx : systemctl start nginx
。
如果不使用 systemctl 来启动 nginx,则 systemctl stop nginx 似乎不起作用(至少在我的服务器上);因此,当 systemctl restart nginx 再次尝试启动 nginx 时,会出现此错误。
\n\n我使用的是 Debian 10,Buster,有一个实时服务器。我已经测试了这两个域名,它们使用这些配置文件自行广播,但当两个配置文件都处于活动状态时它们不会广播。
\n\n如何使用 nginx 在一个 IP 地址上设置两个网站?
\n\nnginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-enabled/example.com:22
第 2 行。
nginx: [emerg] a duplicate default server for 0.0.0.0:443 in /etc/nginx/sites-enabled/example.com:22
第 2default_server
行在端口 443 上使用。
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/example.com:23
第 3 行。在一个文件中default_server
进行了尝试http2
,并使用了端口 443。
nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com:23
第 3 行。在一个文件中default_server
尝试过。http2
nginx: [emerg] invalid parameter "example.com" in /etc/nginx/sites-enabled/example.com:23
第 3 行:default_server
尝试作为example.com
这些文件有两个(代码见下文)。我的配置文件与下面的代码块中所示完全相同,只有一个区别:在这两个文件中,example.com
都是我拥有的真实的、唯一的域名。
我的配置文件位于/etc/nginx/sites-available
,它们符号链接到/etc/nginx/sites-enabled
.
server {\n listen 80 default_server;\n listen [::]:80 default_server ipv6only=on;\n\n root /var/www/example.com; #example.com is different in both files.\n index index.html index.htm index.nginx-debian.html;\n\n server_name example.com www.example.com; #example.com is different in both files.\n\n location / {\n try_files $uri $uri/ =404;\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n另一个堆栈问题要求重写这些行或注释掉其中一行。重写要么无法解决错误,要么导致文件无法公开提供的情况(example.com 无处可去)。
\n\n这个问题好像是关于第2行,第3行,或者第2行和第3行。
\n\n本质上,所有主要的操作方法要么明确告诉读者使用上面的代码,要么没有提及这些行。
\n当您在指令上指定default_server
标志时listen
,nginx 将使用该server
块来服务任何 HTTPHost
标头与任何其他服务器块中的标头不匹配的请求server_name
(或请求Host
根本缺少标头)。default_server
您只能在作为指令参数给出的任何特定 IP:端口组合上使用listen
一次标志。但是您可以在不同的 IP:端口组合上多次使用此标志。
一些示例,假设您的服务器有多个网络接口:
server {
listen 1.2.3.4:80 default_server; # this will be default server block for any request coming to 1.2.3.4 IP address on port 80
...
}
server {
listen 5.6.7.8:80 default_server; # this will be default server block for any request coming to 5.6.7.8 IP address on port 80
...
}
server {
listen 80 default_server; # this will be default server block for any request coming to any other IP address (except 1.2.3.4 and 5.6.7.8) on port 80
...
}
Run Code Online (Sandbox Code Playgroud)
通常,当我需要在同一服务器上为多个站点提供服务时,我使用以下配置(当然这是简化的,现在我们通常使用 HTTPS 进行http://example.com
重定向https://example.com
):
站点 1 配置文件
server {
listen 80;
server_name example1.com www.example1.com;
...
}
Run Code Online (Sandbox Code Playgroud)
站点2配置文件
server {
listen 80;
server_name example2.com www.example2.com;
...
}
Run Code Online (Sandbox Code Playgroud)
默认服务器配置文件
server {
listen 80 default_server;
server_name _;
return 444;
}
Run Code Online (Sandbox Code Playgroud)
由于指令default_server
上的标志,listen
当请求的标头不包含我的站点名称之一(或者请求根本Host
没有标头)时,将使用第三个服务器块。Host
我不希望访问者不知道他们正在访问什么网站(这些通常是端口扫描器、漏洞搜索器等),因此我为他们使用特殊的 nginx 444 代码(关闭连接,没有任何响应)。
归档时间: |
|
查看次数: |
10339 次 |
最近记录: |