Назад | Перейти на главную страницу

Как создать поддомены с помощью nginx и proxy_pass для каждого

В настоящее время у меня есть установка nginx для моего сервера в my.server.com. Используя текущую конфигурацию, я получаю доступ к различным приложениям, используя http://my.server.com/app1 или http://my.server.com/app2.

у меня есть apps.conf помещен в /etc/nginx/sites-enabled/ вот как это выглядит:

upstream app1_servers {
    server 172.12.11.10:8080;
}
upstream app2_servers{
    server 172.12.11.10:9090;
}
server {
    listen 80;
    server_name my.server.com;
    return 301 https://my.server.com/$request_uri; #force https
}

server {
    listen 443;
    ssl on;
    ssl_certificate /etc/ssl/my.server.com/cert.pem;
    ssl_certificate_key /etc/ssl/my.server.com/priv.pem;
    server_name my.server.com;

    location /app1 {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_pass http://app1_servers/app1;
            proxy_redirect http://$host https://$host;
          proxy_set_header Host $host;
    }
    location /app2 {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_pass http://app2_servers/app2;
            proxy_redirect http://$host https://$host;
            proxy_set_header Host $host;
    }
}

Вопрос

Вышеуказанное работает нормально. Однако теперь я хотел бы изменить способ доступа app1 и app2. Я хотел бы получить к ним доступ через http://app1.my.server.com и http://app2.my.server.com при этом сохраняя силу ssl и делая proxy_pass

Какие изменения конфигурации мне нужно внести, чтобы это вступило в силу? Кроме того, я хотел бы сохранить параметры конфигурации для каждого приложения в отдельном файле.

Это должно быть довольно просто. Вам просто нужно создать серверные блоки для каждого поддомена, получить сертификат SSL для поддомена (если только основной сертификат не является сертификатом с подстановочными знаками) и скопировать соответствующие блоки местоположения с помощью пары настроек.

Что-то вроде этого должно работать, хотя я не тестировал это, поэтому почти наверняка потребуется некоторая настройка.

server {
  listen 80;
  server_name app1.server.com;
  return 301 https://app1.server.com/$request_uri; #force https
}

server {
  listen 443;
  ssl on;
  ssl_certificate /etc/ssl/app1.server.com/cert.pem; # changed
  ssl_certificate_key /etc/ssl/app1.server.com/priv.pem; # changed
  server_name app1.server.com; # changed

  location / { # changed
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://app1_servers/app1;
        proxy_redirect http://$host https://$host;
        proxy_set_header Host $host;
  }