Proxy 使用Nginx从一台服务器为两个站点提供服务

Proxy 使用Nginx从一台服务器为两个站点提供服务,proxy,nginx,Proxy,Nginx,我有一个Rails应用程序正在我的服务器上运行,现在我想再添加一个 我希望Nginx检查请求是为了什么,并根据域名划分流量 两个站点都有自己的nginx.conf符号链接到已启用的站点,但我在/etc/nginx/sites enabled/bubbles:6中启动nginx启动nginx:nginx:[emerg]0.0.0:80的重复侦听选项时出错 他们都在听80,但目的不同 场地#1 地点二: upstream bubbles_unicorn { server unix:/tmp/un

我有一个Rails应用程序正在我的服务器上运行,现在我想再添加一个

我希望Nginx检查请求是为了什么,并根据域名划分流量

两个站点都有自己的nginx.conf符号链接到已启用的站点,但我在/etc/nginx/sites enabled/bubbles:6中启动nginx
启动nginx:nginx:[emerg]0.0.0:80的重复侦听选项时出错

他们都在听80,但目的不同

场地#1

地点二:

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

默认的_server参数(如果存在)将导致服务器成为指定地址:端口对的默认服务器

同样显而易见的是,只能有一个默认服务器

它还说:

listen指令可以有几个特定于套接字相关系统调用的附加参数。它们可以在任何listen指令中指定,但对于给定的地址:端口对只能指定一次


因此,您应该从
listen 80
指令中删除
default
deferred
。这同样适用于
ipv6only=on
指令。

也遇到了同样的问题,但重复的
default\u server
指令并不是导致此消息的唯一原因

只能在一个
服务器名称
指令上使用
backlog
参数

范例

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

我也有同样的问题。我通过修改我的/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。

好的,我这样做了,并且通过了nginx启动时的错误检查。站点2按预期工作,站点1从nginx返回400。有什么建议吗?与此相同:没有错误,但access登录中有“-”400 0“--”如果nginx错误日志中没有错误,则该错误是从unicorn返回的。检查一下。要确认此假设,您可以尝试从您的
/assets/
位置请求一些静态文件。在那里看不到任何错误。如果我直接点击IP,我会正确获得站点2,但域返回400。这是DNS配置问题吗?我在两个网站上都使用了www和@via namescape的(地址)。一个有效,另一个不直接请求资产,它也可以。仅供参考,语法“default”在0.8.21@spuder中更改为“default\u server”。谢谢,这突然修复了我的
“default\u server”参数,只能为默认的“listen”指令指定
错误这并不能解决问题。现在,一台服务器正在侦听端口80,另一台正在侦听端口443。问题在于为同一端口但不同域运行两台服务器。
server {
        listen 443 ssl; # modified: was listen 80;
        listen [::]:443; #modified: was listen [::]:80;
        . . .
}