Mam uruchomioną instancję nginx, która obsługuje kilka witryn internetowych. Pierwsza to komunikat o stanie na adresie IP serwera. Drugi to konsola administratora admin.domain.com
. Te działają świetnie. Teraz chciałbym, aby wszystkie inne żądania domeny trafiały do jednej index.php
- mam mnóstwo domen i subdomen, a ich lista jest niepraktyczna w konfiguracji nginx.
Do tej pory próbowałem ustawienie server_name
się *
jednak, że nie powiodła się nieprawidłowym zamiennika. *.*
działa, dopóki nie dodam innych bloków serwera, więc myślę, że to z nimi koliduje.
Czy istnieje sposób na uruchomienie bloku serwera typu catch-all w nginx po zdefiniowaniu innych witryn?
Uwaga: nie jestem spamerem, to są autentyczne strony z użyteczną treścią, są one po prostu zasilane przez ten sam CMS z bazy danych!
Odpowiedzi:
Zmień opcję nasłuchiwania na tę w swoim bloku serwera catch-all. (Dodaj
default_server
) to zajmie wszystkie niezdefiniowane połączenia (na określonym porcie).jeśli chcesz przesłać wszystko do index.php, jeśli plik lub folder nie istnieje;
źródło
server_name _;
strony stanu adresu IP, musiałem określić,server_name x.x.x.x
ale to jest w porządku!default_server
wydaje się nie działać na nginx 1.4.6, który jest obecnie najnowszą wersją na Ubuntu 14.04 ... Kiedy dodam,configtest
polecenie zwraca błąd, a ponowne uruchomienie serwera również nie działa. Wypróbowałem dokładnie tę samą konfigurację na moim serwerze z Debian jessie, która ma nginx 1.6.2 i działa doskonale. Więc wypróbuj inną wersję, jeśli korzystasz z 1.4.6 ...default_server
dyrektywa określa również serwer, który będzie obsługiwał uzgadnianie SSL dla żądań na tym porcie. Tak więc, jeśli chcesz, aby blok serwera A obsługiwał SSL, ale serwer B działał jako punkt zaczepienia dla HTTPS, rozwiązaniem jest ustawienieserver_name ~^(.+)$
na serwerze B.Prosty podkreślenie też działa:
Źródło: http://nginx.org/en/docs/http/server_names.html
źródło
listen 80 default_server
w swojej konfiguracji._
to tylko nieprawidłowa nazwa?To zadziała:
źródło
server_name ~.
wydaje się być bardziej wydajneU mnie jakoś zdefiniowanie default_server nie działało. Rozwiązałem to przez
używając wyrażenia regularnego all.
źródło
Tylko 1
server
dyrektywaZ Nginx
listen
DocsJeśli masz tylko jedną
server
dyrektywę, która obsłuży wszystkie żądania, nie musisz niczego ustawiać.server
Dyrektywa wielokrotnaJeśli chcesz dopasować wszystkie żądania z określoną
server
dyrektywą, po prostu dodajdefault_server
parametr dolisten
, Nginx użyje tejserver
dyrektywy jako domyślnej.O
server_name _;
Z Nginx Docs
Nie ma znaczenia, co
server_name
ustawisz, jest to po prostu nieprawidłowa nazwa domeny .źródło
Teraz możesz użyć maski:
Zobacz więcej tutaj: http://nginx.org/en/docs/http/server_names.html
źródło
Jeśli chcesz również przechwytywać żądania z pustym
Host
nagłówkiem (co jest dozwolone w HTTP / 1.0 ), możesz użyć zarówno wyrażenia regularnego, jak i pustegoserver_name
:źródło