Назад | Перейти на главную страницу

Nginx global conf ломает Nginx (обновлено)

Я добавил следующую глобальную конфигурацию в http блок внутри nginx.conf.

Цель состоит в том, чтобы охватить все приложения php (приложения WordPress и PHPmyadmin) одним блоком conf, вместо этого создавая несколько файлов 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; и он говорит:

дублированный сервер по умолчанию для 0.0.0.0:80 в /etc/nginx/nginx.conf:65

Мой вопрос

Почему мой глобальный код ломает Nginx?

Вы легко можете сами убедиться:

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

Он не любит location {, Я думаю.

  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 запроса точно соответствует указанному местоположению.

~: Если присутствует модификатор тильды, это местоположение будет интерпретировано как совпадение регулярного выражения с учетом регистра.

~ *: Если используются модификаторы тильды и звездочки, блок местоположения будет интерпретироваться как совпадение регулярного выражения без учета регистра.

^ ~: Если присутствует модификатор carat и тильда, и если этот блок выбран как лучшее совпадение нерегулярного выражения, сопоставление регулярного выражения не произойдет.

Поместите server после общей конфигурации, и она с большей вероятностью будет работать - конфигурация читается сверху вниз, поэтому любые настройки в конфигурациях вашего виртуального хоста будут перезаписывать настройки, как показано там.

Также вы можете протестировать свою конфигурацию с помощью nginx -t что помогает показать, где находятся ошибки.