Não é possível definir o nginx para servir meu site de teste

2

Estou tendo alguns problemas para configurar o nginx para servir meu site de teste. O que fiz foi alterar o nome_do_servidor, mas, por alguns motivos, simplesmente não funciona.

O esquema de URL é "domain.foo" é produção, "staging.domain.foo" é temporário, "foobar.domain.foo" é um serviço da web, "foobar.staging.domain.foo" é a versão de teste do mesmo servidor da Web, " .domain.foo" é roteado para servir algum HTML estático s3, " .staging.domain.foo" é roteado para servir algum HTML estático s3 em outro bloco. Todos os URLs de produção funcionam e estão configurados corretamente, todos os URLs de armazenamento temporário não funcionam.

Aqui está o meu arquivo conf. Você verá alguma duplicação, aceitarei de bom grado qualquer correção / otimização, sou um codificador e configurar servidores definitivamente não é minha coisa (mas estou ansioso para aprender e melhorar ...).

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

O que acontece agora quando eu aponto meu navegador para staging.domain.foo é que ele trava. Não é possível encontrar nada nos logs, mas, por exemplo, o access.staging.log e o errors.staging.log são criados.

Alguém tem uma ideia? :)

    
por ngw 13.11.2011 / 01:45

1 resposta

0

O DNS é frequentemente um problema aqui. Certifique-se de que tanto o cliente quanto o servidor possam resolver:

staging.domain.foo

Se o DNS não estiver configurado para eles, atualize o arquivo / etc / hosts no servidor e na sua área de trabalho.

O Nginx usa o cabeçalho Host: para corresponder ao nome do servidor:

Compares the Host header of the incoming HTTP request against the server { ... } blocks in the Nginx configuration files and selects the first one that matches.

link

Se uma correspondência não for encontrada, a primeira estrofe de escuta será usada.

    
por 03.01.2012 / 22:57