Subdomínio de configuração Nginx exibindo comportamento estranho

1

Eu tenho duas gotas idênticas no oceano digital. Ambos rodando o Ubuntu 14.04 com nginx, gunicorn e Django.

Estou tentando estacionar um subdomínio meu no IP de uma das gotículas. No outro droplet, eu estacionei um subdomínio com sucesso e ele funciona como pretendido.

Neste momento, o problema parece ser capaz de se conectar corretamente através do endereço IP do droplet. Ao visitar o endereço IP, a instância do gunicorn pode ser vista perfeitamente e o proxy para a porta do gunicorn :9000 não é necessário para acessá-la.

Ao acessar o subdomínio no qual adicionei um registro A no registrador de domínios apontando para o IP deste droplet, sou saudado por uma página de boas-vindas do nginx dizendo que o nginx precisa de mais configuração.

Ao acessar o subdomínio e anexar a porta gunicorn :9000 , sou recebido pelo aplicativo Django; no entanto, ele não está servindo os arquivos estáticos como acontece ao visitar o endereço IP do droplet. Além disso, se eu visitar o endereço IP e anexar a :9000 port, ele terá o mesmo efeito.

Minha configuração para o nginx é idêntica em ambas as gotas, a única diferença é o endereço IP em server_name .

server {
    server_name *.*.*.*;
    access_log off;

    location /static {
        alias /opt/venv/static;
    }

    location /media {
        alias /opt/venv/media;
    }

    location / {
            proxy_pass http://$server_name:9000;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
    }
}

Eu também tentei definir server_name para o subdomínio também, sem sucesso.

Estou faltando alguma coisa? Por que isso funciona em uma gota, mas não na outra?

EDIT: Adicionado configuração para gunicorn

command = '/opt/venv/bin/gunicorn'
pythonpath = '/opt/venv/fjarrtoolbox'
bind = '127.0.0.1:9000'
workers = 3
    
por Neil Ashley Hickman 25.01.2016 / 23:02

1 resposta

1

Esta linha:

proxy_pass http://$server_name:9000;

Deve ser:

proxy_pass http://127.0.0.1:9000;

Essa alteração roteará o tráfego de maneira eficiente e segura para o back-end por meio da interface de loopback local.

Além disso, o Gunicorn deve ser configurado para vincular-se à porta 127.0.0.1, já que ele destina-se apenas a ser acessado por meio do Nginx. Você está convidando problemas adicionais, expondo-o ao público, se você não precisa.

Veja o que pode dar errado com sua configuração atual. Alguém pode enviar uma solicitação ao seu servidor com um nome de host de terceiros como este:

curl -H 'Host: example.com' http://1.2.3.4/Hello

Seu server_name aceitará solicitações correspondentes a qualquer nome de host, portanto, as solicitações serão processadas e, em seguida, a solicitação será intermediada por proxy para "example.com" em sua porta "9000". Vamos dizer que este é o servidor Gunicorn de outra pessoa que também deixou a porta 9000 aberta. Agora, há potencialmente um tráfego de ataque sendo enviado para esse servidor Gunicorn, originado de seu endereço IP, já que você está executando uma forma de proxy aberto.

É por isso que é bom usar valores explícitos para server_name , para o host proxy_pass e por que seus servidores de back-end devem se vincular explicitamente à porta 127.0.0.1.

    
por 26.01.2016 / 02:39