gpt4 book ai didi

nginx 不会两次监听 80 端口?

转载 作者:行者123 更新时间:2023-12-04 00:21:36 26 4
gpt4 key购买 nike

编辑:首先阅读这个:

除了接受的答案之外,这些错误在没有 systemd 的情况下启动 nginx 时会发生。杀死 nginx:ps -ax | grep nginx → 找到 nginx 主 pid → kill ### ;使用 systemd: systemctl start nginx 运行 nginx。

如果不使用 systemctl 启动 nginx,systemctl stop nginx 似乎不起作用(至少在我的服务器上);因此, systemctl restart nginx 在第二次尝试启动 nginx 时会出现此错误。

关于我的设置:

我在 Debian 10,Buster,有一个实时服务器。我已经测试了两个域名,它们使用这些配置文件自己广播,但是当两个配置文件都处于事件状态时它们不会广播。

我要完成的工作:

如何使用 nginx 在一个 IP 地址上设置两个网站?

错误信息:
nginx: [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 第 2 行。default_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 中,它们符号链接(symbolic link)到 /etc/nginx/sites-enabled

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

root /var/www/example.com; #example.com is different in both files.
index index.html index.htm index.nginx-debian.html;

server_name example.com www.example.com; #example.com is different in both files.

location / {
try_files $uri $uri/ =404;
}
}

初级不和谐:

Another stack question 表示要重写这些行或将其中的一行注释掉。重写要么无法解决错误,要么导致文件未公开提供的情况(example.com 无处可去)。

概括:

这个问题似乎是关于第 2 行、第 3 行或第 2 行和第 3 行的。

本质上,所有主要的操作方法要么明确告诉读者使用上面的代码,要么没有提及这些行。

最佳答案

当您指定 default_server listen 上的标志指令,nginx 将使用 server阻止以提供 HTTP Host 的任何请求 header 与 server_name 不匹配在任何其他服务器 block 中(或请求完全缺少 Host header )。您可以使用 default_server任何特定 IP:端口组合上的标志,作为 listen 的参数给出指令只有一次。但是您可以在不同的 IP:port 组合上多次使用此标志。
一些示例,假设您的服务器有多个网络接口(interface):

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
...
}
工作示例:
通常,当我需要在同一台服务器上为多个站点提供服务时,我使用以下配置(当然这是简化的,现在我们通常使用带有 http://example.comhttps://example.com 重定向的 HTTPS):
站点 1 配置文件
server {
listen 80;
server_name example1.com www.example1.com;
...
}
站点 2 配置文件
server {
listen 80;
server_name example2.com www.example2.com;
...
}
默认服务器配置文件
server {
listen 80 default_server;
server_name _;
return 444;
}
因为 default_server标记 listen当请求的 Host 时使用指令第三个服务器 block header 不包含我的站点名称之一(或请求根本没有 Host header )。我不希望访问者不知道他们正在访问哪个站点(这些通常是端口扫描器、漏洞搜索器等),所以我为他们使用了特殊的 nginx 444 代码(关闭连接而没有任何响应)。

关于nginx 不会两次监听 80 端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60362642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com