Nazwa serwera będącego w konflikcie z Nginx dla poddomeny

15

Obecnie mam vhosta działającego na Nginx dla foo.domain.com i wszystko działa świetnie.

Utworzyłem nowy plik dla nowej subdomeny, którą chcę dodać, o nazwie bar.domain.com. Używam tych samych ustawień dla obu.

Po ponownym uruchomieniu Nginx otrzymuję

Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.

Kiedy wchodzę na bar.domain.com, widzę to, co powinienem zobaczyć, ale kiedy idę na foo.domain.com, widzę stronę, do której prowadzi bar.domain.com.

bla

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name foo.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_foo]/cacert.pem;
        ssl_certificate_key  [path_foo]/privkey.pem;

        root [path]/foo;

        ...
}

Bar

server {
        listen 80;
        server_name bar.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_bar]/cacert.pem;
        ssl_certificate_key  [path_bar]/privkey.pem;

        root [path]/bar;
}

Gdzie się mylę?

RockJake28
źródło
Musisz również określić server_namew konfiguracji SSL (443).
zakjan
Jak w później listen 443na każdym serwerze dodać server_name [foo/bar].domain.com?
RockJake28,

Odpowiedzi:

10

Wygląda mi na to, że twoje bloki https również wymagają podania nazw serwerów, np

server {
    listen 443;
    server_name bar.domain.com;
    ssl on;
    ssl_certificate      [path_bar]/cacert.pem;
    ssl_certificate_key  [path_bar]/privkey.pem;

    root [path]/bar;
}
Lloyd Wilson
źródło
3

Możesz również mieć dodatkowe pliki, z /etc/nginx/sites-available/<site-name>którymi są połączone /etc/nginx/sites-enabled/<site-name>.

Ustawienia w tych plikach mogą powodować konflikt z /etc/nginx/sites-available/defaultplikiem

Hanxue
źródło
3

Miałem podobny problem, gdy przypadkowo miałem zduplikowaną nazwę serwera:

server_name myserver.example.com myserver.example.com;

Naprawiono przez zmianę na:

server_name myserver.example.com;
Steve Tauber
źródło
W moim przypadku przypadkowo miałem dwa osobne vhosty z tym samym server_name; Miałem tę konfigurację od lat i nigdy nie martwiłem się zbytnio tym komunikatem o błędzie. Okazuje się, że błędnie założyłem vhost, który miał być tylko szablonem 😮
Gwyneth Llewelyn
2

Sprawdź także, czy w każdym pliku są /etc/nginx/conf.dduplikaty.

W moim przypadku nginx -tzdałem testy - dostałem ten komunikat o błędzie podczas próby uruchomienia nginx.

Moje /etc/nginx/sites-enabledpliki były wolne od duplikatów domeny (nazwy serwera) i zawierały tylko 1 odniesienie do server_default(i bez localhostduplikatów)

Zamiast tego były 2 pliki, w conf.dktórych oba odnosiły się do konkretnej domeny (tj. 2 pliki miały wiersz podobny do:, servername mydomain.comgdzie jedna z nazw domen była wymieniona w 2 plikach).

Moje rozwiązanie: więc upewnij się, że wszystkie pliki conf.dodnoszą się tylko do określonej wartości servername(nazwy domeny) maksymalnie raz.


( niestety po rozwiązaniu powyższego problemu otrzymuję:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) komunikaty o błędach podczas próby ponownego uruchomienia nginx.)

Aktualizacja : FYI, re: ... Address already in usekomunikat o błędzie powyżej:
Wszystko co musiałem zrobić, to sudo fuser -k 80/tcpwtedy service nginx restartpracował jak urok!
Znalazłem odpowiedź tutaj: https://easyengine.io/tutorials/nginx/trou Rozwiązywanie problemów / emerg-bind-failed-98-address-already- in- use/

aktualizacja2 :
Sugeruje się, że inny proces korzystał z portu 80 (dlatego zabicie go działało, a także ma sens, że nginx nie działał w tym czasie).
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

Wskazują również, że oglądanie procesu, zanim go zabije, może zapewnić wgląd w to, co spowodowało problem.
Dlatego prawdopodobnie lepiej jest użyć albo: sudo fuser -k 80/tcp(bez opcji -k), po której następuje a grepdla tych numerów procesów.
systemctl list-unit-fileswynik, może zapewnić wgląd w proces konfliktu

lub:
fuser -kivn tcp 80gdzie:
-vdrukuje nazwę procesu oprócz identyfikatora procesu,
-ipowoduje wyświetlenie monitu przed zabiciem
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already- w użyciu / 52914/5

SherylHohman
źródło
0

W moim przypadku nie mogłem znaleźć żadnego duplikatu. Jednak miałem plik default.conf, w którym skomentowałem całą konfigurację oprócz bloku serwera otwierającego i klamry zamykającej ... i to spowodowało błąd powodujący konflikt.

Zasadniczo był to nierozliczony blok serwera BEZ dyrektywy nazwa_serwera, która spowodowała problem, a nie duplikat.

Dario Zadro
źródło