nginx没有';你不能在端口80上监听两次吗? 编辑:首先阅读以下内容:

nginx没有';你不能在端口80上监听两次吗? 编辑:首先阅读以下内容:,nginx,nginx-config,Nginx,Nginx Config,除了可接受的答案外,在没有systemd的情况下启动nginx时也会出现这些错误。Kill nginx:ps-ax | grep nginx→ 查找nginx主pid→ 杀死###;使用systemd运行nginx:systemctl启动nginx 如果systemctl未用于启动nginx,则systemctl stop nginx似乎不起作用(至少在我的服务器上是这样);因此,systemctl restart nginx在第二次尝试启动nginx时会出现此错误 关于我的设置: 我在Debi

除了可接受的答案外,在没有systemd的情况下启动nginx时也会出现这些错误。Kill nginx:
ps-ax | grep nginx
→ 查找nginx主pid→ <代码>杀死###;使用systemd运行nginx:
systemctl启动nginx

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

关于我的设置: 我在Debian 10上,Buster,有一台实时服务器。我已经测试了这两个域名,它们自己使用这些配置文件进行广播,但当两个配置文件都处于活动状态时,它们不会广播

我正在努力实现的目标: 如何使用nginx在一个ip地址上设置两个网站

错误消息:
nginx:[emerg]在/etc/nginx/sites enabled/example.com:22第2行中为0.0.0.0:80复制默认服务器

nginx:[emerg]在/etc/nginx/sites enabled/example.com:22第2行中为0.0.0.0:443复制默认服务器<代码>默认_服务器
用于端口443

nginx:[emerg]在/etc/nginx/sites enabled/example.com:23第3行中为[::]443复制侦听选项<代码>默认\u服务器
在一个文件中尝试为
http2
,使用端口443

nginx:[emerg]在/etc/nginx/sites enabled/example.com:23中为[:]:80重复侦听选项<代码>默认\u服务器
在一个文件中尝试为
http2

nginx:[emerg]在/etc/nginx/sites enabled/example.com:23中的无效参数“example.com”
第3行:
default\u server
尝试为
example.com

配置文件(注释): 其中有两个文件(代码如下所示)。我的配置文件与下面的代码块完全相同,只有一个区别:在这两个文件中,
example.com
是我拥有的真实、唯一的域名

我的配置文件位于
/etc/nginx/sites available
,并且它们被符号链接到
/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;
    }
}
主要不和谐: 要求重写这些行或注释其中一行。重写要么无法解决错误,要么导致文件未公开提供(example.com无处可用)

总结: 这个问题似乎与第2行、第3行或第2行和第3行有关


本质上,所有主要的how-to要么明确告诉读者使用上面的代码——要么——他们没有提到这些行。

正如错误消息所示,在同一IP地址和端口上不能有两个默认侦听器。从一个或两个服务器块中的
listen
声明中删除
default\u server

    listen 80;
    listen [::]:80 ipv6only=on;

当您在
listen
指令上指定
default\u server
标志时,nginx将使用该
server
块来服务HTTP
Host
头与任何其他服务器块中的
server\u名称
不匹配的任何请求(或者请求根本缺少
Host
头)。您可以在任何特定的IP:port组合上使用
default\u server
标志,该组合作为
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
    ...
}
工作示例: 通常,当我需要在同一台服务器上为多个站点提供服务时,我会使用以下配置(当然这是简化的,现在我们通常使用HTTPS和
http://example.com
https://example.com
重定向):

站点1配置文件

server {
    listen 80;
    server_name example1.com www.example1.com;
    ...
}
server {
    listen 80;
    server_name example2.com www.example2.com;
    ...
}
server {
    listen 80 default_server;
    server_name _;
    return 444;
}
站点2配置文件

server {
    listen 80;
    server_name example1.com www.example1.com;
    ...
}
server {
    listen 80;
    server_name example2.com www.example2.com;
    ...
}
server {
    listen 80 default_server;
    server_name _;
    return 444;
}
默认服务器配置文件

server {
    listen 80;
    server_name example1.com www.example1.com;
    ...
}
server {
    listen 80;
    server_name example2.com www.example2.com;
    ...
}
server {
    listen 80 default_server;
    server_name _;
    return 444;
}

由于
listen
指令上的
default\u server
标志,当请求的
Host
标头不包含我的一个站点名称(或者请求根本没有
Host
标头)时,将使用第三个服务器块。我不希望访问者不知道他们正在访问的站点(通常是端口扫描程序、漏洞搜索程序等),因此我为他们使用特殊的nginx 444代码(无任何响应的紧密连接)。

不能在同一地址上使用同一端口运行两个应用程序

您需要做的只是将应用程序的端口更改为80,而将其他应用程序的端口更改为3000

如果您希望应用程序仅使用80端口运行,而不只是从中删除默认文件

/etc/nginx/sites available/default

也可以选择从

/etc/nginx/sites enabled/default

你可以跑

sudo rm-rf/etc/nginx/sites available/default

sudo rm-rf/etc/nginx/sites enabled/default


现在,您可以在端口80上运行一个应用程序了。我是在一个IP上配置三个主机名时遇到这个问题的

我使用免费的ssl证书,它只能在一个主机名上签名。因此,我应用了三个ssl证书

server {
    listen      443 backlog=50000;
    server_name example1.com;
当我使用
nginx-t
测试配置文件时,它显示

nginx:[emerg]0.0.0.0:443英寸的重复侦听选项 /etc/nginx/conf.d/example1_https.conf:2

nginx:配置文件/etc/nginx/nginx.conf测试失败


我通过从example3.com中删除
backlog=50000
来修复它。是否要在同一个端口80上运行两个应用程序?我希望在站点中启用默认文件的备份。。。。但是它是从可用的站点中删除的(我认为如果它是从启用的站点中删除的,则没有效果)。事实上,在这种情况下,我可以在80端口上运行其中一个。端口80和端口443不是我可以用于broadcas的唯一端口吗