web-dev-qa-db-ja.com

Nginxを使用して1つのサーバーから2つのサイトにサービスを提供する

Railsアプリがサーバー上で稼働しているので、別のアプリを追加したいと思います。

Nginxにリクエストの目的を確認し、ドメイン名に基づいてトラフィックを分割してほしい

両方のサイトには、サイト対応にシンボリックリンクされた独自のnginx.confがありますが、nginx Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6

両方とも80でリッスンしていますが、異なることを求めています。

サイト#1

upstream blog_Unicorn {
  server unix:/tmp/Unicorn.blog.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name walrus.com www.walrus.com;
  root /home/deployer/apps/blog/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @blog_Unicorn;
  location @blog_Unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_Host;
    proxy_redirect off;
    proxy_pass http://blog_Unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

サイト2:

upstream bubbles_Unicorn {
  server unix:/tmp/Unicorn.bubbles.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name bubbles.com www.bubbles.com;
  root /home/deployer/apps/bubbles/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @bubbles_Unicorn;
  location @bubbles_Unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_Host;
    proxy_redirect off;
    proxy_pass http://bubbles_Unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
64
Chris

ドキュメントによると:

Default_serverパラメーターが存在する場合、サーバーは指定されたアドレスとポートのペアのデフォルトサーバーになります。

また、明らかなことですが、defaultサーバーは1つしか存在できません。

そしてまたそれは言う:

Listenディレクティブには、ソケット関連のシステムコールに固有のいくつかの追加パラメーターを含めることができます。これらは任意のlistenディレクティブで指定できますが、指定されたaddress:portのペアに対して1回のみです。

したがって、listen 80ディレクティブのいずれかからdefaultdeferredを削除する必要があります。また、ipv6only=onディレクティブにも同じことが当てはまります。

104
VBart

これと同じ問題が発生しましたが、重複したdefault_serverディレクティブがこのメッセージの唯一の原因ではありませんでした。

backlogパラメーターは、server_nameディレクティブ。

サイト1:

server {
    listen 80 default_server backlog=2048;
    server_name www.example.com;
    location / {
        proxy_pass http://www_server;
    }

サイト2:

server {
    listen 80;    ## NOT NOT DUPLICATE THESE SETTINGS 'default_server backlog=2048;'
    server_name blogs.example.com;
    location / {
        proxy_pass http://blog_server;
    }
12
Guy

私は同じ問題を抱えていました。 /etc/nginx/sites-available/example2.comファイルを修正して修正しました。サーバーブロックを

server {
        listen 443 ssl; # modified: was listen 80;
        listen [::]:443; #modified: was listen [::]:80;
        . . .
}

/etc/nginx/sites-available/example1.comでコメントアウトlisten 80およびlisten [::]:80サーバーブロックが既に443用に構成されているため。

0
LoganDihel