Невозможно заставить два одностраничных приложения работать вместе на одном сервере с помощью nginx - PullRequest
0 голосов
/ 12 июня 2018

ОБНОВЛЕНИЕ: Я отредактировал этот пост, чтобы обеспечить более четкое понимание проблемы.Предыдущее сообщение было перезаписано этим обновлением.

У нас есть два одностраничных приложения, которые должны быть доступны через один и тот же домен и порты, но в разных местах.

Приложение1 - это общедоступное приложение, ориентированное на пользователя, которое должно быть загружено при посещении https://example.com.

Приложение2 - это общедоступное приложение для администратора, которое требует аутентификации и должно быть загружено вместо приложения1, еслиони посещают https://example.com/admin.

В настоящее время у меня нет проблем с загрузкой первого приложения, однако я пробовал всевозможные комбинации с моим conf-файлом nginx, чтобы загрузить второе приложение при посещении https://example.com/adminбез успеха.

Вместо этого всегда загружается приложение application1.

Application1 = /var/www/client/public
Application2 = /var/www/client/admin

/var/www/client
     /public (application1)
          index.html
          /dist
     /admin (application2)
          index.html
          /dist

Это файл example.com.conf.Я перепробовал все виды комбинаций, но я стараюсь, чтобы все было очень просто.

server {
     listen 80;

     root /var/www/client;
     index index.html index.htm;

     server_name happyhourmenu.ca;

     location / {
          root /var/www/client/public;
          try_files $uri $uri/ =404;
     }

     location /admin {
          alias /var/www/client/admin;
          try_files $uri $uri/ =404;
     }
}

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

Ответы [ 2 ]

0 голосов
/ 21 июня 2018

Проблема на самом деле не имеет ничего общего с файлом conf.Эта проблема была решена с помощью / u / bakugo на посте Reddit в субреддите vuejs.Я не знаю, разрешено ли мне ссылаться на этот пост, но здесь был его ответ.

Как я и подозревал, проблема не имеет ничего общего с nginx, второй index.html загружает /dist / build.js (который является первым приложением) вместо /admin/dist/build.js

Измените URL-адрес сценария на ./dist/build.js - / u / bakugo

Вот рабочий пример нашего файла conf, который обслуживает два отдельных одностраничных приложения, совместно использующих один домен на одном сервере.Файл conf также настроен для перенаправления запросов через порт 80 на порт 443 и с использованием сертификата SSL.

server {
    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/client;
    index index.html index.htm;

    server_name example.com www.example.com;

    if ($host = www.example.com) {
        return 301 https://example.com$request_uri;
    }

    location / {
        root /var/www/client/public/;
        try_files $uri $uri/ /index.html =404;
        rewrite ^/admin$ /admin/ redirect;
    }

    location /admin {
        alias /var/www/client/admin/;
        try_files $uri $uri/ /index.html =404;
    }

    location /api {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://localhost:3001;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
        }
}

server {
    listen 80;
    listen [::]:80;

    if ($host = example.com) {
        return 301 https://$host$request_uri;
    }
    if ($host = www.example.com) {
        return 301 https://example.com$request_uri;
    }

    return 404;
}
0 голосов
/ 12 июня 2018

Вам необходимо добавить местоположение в конфигурации вашего сервера.Предполагая, что путь к которому вам нужен доступ - это / admin, а файлы находятся в каталоге app2

   location /admin {
        alias /app2; 
    }

Таким образом, конфигурация будет выглядеть примерно так:

server {
       listen [::]:443 ssl ipv6only=on; # managed by Certbot
       listen 443 ssl; # managed by Certbot
       ssl_certificate /etc/letsencrypt/live/domain.ca/fullchain.pem; # m$
       ssl_certificate_key /etc/letsencrypt/live/domain.ca/privkey.pem; #$
       include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
       ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

       server_name domain.ca;
       root /var/www/client;
       index index.html index.htm;
       try_files $uri $uri/ =404;

       location /admin {
           alias /app2; 
       }
}

server {
       server_name domain.ca;

       listen 80;
       listen [::]:80;

       if ($host = domain.ca) {
               return 301 https://$host$request_uri;
       }

       return 404;
}

Проверьте дополнительную документацию: https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/

...