nginx имя_сервера подстановочный знак или всеобъемлющий
-
13-11-2019 - |
Вопрос
У меня есть экземпляр nginx, который обслуживает несколько веб-сайтов.Первое — это сообщение о состоянии IP-адреса сервера.Второй — консоль администратора на admin.domain.com
.Они отлично работают.Теперь я бы хотел, чтобы все остальные запросы домена направлялись в один index.php
— У меня много доменов и поддоменов, и перечислять их все в конфигурации nginx нецелесообразно.
До сих пор я пытался установить server_name
к *
но это не удалось из-за недопустимого подстановочного знака. *.*
работает, пока я не добавлю другие блоки сервера, тогда, я думаю, он с ними конфликтует.
Есть ли способ запустить всеобъемлющую блокировку сервера в nginx после того, как были определены другие сайты?
Н.Б.Я не спамер, это настоящие сайты с полезным контентом, просто они созданы на одной и той же CMS из базы данных!
Решение
Измените параметр прослушивания на это в своем универсальном блоке сервера.(Добавлять default_server
) это займет все ваши неопределенные соединения (на указанном порту).
listen 80 default_server;
если вы хотите отправить все в index.php, если файл или папка не существует;
try_files $uri /$uri /index.php;
Другие советы
Простое подчеркивание также работает:
server_name _;
Это будет работать:
server_name ~^(.+)$
У меня почему-то определение default_server не сработало.Я решил это с помощью
server_name ~^.*$
используя регулярное выражение all.
Теперь вы можете использовать маску:
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
Посмотрите больше здесь: http://nginx.org/en/docs/http/server_names.html
Только 1 server
директива
Параметр default_server, если он присутствует, приведет к тому, что сервер станет сервером по умолчанию для указанного адреса: пара портов.Если ни у одного из директив нет параметра default_server, то первый сервер с адресом: пара портов будет сервером по умолчанию для этой пары.
Если у вас есть только 1 server
директива, которая будет обрабатывать все запросы, вам не нужно ничего устанавливать.
Несколько server
директива
Если вы хотите сопоставить весь запрос с указанным server
директиву, просто добавьте default_server
параметр для listen
, Nginx будет использовать это server
директива по умолчанию.
server {
listen 80 default_server;
}
О server_name _;
В примерах общих серверов можно увидеть странное имя «_»:
server { listen 80 default_server; server_name _; return 444; }
В этом имени нет ничего особенного, это только одна из множества недействительных доменных имен, которые никогда не пересекаются с каким -либо настоящим именем.В равной степени можно использовать и другие недопустимые имена, такие как «--» и «!@#».
Неважно, что server_name
вы установили, это всего лишь неверное доменное имя.
Если вы также хотите перехватывать запросы с пустыми Host
заголовок (который разрешен в HTTP/1.0) вы можете использовать как регулярное выражение, так и пустое server_name
:
server {
listen 80;
server_name ~. "";
}