2016-01-25 4 views
0

У меня есть приложение NodeJs, работающее на localhost: 8000, и я использую Nginx в качестве прокси-сервера. Это единственное приложение, работающее на Nodejs, тогда как другие приложения основаны на PHP.Статический файл Nginx, специфичный для поддомена

Я пытаюсь установить прокси-сервер в Nginx для перенаправления всего запроса от «http://localhost/NodeApp/» на «http://localhost:8000/». Только файлы css/js/images из этого nodeapp должны быть получены непосредственно Nginx. Все остальные запросы направляются на сервер Apache. Конфигурации Nginx, как это -

#Need to modify this code to fetch static files for NodeApp only! 
location ~ ^/(uploads/|vendor/|images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { 
    root /var/www/NodeApp/public; 
    access_log off; 
} 

location /NodeApp/ { 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection 'upgrade'; 
    proxy_set_header Host $host; 
    proxy_cache_bypass $http_upgrade; 
    proxy_pass http://localhost:8000/; 
} 

Над Nginx конфигурации брейков других приложений, как это выглядит для статических файлов в общей папке NodeApp. Как я должен изменить выше конфигурации, чтобы работать только для "LOCALHOST/NodeApp /"

Я попытался ниже конфигурации, но это ломает статические папки NodeApp имеет суб-folders- /государственные/JS/начальной загрузки/ /Public/JS/DatePicker/ /государственные/CSS/начальной загрузки/ /государственный/CSS/DatePicker/ /Public/добавления/PDF/ /общественные/изображения/

location /NodeApp/ { 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection 'upgrade'; 
    proxy_set_header Host $host; 
    proxy_cache_bypass $http_upgrade; 
    proxy_pass http://OneDesktop/; 
    alias /var/www/NodeApp/public/; 
} 

Любые советы? Я много пробовал, но не повезло!

Спасибо!

ответ

0

Проблема заключается в том, что приложение Node является не только одним URI, но и представляет собой набор URI. Самый чистый подход состоит в том, чтобы модифицировать само приложение так, чтобы оно проживало ниже /NodeApp/ (в том числе, когда оно тянет свои статические ресурсы).

В текущей ситуации файлы ресурсов для приложения Node перекрывают пространство имен файлов ресурсов для других размещенных приложений, и трудно определить правила для разделения этих двух перекрывающихся пространств имен.

Один вариант (менее идеальный) должен был бы запросить nginx для обслуживания файлов из одного корня документа, а затем отложить до другого корня документа, если исходный файл не существует.

Что-то вроде этого:

root /other/application/root; 

location/{ 
    index ...; 
    try_files $uri $uri/ =404; 
} 

location @other { 
} 

location ~ \.php$ { 
    try_files $uri =404; 
    ... 
} 

location ~ ^/(uploads/|vendor/|images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { 
    root /var/www/NodeApp/public; 
    access_log off; 
    try_files $uri @other; 
} 

location /NodeApp/ { 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection 'upgrade'; 
    proxy_set_header Host $host; 
    proxy_cache_bypass $http_upgrade; 
    proxy_pass http://localhost:8000/; 
} 

location @other блок будет обслуживать статические файлы из другого корня приложения. Блок местоположения PHP является первым регулярным выражением location, так что он имеет приоритет.

+0

Спасибо, Ричард. Цените свой ответ. Попробуем настройки конфигурации nginx сегодня и обновим здесь снова. Один вопрос о реализации приложения под/NodeApp/сам - я использую ** «hackathon-starter» **, который рекомендует ставить статические файлы под public/js, public/css и т. Д. Однако в этом приложении экспресс обрабатывает статические файлы. Что вы предлагаете, это не такой подход? Я делаю что-то не так, как можно найти что-нибудь подобное в Интернете. – Legolas

+0

Извините за опечатку в предыдущем комментарии - Я делаю что-то не так, как мог ** не ** найти что-либо подобное в любом месте в Интернете – Legolas

+0

Извините, я занимался URL-адресами, а не физическими каталогами. Где ваши файлы живут в настоящий момент, все в порядке. Проблема заключается в том, что их URL-адреса отделены от URL-адресов приложений PHP. Для запуска разрозненных приложений в одном домене часто требуются креативные решения, которые не рассматриваются в учебниках по отдельным приложениям. –

Смежные вопросы