サブドメインのNginx競合するサーバー名


14

私は現在、foo.domain.comのNginxで実行されているvhostを持っています。

追加したい新しいサブドメイン用の新しいファイルbar.domain.comを作成しました。両方に同じ設定を使用しています。

Nginxを再起動すると、

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

bar.domain.comにアクセスすると、表示されるはずのものが表示されますが、foo.domain.comにアクセスすると、bar.domain.comがリンクしているページが表示されます。

フー

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;

        ...
}

バー

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

どこがいけないの?


server_nameSSL(443)構成でも指定する必要があります。
ザクジャン2015

listen 443各サーバーで後のように追加しserver_name [foo/bar].domain.comますか?
RockJake28 2015

回答:


9

httpsブロックにはサーバー名も指定する必要があるように見えます。例:

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

3

/etc/nginx/sites-available/<site-name>リンクされている追加のファイルがある場合もあります/etc/nginx/sites-enabled/<site-name>

これらのファイルの設定はファイルと競合する可能性があり/etc/nginx/sites-available/defaultます


3

誤ってサーバー名を重複させたときも、同様の問題がありました。

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

これを次のように変更して修正しました:

server_name myserver.example.com;

私の場合、同じを誤って2つの別々のvhostに持っていましたserver_name。私は何年もその設定をしてきましたが、そのエラーメッセージについてそれほど心配することはありませんでした。それは私が誤ってちょうどテンプレート😮になるはずだったのvhost始めていたことが判明
グウィネスLlewelyn

2

また、各ファイルで/etc/nginx/conf.d重複がないか確認してください。

私の場合、nginx -tテストに合格しました-nginxを起動しようとすると、そのエラーメッセージが表示されました。

私の/etc/nginx/sites-enabledファイルにはドメイン(サーバー名)の重複がなく、参照は1つしかserver_defaultありません(localhost重複はありません)

代わりに、conf.d両方が特定のドメインを参照する2つのファイルがありました(つまり、2つのファイルには次のような行がservername mydomain.comあり、ドメイン名の1つが2つのファイルにリストされていました)。

私の解決策: したがって、すべてのファイルがconf.d特定のservername(ドメイン名)値を1回だけ参照するようにしてください。


残念ながら、上記の問題を修正した後、
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginxを再起動しようとするとエラーメッセージが表示されます。)

更新:FYI、RE:... Address already in use上記のエラーメッセージが:
すべて私がしなければならなかったされたsudo fuser -k 80/tcp後、service nginx restart魔法のように働きました!
私はここで答えを見つけました:https : //easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

update2
別のプロセスがポート80を使用していたことが示唆されています(これがkillが機能した理由であり、b / c nginxがその時に実行されていなかったのも理にかなっています)。
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

彼らはまた、プロセスを殺すだけでなく、プロセスを見ることが問題の原因についての洞察を提供するかもしれないと指摘しています。
したがって、おそらくsudo fuser -k 80/tcp(-kオプションなしで)次のいずれかを使用する方が良いでしょう grep
systemctl list-unit-files出力、競合するプロセスに関する洞察を提供する可能性があります

または:
fuser -kivn tcp 80、ここで:
-vプロセスIDに加えてプロセス名を出力し、https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-を強制終了する
-i前にプロンプ​​トを表示し
ます使用中/ 52914/5


0

私の場合、重複を見つけることができませんでした。しかし、私はdefault.confを持っていました。ここで、サーバーの開始ブロックと終了ブラケットを除くすべての構成にコメントしました...これにより、競合エラーが発生しました。

基本的に、問題を引き起こしたのはserver_nameディレクティブのないサーバーブロックの原因不明であり、重複したものではありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.