nginx имя_сервера подстановочный знак или всеобъемлющий

StackOverflow https://stackoverflow.com/questions/9454764

  •  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  _;

Источник : http://nginx.org/en/docs/http/server_names.html

Это будет работать:

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 директива

От Нгинкс listen Документы

Параметр default_server, если он присутствует, приведет к тому, что сервер станет сервером по умолчанию для указанного адреса: пара портов.Если ни у одного из директив нет параметра default_server, то первый сервер с адресом: пара портов будет сервером по умолчанию для этой пары.

Если у вас есть только 1 server директива, которая будет обрабатывать все запросы, вам не нужно ничего устанавливать.


Несколько server директива

Если вы хотите сопоставить весь запрос с указанным server директиву, просто добавьте default_server параметр для listen, Nginx будет использовать это server директива по умолчанию.

server {
    listen 80 default_server;
}

О server_name _;

От Документация Nginx

В примерах общих серверов можно увидеть странное имя «_»:

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

В этом имени нет ничего особенного, это только одна из множества недействительных доменных имен, которые никогда не пересекаются с каким -либо настоящим именем.В равной степени можно использовать и другие недопустимые имена, такие как «--» и «!@#».

Неважно, что server_name вы установили, это всего лишь неверное доменное имя.

Если вы также хотите перехватывать запросы с пустыми Host заголовок (который разрешен в HTTP/1.0) вы можете использовать как регулярное выражение, так и пустое server_name:

server {
    listen      80;
    server_name ~. "";
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top