O Nginx exibe o mesmo conteúdo para solicitações HTTPS em vários domínios

2

Eu criei uma instância do GitLab no meu servidor, vamos chamá-lo de git.domain1.tld . Quando me conecto a https://git.domain1.tld , tudo funciona bem. No entanto, quando me conecto a https://domain2.tld , ele mostra o mesmo conteúdo que https://git.domain1.tld quando, na verdade, não tenho nenhum comportamento definido para HTTPS em domain2.tld .

Não sei ao certo como chamar esse comportamento, por isso tive problemas para pesquisar soluções na Internet.

/etc/nginx/sites-available/domain2.tld :

server {
    listen 80 default_server;
    server_name domain2.tld www.domain2.tld;

    root /srv/domain2.tld/www/;
    index index.php index.html index.htm;

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
                include fastcgi_params;
        }
}

/ etc / nginx / sites-disponíveis / gitlab :

# GITLAB
# Maintainer: @yin8086
# App Version: 4.1

# Modified from nginx http version
# Modified from http://blog.phusion.nl/2012/04/21/tutorial-setting-up-gitlab-on-debian-6/

# You need from run openssl to generate the ssl certificate.
# $ sudo openssl req -new -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key
# $ sudo chmod o-r gitlab.key

upstream gitlab {
  server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
}

# This is a normal HTTP host which redirects all traffic to the HTTPS host.
server {
    listen       80;
    server_name git.domain1.tld;
    server_tokens off;
    root /nowhere;
    rewrite ^ https://git.domain1.tld$request_uri permanent;
}

server {
    listen 443;
    server_name git.domain1.tld;
    server_tokens off;
    root /home/git/gitlab/public;

    ssl on;
    ssl_certificate /etc/nginx/conf/git-unified.crt;
    ssl_certificate_key /etc/nginx/conf/git.key;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers AES:HIGH:!ADH:!MD5;
    ssl_prefer_server_ciphers   on;

    # individual nginx logs for this gitlab vhost
    access_log  /var/log/nginx/gitlab_access.log;
    error_log   /var/log/nginx/gitlab_error.log;

    location / {
        # serve static files from defined root folder;.
        # @gitlab is a named location for the upstream fallback, see below
        try_files $uri $uri/index.html $uri.html @gitlab;
    }

    # if a file, which is not found in the root folder is requested,
    # then the proxy pass the request to the upsteam (gitlab unicorn)
    location @gitlab {
        proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
        proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
        proxy_redirect     off;

        proxy_set_header   X-Forwarded-Proto https;
        proxy_set_header   X-Forwarded-Ssl   on;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;

        proxy_pass http://gitlab;
    }
}
    
por Alexsander Akers 10.05.2013 / 21:41

2 respostas

2

Sem o certificado SNI ou UCC, é assim que o SSL funciona. Um IP para um certificado SSL.

A razão para isto é que o nome de domínio que está sendo solicitado é parte do pacote criptografado, então nginx / Apache / etc. Não sei qual site exibir até após a descriptografia ... que é feita pelo virtualhost padrão desse domínio.

    
por 10.05.2013 / 22:43
1

Consegui corrigir este problema com a seguinte configuração:

/ etc / nginx / sites-available / default

server {
    listen [::]:80 default ipv6only=on;
    listen [::]:443 default ipv6only=on;
    ...
}

/etc/nginx/sites-available/domain2.tld

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name domain2.tld www.domain2.tld;
    server_tokens off;
    root /srv/pandamonia.us/www/;

    ssl_certificate /etc/nginx/conf/www-unified.crt;
    ssl_certificate_key /etc/nginx/conf/www.key;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers AES:HIGH:!ADH:!MD5;
    ssl_prefer_server_ciphers   on;

    ...
}

/ etc / nginx / sites-disponíveis / gitlab

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name git.domain1.tld;
    server_tokens off;
    root /home/git/gitlab/public;

    if ($scheme != "https") {
        rewrite ^ https://git.domain1.tld$request_uri permanent;
    }

    ssl_certificate /etc/nginx/conf/git-unified.crt;
    ssl_certificate_key /etc/nginx/conf/git.key;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers AES:HIGH:!ADH:!MD5;
    ssl_prefer_server_ciphers   on;

    ...
}
    
por 11.05.2013 / 20:43

Tags