web-dev-qa-db-ja.com

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

私は現在、foo.domain.comのNginxで仮想ホストを実行しており、すべてがうまく機能しています。

追加したい新しいサブドメイン用の新しいファイル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;
}

どこがいけないの?

14
RockJake28

あなたの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;
}
9
Lloyd Wilson

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

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

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

server_name myserver.example.com;
3
Steve Tauber

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

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

3
hanxue

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

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

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

代わりに、_conf.d_に2つのファイルがあり、どちらも特定のドメインを参照していました(つまり、2つのファイルには、_servername mydomain.com_のような行があり、ドメイン名の1つが2つのファイルにリストされていました)。

私の解決策:したがって、_conf.d_内のすべてのファイルが特定のservername(ドメイン名)値を一度だけ参照するようにしてください。最も。


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

update: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に加えてプロセス名を出力します
_-i_殺す前にプロンプ​​トを表示します
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/5

2
SherylHohman

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

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

0
Dario Zadro