Nginx, nama server yang bertentangan untuk subdomain

14

Saat ini saya memiliki vhost yang berjalan di Nginx untuk foo.domain.com dan semuanya berfungsi dengan baik.

Saya membuat file baru untuk sub-domain baru yang ingin saya tambahkan bernama bar.domain.com. Saya menggunakan pengaturan yang sama untuk keduanya.

Ketika saya me-restart Nginx saya dapatkan

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

Ketika saya pergi ke bar.domain.com saya melihat apa yang seharusnya saya lihat, tetapi ketika saya pergi ke foo.domain.com saya melihat halaman yang terhubung dengan bar.domain.com.

Foo

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;

        ...
}

Batang

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;
}

Di mana saya salah?

RockJake28
sumber
Anda perlu menentukan server_namekonfigurasi SSL (443) juga.
zakjan
Seperti dalam setelah listen 443pada setiap server tambahkan server_name [foo/bar].domain.com?
RockJake28

Jawaban:

9

Sepertinya blok https Anda memerlukan nama server yang ditentukan misalnya, misalnya

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
sumber
3

Anda juga dapat memiliki file tambahan /etc/nginx/sites-available/<site-name>yang ditautkan /etc/nginx/sites-enabled/<site-name>.

Pengaturan dalam file-file itu mungkin bertentangan dengan /etc/nginx/sites-available/defaultfile tersebut

hanxue
sumber
3

Saya memiliki masalah serupa ketika saya tidak sengaja memiliki nama server duplikat:

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

Diperbaiki dengan mengubahnya ke:

server_name myserver.example.com;
Steve Tauber
sumber
Dalam kasus saya, saya secara tidak sengaja memiliki dua vhost terpisah dengan yang sama server_name; Saya telah memiliki konfigurasi itu selama bertahun - tahun dan tidak pernah terlalu khawatir tentang pesan kesalahan itu. Ternyata saya salah memulai vhost yang seharusnya hanya menjadi templat 😮
Gwyneth Llewelyn
2

Juga periksa setiap file /etc/nginx/conf.duntuk duplikat.

Dalam kasus saya, nginx -tlulus tes - saya mendapat pesan kesalahan ketika mencoba memulai nginx.

/etc/nginx/sites-enabledFile saya bebas dari duplikat domain (nama server), dan hanya memiliki 1 referensi server_default(dan tidak ada localhostduplikat)

Sebagai gantinya, ada 2 file di conf.dmana keduanya mereferensikan domain tertentu (yaitu 2 file memiliki garis seperti:, di servername mydomain.commana salah satu nama domain terdaftar dalam 2 file).

Solusi saya: Jadi, pastikan semua file conf.dhanya mereferensikan nilai servername(nama domain) tertentu sekali, paling banyak.


( sayangnya setelah memperbaiki masalah di atas, saya sekarang mendapatkan:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) pesan kesalahan ketika saya mencoba untuk me-restart nginx.)

Update : FYI, re: ... Address already in usepesan error di atas:
Semua saya harus lakukan adalah sudo fuser -k 80/tcpkemudian service nginx restartbekerja seperti pesona!
Saya menemukan jawabannya di sini: https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

update2 :
Sudah disarankan bahwa proses lain menggunakan port 80, (itulah sebabnya mematikannya bekerja, dan juga masuk akal b / c nginx tidak berjalan pada saat itu).
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

Mereka juga menunjukkan bahwa melihat proses, sebelum hanya membunuhnya, mungkin memberikan wawasan tentang apa yang menyebabkan masalah tersebut.
Oleh karena itu, mungkin lebih baik menggunakan salah satu: sudo fuser -k 80/tcp(tanpa opsi -k), diikuti oleh grepuntuk angka-angka proses.
systemctl list-unit-filesoutput, mungkin memberikan wawasan tentang proses yang saling bertentangan

atau :, di
fuser -kivn tcp 80mana:
-vmencetak nama proses selain id proses
-imembuatnya cepat sebelum membunuh
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already- sedang digunakan / 52914/5

SherylHohman
sumber
0

Dalam kasus saya, saya tidak dapat menemukan duplikat. Namun, saya memang memiliki default.conf di mana saya berkomentar semua konfigurasi kecuali blok server pembukaan dan braket penutupan ... dan ini menyebabkan kesalahan yang saling bertentangan.

Pada dasarnya, itu adalah penghitungan akun untuk blok server TANPA arahan server_name yang menyebabkan masalah, bukan duplikat.

Dario Zadro
sumber