Всегда выбран сервер Nginx по умолчанию — несколько серверов SSL

У меня есть 3 сервера, определенные в Nginx (которые используются для обслуживания статического содержимого и в качестве прокси для tomcat):

Один обрабатывает необработанные запросы:

server {
   listen 443 default_server;
   return 444;
}

Один для веб-приложения A:

server {
    listen   443;

    server_name webAppA;
    ssl on;
    ssl_certificate /etc/nginx/ssl/webAppA/server.crt;
    ssl_certificate_key /etc/nginx/ssl/webAppA/server.key;

    index index.html;
    root /var/www/webAppA/;

    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
      try_files $uri $uri/ /index.html;
    }

    location /ws/ {
        add_header Cache-Control no-cache;
        proxy_pass        http://localhost:8080/webAppA/ws/;
        proxy_set_header  X-Real-IP  $remote_addr;
    }
}

Один для веб-приложения B:

server {

    listen   443;
    ssl on;
    ssl_certificate /etc/nginx/ssl/webAppB/server.crt;
    ssl_certificate_key /etc/nginx/ssl/webAppB/server.key;
    server_name webAppB

    index index.html;
    root /var/www/webAppB/;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    location /ws/ {
            add_header Cache-Control no-cache;
            proxy_pass        http://localhost:8080/webAppB/ws/;
            proxy_set_header  X-Real-IP  $remote_addr;
    }
    location / {
      #auth_basic            "Restricted";
      #auth_basic_user_file  htpasswd;
      try_files $uri $uri/ /index.html;
    }
}

Я пытаюсь получить доступ к обоим приложениям с помощью:

https://server_ip/webAppA
https://server_ip/webAppB

Но всегда выбирается сервер по умолчанию. У меня включена поддержка TSL SNI.

Я пытался добавить имена серверов в /etc/hosts, но это ничего не меняет.

Есть ли у вас какие-либо идеи ?

Большое спасибо :)


person N LAMY    schedule 01.07.2014    source источник
comment
Оба ваших запроса имеют имя сервера, равное server_ip.   -  person Alexey Ten    schedule 01.07.2014
comment
Спасибо, я разместил одно решение.   -  person N LAMY    schedule 08.07.2014


Ответы (1)


Основанное решение состояло в том, чтобы сделать один сервер, потому что server_name относится к

"https://server_ip" 

а не "wabAppA" или "webAppB".

server {
   listen 443;

   ssl on;
   ssl_certificate /etc/nginx/ssl/server.crt;
   ssl_certificate_key /etc/nginx/ssl/server.key;

   root /var/www/;

   location /webAppA/ {
     try_files $uri $uri/ /webAppA/index.html;
   }

   location /webAppB/ {
     try_files $uri $uri/ /webAppB/index.html;
   }

   location /webAppA/ws/ {
     add_header Cache-Control no-cache;
     proxy_pass        http://localhost:8080/webAppA/ws/;
     proxy_set_header  X-Real-IP  $remote_addr;
   }

   location /webAppB/ws/ {
     add_header Cache-Control no-cache;
     proxy_pass        http://localhost:8080/webAppB/ws/;
     proxy_set_header  X-Real-IP  $remote_addr;
   }
}

Это не так гибко, как хотелось бы, но работает.

person N LAMY    schedule 08.07.2014