nginx:[警告] 协议选项重新定义

nginx:[警告] 协议选项重新定义

我将 nginx 更新到 1.23.4,并nginx -t开始显示警告:

nginx: [warn] protocol options redefined for 0.0.0.0:443 in /etc/nginx/sites-enabled/beta:5
nginx: [warn] protocol options redefined for [::]:443 in /etc/nginx/sites-enabled/default:28
nginx: [warn] protocol options redefined for [::]:443 in /etc/nginx/sites-enabled/grafana:5

这些行

    listen 443 ssl;
    listen [::]:443 ssl;
# sometimes:
#    listen 443 ssl;
#    listen [::]:443;
# I'm now know - some inconsistency, fixed

但经过调整和添加后http2出现了更多警告。

答案1

事实证明,我对配置的修正不够。必须对所有服务器配置进行修正。

要查找所有错误发生的情况,您可以自行执行以下操作:

grep -R /etc/nginx/ -e 443 |grep -v ssl
grep -R /etc/nginx/ -e 443 |grep -v http2

重要的:所有监听同一端口的服务器都应该具有相同的配置。

例如。:

listen 443 ssl http2;

#bad:  ssl without http2
listen 443 ssl; 

#ok:   identical protocols as in previous (first) server
listen 443 ssl http2; 

更多详细信息请参阅提交:https://github.com/nginx/nginx/commit/dad65f3e449f215469943628f2b1f12a118fcf7e

答案2

我遇到了同样的问题,因为 default_server 块没有包含该ssl指令。

因此应该是:

server {
  listen 443 default_server ssl;
  listen [::]:443 default_server ssl;

  ...
}

代替

server {
  listen 443 default_server;
  listen [::]:443 default_server;

  ...
}

请注意,在其他监听 443 的服务器块中,我已包含了该http2 on;指令,但这是不必要将其包括在内default_server以使警告消失。

答案3

看起来,每次 nginx 配置处理器遇到针对给定 ip 地址和端口组合的监听指令时,都会显示与之前看到的不同的消息。

因此,如果您有两个连续的server块具有相同的 listen 指令,那么您将不会收到第二个块的警告。如果server后面的块具有不同的 listen 指令(例如与第一个相同),那么这将触发另一个警告。

最终,解决方案是确保它们都是相同的,但我希望这个额外的细节可以帮助某些人缩小他们应该更改的配置文件的范围。

相关内容