Глобальный конф Nginx ломает Nginx (обновлено)

Я добавил следующий глобальный conf к 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?

3 ответа

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

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

Ему не нравится location {, Похоже.

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

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

  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 и tilde, и если этот блок выбран в качестве лучшего соответствия нерегулярного выражения, сопоставление регулярного выражения не будет иметь места.

Другие вопросы по тегам