Nginx http para https redireciona para o primeiro server_name

2

Eu tenho esses dois blocos de servidor no meu nginx/sites-enabled/application.conf :

upstream myapplication {
    server 127.0.0.1:8081;
}

server {
    listen 80;
    server_name app1.example.net
                app2.example.net
                app3.example.net;
    return 301 https://$server_name$request_uri;
}

server {
    listen 80;
    server_name app1.example.net
                app2.example.net
                app3.example.net;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_certificate /etc/ssl/certs/example_net.crt;
    ssl_certificate_key /etc/ssl/certs/example_net.key;
    ssl_verify_client off;
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers RC4:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    proxy_ssl_session_reuse off;


    location /apply {
        rewrite ^/apply(.*) $scheme://$server_name/?$query_string? permanent;
    }

    location / {
        proxy_pass http://myapplication;
    }
}

e este é o meu nginx/nginx.conf :     usuário www-data;     worker_processes auto;     pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    disable_symlinks off;
    # server_tokens off;


    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Proxy redirect
    ##

    proxy_redirect              off;
    proxy_set_header            Host            $host;
    proxy_set_header            X-Real-IP       $remote_addr;
    proxy_set_header            X-Forwared-For  $proxy_add_x_forwarded_for;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

O problema que estou tendo é que, se eu visitar link app2.example.net, serei redirecionado para link app1.example.net quando ele me redirecionar para link app2.example.net, no entanto, se eu for direto para link app2.example.net, então isso funciona bem.

O que estou perdendo nessa configuração?

    
por eddie2300 01.09.2017 / 13:46

2 respostas

3

Usar $server_name sempre usará o primeiro no bloco.

Você precisa usar $http_host , que receberá o host de solicitações.

Como alternativa, basta criar três blocos para cada domínio.

    
por 01.09.2017 / 13:56
1

O Nginx selecionará a primeira entrada da variável server_name . Tente usar $http_host e veja se isso ajuda.

$http_host receberá diretamente o host de solicitações da solicitação de HTTP. Como você está usando hosts virtuais, você só receberá solicitações para esse bloco de servidores que contêm um desses nomes, portanto, as solicitações HTTP sempre conterão um desses três hosts.

    
por 01.09.2017 / 13:58