Nginx 全局配置破坏了 Nginx(已更新)

Nginx 全局配置破坏了 Nginx(已更新)

我已将以下全局配置添加到http块内部nginx.conf

目的是在一个 conf 块中覆盖所有 php 应用程序(WordPress 应用程序和 PHPmyadmin),而不是创建多个 conf 文件及其符号链接。

http {
    ..........................................
    server {
        listen 80 default_server;
        root /var/www/$host;
        location / {
            index index.php index.html index.htm;
        }
        location ~ {
            try_files $uri $uri/ /index.php;
        }
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
    ..........................................
}

我的问题

这种配置会破坏系统——只要它在里面nginx.conf,系统就会破坏。

完整版(已更新)nginx.conf 可以在这里看到

唯一的错误nginx -t是关于这一行listen 80 default_server;,它说:

/etc/nginx/nginx.conf:65 中的 0.0.0.0:80 的重复默认服务器

我的问题

为什么我的全局代码会破坏 Nginx?

答案1

在常规配置后放置一个server节,它将更有可能起作用 - 配置从上到下读取,因此虚拟主机配置中的任何设置都会覆盖那里显示的设置。

此外,您还可以测试您的配置,nginx -t这有助于显示错误的位置。

答案2

  location {
            try_files $uri $uri/ /index.php;
        }

你没有location_match该特定位置块。只需将其更改为

            location ~ {
                    try_files $uri $uri/ /index.php;
            }

使您的配置文件有效。

解释:

Location blocks generally take the following form:

location optional_modifier location_match {

    . . .

}
The location_match in the above defines what Nginx should check the request URI against. The existence or nonexistence of the modifier in the above example affects the way that the Nginx attempts to match the location block. The modifiers below will cause the associated location block to be interpreted as follows:

(none): If no modifiers are present, the location is interpreted as a prefix match. This means that the location given will be matched against the beginning of the request URI to determine a match.

=:如果使用等号,则当请求 URI 与给定的位置完全匹配时,该块将被视为匹配。

~:如果存在波浪号修饰符,则该位置将被解释为区分大小写的正则表达式匹配。

~*:如果使用波浪号和星号修饰符,则位置块将被解释为不区分大小写的正则表达式匹配。

^~:如果存在插入符号和波浪号修饰符,并且如果该块被选为最佳非正则表达式匹配,则不会进行正则表达式匹配。

答案3

您可以轻松亲眼看到:

# nginx -t -c /tmp/nginx_test.conf
nginx: [emerg] invalid number of arguments in "location" directive in /tmp/nginx_test.conf:15

我猜他不喜欢location {

相关内容