无法设置 nginx 来为我的临时网站提供服务

无法设置 nginx 来为我的临时网站提供服务

我在设置 nginx 来为我的临时网站提供服务时遇到了一些麻烦。我所做的就是更改 server_name,但由于某些原因,它不起作用。

url 方案为“domain.foo”表示生产,“staging.domain.foo”表示暂存,“foobar.domain.foo”表示 Web 服务,“foobar.staging.domain.foo”表示同一 Web 服务器的暂存版本,“.domain.foo”被路由去提供一些 s3 静态 HTML,“.staging.domain.foo" 被路由去为另一个存储桶中的某些 s3 静态 HTML 提供服务。所有生产 URL 均有效且配置正确,但所有暂存 URL 均无效。

这是我的配置文件。你会看到一些重复,我很乐意接受任何更正/优化,我是一名程序员,配置服务器绝对不是我的强项(但我渴望学习和提高……)。

server {
    listen   80; ## listen for ipv4
    server_name "domain.foo" "www.domain.foo" default_server;
    access_log  /var/log/nginx/access.log;
    client_max_body_size 5M;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|js|html)$ {
            access_log off;
            expires max;
            root /home/foo/Foo/current/public;
            break;
        }
        if ($host ~ 'www.domain.foo') {
            rewrite ^/(.*)$ http://domain/foo/$1 permanent;
        }
        proxy_pass http://production;
        break;
    }
}

server {
    listen 80;
    server_name "staging.domain.foo";
    access_log  /var/log/nginx/access.staging.log;
    error_log /var/log/nginx/error.staging.log;
    client_max_body_size 5M;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://staging;
        break;
    }
}

server {
    listen   80; ## listen for ipv4
    server_name "foobar.domain.foo";
    access_log  /var/log/nginx/access.log;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if ($host = 'foobar.domain.foo') {
            proxy_pass http://foobar;
            break;
        }
    }
}

server {
    listen   80; ## listen for ipv4
    server_name foobar.staging.domain.foo;
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://foobar_staging;
            break;
    }
}

server {
    listen 80;
    server_name "~^(.+)\.domain\.foo$";
    location / {
        proxy_intercept_errors on;
        error_page 404 = http://domain.foo/404;
        set $subdomain $1;
        rewrite /$ "/$subdomain/index.html" break;
        rewrite ^ /$subdomain$request_uri? break;
        proxy_pass http://bucket.domain.foo.s3.amazonaws.com;
    }
}

server {
    listen 80;
    server_name "~^(.+)\.staging\.domain\.foo$";
    location / {
        proxy_intercept_errors on;
        set $subdomain $1;
        rewrite /$ "/$subdomain/index.html" break;
        rewrite ^ /$subdomain$request_uri? break;
        proxy_pass http://bucket.staging.domain.foo.s3.amazonaws.com;
    }
}

upstream production {
    server 111.255.111.110:8000;
    server 111.255.111.110:8001;
    server 111.255.111.110:8002;
    server 111.255.111.110:8003;
}

upstream staging {
    server 222.255.222.222:8000;
    server 222.255.222.222:8001;
}

upstream foobar {
    server 111.255.222.165:9000;
    server 111.255.222.165:9001;
    server 111.255.222.165:9002;
}

upstream foobar_staging {
    server 222.255.222.222:9000;
}

现在,当我将浏览器指向 staging.domain.foo 时,它挂起了。在日志中找不到任何内容,但例如创建了 access.staging.log 和 errors.staging.log。

有人有想法吗?:)

答案1

DNS 通常是此处的一个问题。请确保您的客户端和服务器都可以解析:

staging.domain.foo

如果没有为这些设置 DNS,请更新服务器和桌面上的 /etc/hosts 文件。

Nginx 使用 Host: 标头来匹配服务器名称:

将传入的 HTTP 请求的 Host 标头与 Nginx 配置文件中的服务器 { ... } 块进行比较,并选择第一个匹配的块。

http://wiki.nginx.org/HttpCoreModule#server

如果未找到匹配项,则将使用第一个监听节。

相关内容