nginx sem server_name e usando apenas endereço IP estático?

34

esta é minha primeira implantação de aplicativo Web e estou enfrentando todos os tipos de problemas.

Atualmente, estou indo para uma implementação nginx + gunicorn para o aplicativo Django, mas principalmente essa pergunta está relacionada às configurações do nginx. Por algum contexto - o nginx receberia conexões e proxy para o servidor local gunicorn.

nas configurações nginx, onde diz server_nameque tenho que fornecer uma? Não pretendo usar nomes de domínio de nenhum tipo, apenas através do ip externo da minha rede (é estático) e do número da porta a ser ouvida.

Meu desejo é que quando eu acessar algo como http://xxx.xxx.xxx.xxx:9050eu possa acessar o site.

A seguir, é apresentado o código de exemplo no qual basearemos as configurações para referência.

   server {
        listen   80;
        server_name WHAT TO PUT HERE?;

    root /path/to/test/hello;

    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /path/to/test/lib/python2.6/site-packages/django/contrib;
    }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
        # what to serve if upstream is not available or crashes
        error_page 500 502 503 504 /media/50x.html;
     }
bater-
fonte

Respostas:

31

server_nameo padrão é uma string vazia, o que é bom; você pode excluí-lo completamente.

Outra abordagem comum para a necessidade "não quero colocar um nome nisso" é usar server_name _;

Seu http://xxx.xxx.xxx.xxx:9050URL não funcionará com esta configuração; você está ouvindo apenas na porta 80. Você também precisará adicionar um listen 9050;.

Shane Madden
fonte
Ei, você pode dar uma olhada neste serverfault.com/questions/678521/…
Muhammad Umer
algo relacionado #
Muhammad Umer
5

nome do servidor _; não é um curinga, veja aqui:

http://blog.gahooa.com/2013/08/21/nginx-how-to-specify-a-default-server

basta especificar a diretiva default_server para acesso somente por IP (consulte http://nginx.org/en/docs/http/request_processing.html )

server {
    listen 1.2.3.4:80 default_server;
    ... 
    }
Joe
fonte
2
É desencorajado simplesmente vincular a informação útil e não incluí-la na sua resposta - nesse caso, a server_name _;correspondência não é compatível.
BE77Y
11
"não é um curinga" == "não é uma correspondência". Tenho certeza que eles entenderão.
Joe
2
Os dois não são iguais; non-match é o que é veiculado quando nada mais corresponde, enquanto um curinga corresponde a tudo. O ponto aqui, no entanto, é que as informações úteis devem estar na resposta, não vinculadas em outro site (por mais que sejam bem apresentadas nesse site), conforme detalhado aqui
BE77Y
E o ponto é que essa não é uma 'boa resposta', mas é uma resposta. Desculpe, não há tempo. Se você deseja editar / reescrevê-lo, eu lhe dou permissão total para. Caso contrário, eles saberão exatamente o que fazer, e é útil. Sinta-se livre para reescrevê-lo, caso contrário, a resposta permanece.
Joe
3
Se você não teve tempo para incluir uma linha extra com as informações pertinentes, sinceramente não sei por que você se incomodou em responder a uma postagem de 3 anos com uma resposta aceita!
2177
4

Se você deseja que seu aplicativo responda na porta 9050 sem nome de host específico, basta pular server_name, não é necessário, pois o Nginx resolve primeiro a entrada de escuta e, em seguida, server_name, se presente:

server {
   listen 9050;

   .....
}

Mais detalhes aqui: Nginx server_name e como funciona

gansbrest
fonte