Я добавил следующую глобальную конфигурацию в 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
что помогает показать, где находятся ошибки.